Нашият аналитичен сървър е написан на c++. Той основно прави запитвания към основния механизъм за съхранение и връща доста големи структурирани данни чрез спестяване. Типичните заявки ще отнемат около 0,05 до 0,6 секунди, за да завършат, в зависимост от размера на заявката.
Забелязах, че има няколко опции по отношение на това кой Thrift сървър можем да използваме в кода на c++, по-специално TNonblockingServer, TThreadedServer и TThreadPoolServer. Изглежда, че TNonblockingServer е правилният начин, тъй като може да поддържа много повече едновременни заявки и все още да използва пул от нишки зад сцената, за да премине през задачите. Той също така избягва разходите за конструиране/разрушаване на нишките.
Актуализация на Facebook относно спестовността: http://www.facebook.com/note.php?note_id=16787213919
Тук във Facebook работим върху напълно асинхронен клиент и сървър за C++. Този сървър използва I/O, управляван от събития, като текущия TNonblockingServer, но неговият интерфейс към кода на приложението е изцяло базиран на асинхронни обратни извиквания. Това ще ни позволи да пишем сървъри, които могат да обслужват хиляди едновременни заявки (всяка от които изисква извършване на повиквания към други Thrift или Memcache сървъри) само с няколко нишки.
Свързани публикации за stackover: Голям брой едновременни връзки в thrift
Като се има предвид това, не е задължително да можете да вършите работа по-бързо (манипулаторите все още се изпълняват в пул от нишки), но повече клиенти ще могат да се свържат с вас наведнъж.
Просто се чудя има ли други фактори, които пропускам тук? Как да реша кой отговаря най-добре на нуждите ми?