Я хочу обработать много (> 100 К / сек) запросов POST от клиентов javascript с помощью какого-либо сервисного сервера.Не многие из этих данных будут храниться, но мне нужно обработать их все, чтобы я не мог тратить всю свою мощность на сервер только на обслуживание запросов.Вся обработка должна выполняться в одном и том же экземпляре сервера, в противном случае мне нужно будет использовать базу данных для синхронизации между серверами, которая будет медленнее на несколько порядков.
Однако мне не нужно отправлять какие-либо данныеобратно к клиентам, и они даже не ожидают их.Пока что я планировал создать несколько экземпляров прокси-серверов, которые смогут буферизовать запрос и отправлять их на главный сервер большими пакетами.
Например, скажем, мне нужно обрабатывать 200 тыс. Запросов в секунду, и каждыйСервер может обрабатывать 40 КБ.Я могу разделить нагрузку между 5 из них.Затем каждый из них будет буферизировать запросы и отправлять их обратно на главный сервер в пакетах по 100. Это приведет к 2k запросов / сек на главном сервере (однако каждое сообщение будет в 100 раз больше - что, вероятно, означает около 100-200 КБ),Я мог бы даже отправить их обратно на сервер, используя UDP, чтобы уменьшить количество необходимых ресурсов (тогда мне нужен только один сокет на главном сервере, верно?).
Я просто думаю, что нет другого способаускорить вещи.Особенно, когда, как я уже сказал, мне не нужно ничего отправлять обратно.У меня также есть полный контроль над клиентами javascript, но неудачный javascript не может отправлять данные с использованием UDP, что, вероятно, было бы для меня решением (мне даже все равно, будут ли потеряны 0,1% данных).
Любыеидеи?
Редактировать в ответ на ответы, которые я дал до сих пор.
Проблема не в том, что сервер замедляет обработку событий из очереди или помещает события в очередьсам.Фактически я планирую использовать шаблон прерывателя (http://code.google.com/p/disruptor/), который, как было доказано, обрабатывает до 6 миллионов запросов в секунду.
Единственная проблема, с которой я потенциально могу столкнуться, - это необходимость иметь 100, 200 илиОдновременно открываются сокеты 300 тыс., Которые не могут быть обработаны ни одним из основных серверов. Я знаю, что возможны некоторые нестандартные решения (http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-3), но мне интересно, нет ли способа еще лучше использовать тот факт, чтоМне не нужно воспроизводить для клиентов.
(Например, какой-то способ встроить часть данных в исходный пакет TCP и обрабатывать пакеты TCP, как если бы они были UDP. Или какой-то другой вид магии;))