Легкое HTTP-приложение / сервер для статического контента - PullRequest
3 голосов
/ 24 апреля 2010

Мне нужна масштабируемая и производительная HTTP-программа / приложение, которое будет использоваться для статической отправки / загрузки файлов. Поэтому мне нужна поддержка только для операций GET и PUT.

Однако есть несколько дополнительных функций, которые мне нужны:

  • Пользовательская аутентификация: мне нужно сверяйте учетные данные с базой данных для каждого запроса. Таким образом, я должен быть в состоянии интегрировать взаимодействие с базой данных.
  • Поддержка подписанные ключи доступа: доступ к ресурсы через PUT должны быть подписаны используя ключ типа http://uri/?key=foo Затем ключ содержит информацию о запросе, например, md5 (пользователь + путь + секрет), который позволяет мне блокировать нежелательные запросы. Приложение / сервер должны позволить мне проверить это.
  • Производительность. Я бы хотел как можно больше избегать подачи контента. В противном случае все приложение может быть реализовано в Perl / etc. в несколько строк как CGI.

Perlbal (в режиме веб-сервера) выглядит неплохо, однако однопоточная модель не подходит для поиска в моей базе данных и также не поддерживает строки запросов.

Lighttp / Nginx /… имеют несколько модулей для этих задач, однако нереально собрать все вместе, не заканчивая написанием собственных расширений / модулей.

Так как бы вы решили это? Есть ли другие легковесные веб-серверы для этого? Должен ли я реализовать приложение внутри веб-сервера (т.е. CGI). Как можно избежать / ускорить передачу содержимого между веб-сервером и моим приложением.

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 24 апреля 2010

Посмотрите на nodejs http://nodejs.org/

Существует несколько модулей для статических веб-серверов и интерфейсов баз данных: http://wiki.github.com/ry/node/modules

Возможно, вам придется написать собственный обработчик загрузки файлов или использовать его из этого примера http://www.componentix.com/blog/13

3 голосов
/ 24 апреля 2010

Приложение nginx + spawn-fcgi + fcgi, написанное на C + memcached + sqlite, хорошо подходит для аналогичной задачи, задержка составляет около 20-30 мс для небольших данных и быстрых соединений из одной локальной сети. Насколько я знаю, рабочий сервер обрабатывает около 100-150 запросов в секунду без проблем. На тестовом сервере я выполнил до 20 000 запросов в секунду, опять же без проблем, средняя задержка составила около 60 мс. Ключевым является агрессивное кэширование и доменные сокеты UNIX.

Не знаю, как эта конфигурация будет вести себя при частых PUT запросах, в нашей задаче они очень редки и обычно группируются.

...