Как организовать высоконагруженный TCP-сервер?

Имеется постоянно пополняемая БД. Сервер должен выбирать данные из БД и отдавать клиентам, как синхронно (сразу после запроса клиента), так и асинхронно. Другими словами, между клиентами и сервером устанавливается двустороннее соединение. Целевая платформа для сервера — Debian, для клиентов — Windows, Android (+ веб-интерфейс, но тут уже без асинхронности). Все взаимодействия через интернет (у сервера белый IP; клиент может быть где хочешь — за NAT, за Proxy).


Вопрос: как лучше всего реализовать такой TCP-сервер (язык, библиотеки, примеры), чтобы не городить много велосипедов?


Несформированные идеи как попытка симбиоза быстрого гугления и имеющихся навыков:

— написать свой TCP-сервер (Erlang?), начиная с синхронных/асинхронных сокетов, многопоточности и проч.

— или написать модуль для Apache? (плохо предтавляю как это выглядит, да и вряд ли подойдет)

— свой протокол взаимодействия между клиентом и сервером на основе JSON?

— использовать STUNT для обхода NAT-ов?

— использовать SOCKS для прохода TCP-потока через Proxy?

— использовать SSL для защиты TCP-траффика?


У кого есть опыт, помогайте!
  • Вопрос задан
  • 4190 просмотров
Решения вопроса 1
strib
@strib
Исходя из обсуждения выше рекомендую посмотреть:
1) zeromq.org
2) ampq.org
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Evengard
@Evengard
Ну, думаю вы сами ответили на свой вопрос — erlang лично мне кажется лучшим выходом. Вот только велосипед писать врядли стоит — возьмите какой нить yaws (думаю, с http вам проще всего будет — yaws со стороны сервера и кучи библиотек — для андроида и вовсе встроены — для клиента).

Какой протокол — не столь существенно, хотя наверное какой нить из бинарных был б поэффективней. Тем более у эрланга неплохо с обработкой бинарных данных. Нечто вроде rest-а думаю тут будет лучше всего.

NAT transversal для сервера с белым IP вовсе нафиг не нужен. Вот если у вас сервер находился за Nat-ом сам — тогда да. Вы верно заметили — это всё больше для p2p актуальней.

А вот насчёт шифровки… Да, наверное можно и ssl прикрутить, но рекомендую TLS v2 и старше (версии младше и версии ssl не так давно поломали).

Насчёт прокси вообще не понял. Стандартные механизмы запросов со стороны андроида того же более чем достаточны имхо для обработок всяких прокси. Оставьте это дело системе пользователя, не лезьте в это.
Ответ написан
zxmd
@zxmd
Может торнадо?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы