Мысли об использовании Nginx для прокси веб-запросов к a .Служба Json на основе Net HttpListener

#c# #.net #nginx #httplistener

#c# #.net #nginx #httplistener

Вопрос:

Я создаю веб-сервис, который должен обслуживать только json, и он должен быть масштабируемым.

У меня сложилось впечатление, что Nginx является более масштабируемым веб-сервером, чем IIS 7.5, и что им чрезвычайно просто управлять по сравнению с IIS. Кроме того, Nginx можно очень легко использовать для балансировки нагрузки между несколькими службами json, используя модуль upstream.

Поскольку мне нужно обслуживать только json, я чувствую, что ASP.Net и IIS — это перебор. Мне просто нужна очень простая маршрутизация и простой механизм authcookie, который я легко могу написать сам.

Прямо сейчас я использую MVC3, но чувствую, что он раздут, когда я обслуживаю только Json, и меня очень раздражает тот факт, что мне приходится писать пользовательские атрибуты аутентификации, чтобы создать политику запрета по умолчанию, создавать HttpModule, чтобы обойти перенаправление неавторизованных запросов WindowsFroms authentication по умолчанию, и в целом мне нужно много читать и учиться, чтобы оставаться под контролем фреймворка. Я также рассматривал WCF, но мой предыдущий опыт работы с этим заключался в том, что для моих нужд было слишком много наворотов и настроек, и о многом нужно было знать, чтобы оставаться под контролем.

Я предпочитаю простоту и хочу избежать «накладных расходов фреймворка», когда мне просто нужно обработать некоторый Http для простого, быстрого и масштабируемого асинхронного json-сервиса. Итак, я рассматриваю подобную настройку:

  • Веб-сервер Nginx на платформе Linux, который балансирует нагрузку между веб-запросами и прокси-серверами к асинхронным службам json.
  • Службы json написаны как службы Windows, использующие HttpListener для асинхронной обработки веб-запросов.

Что вы думаете об этой архитектуре?

РЕДАКТИРОВАТЬ: На самом деле я думаю, что было бы более эффективно использовать fastcgi из nginx в службы Windows вместо проксирования предварительных запросов http? Что вы думаете?

Комментарии:

1. вы привязаны к использованию реализации .net или вы вольны выбирать другую среду программирования? Потому что это выглядит так . net для этого немного излишен. Может быть nodejs.org лучше соответствует вашим требованиям.

2. Я привязан к языку C #, потому что предпочитаю статически типизированный и скомпилированный язык. На самом деле я нахожу, что написание большого сервера в node занимает слишком много времени по сравнению с выполнением этого на C #, потому что отлаживать код C # намного быстрее, потому что вы получаете большую помощь от компилятора и resharper.

Ответ №1:

Просто реализуйте ASHX — в основном IHttpHandler для IIS, который действительно хорошо масштабируется, и большинство проблем, которые вы описываете, просто «уходят»… это дает вам полный контроль над всей обработкой запросов / ответов… хороший учебник см.http://www.dotnetperls.com/ashx

Комментарии:

1. Спасибо за ссылку. Полезно знать, но для моей текущей проблемы я хотел бы отделить веб-сервер от приложения. Я хотел бы услышать от кого-нибудь, кто пробовал что-то вроде того, что я описал.

2. @ssn (используете ли вы nginx для балансировки нагрузки, не оказывает никакого влияния на реализацию) — я сам внедрил какую-то службу Windows на основе HttpListener, я не уверен, что именно вы хотите знать … возможно, вы могли бы уточнить…

3. ОК. В принципе, я хотел бы знать, подходит ли общая архитектура, учитывая, что я не хочу использовать IIS или ASP.NET. Еще одна вещь, которую я рассматриваю, это использовать ли fastcgi или http-прокси (с httplistener) из NGINX в службы Windows. Я предполагаю, что использование fastcgi будет более эффективным, поскольку будут использоваться постоянные TCP-соединения. Прав ли я в этом предположении?

Ответ №2:

Мне кажется, что было бы более чем достаточно настроить простое веб-приложение, имеющее один обработчик запроса, который возвращает соответствующий ответ Json.

Возможно, вы захотите взглянуть на оптимизацию конвейера ASP .NET. Вы можете прочитать больше об этом и других ASP.Здесь оптимизация СЕТИ. Если обработка запросов невелика с точки зрения обработки, вы также можете захотеть увеличить ограничения потока. Это также рассматривается в статье, на которую ссылается.

С точки зрения Nginx, вы можете захотеть проверить, соответствует ли количество рабочих потоков вашему количеству процессоров.

Надеюсь, это поможет.

Комментарии:

1. Под простым веб-приложением вы подразумеваете ASP.NET веб-приложение?

2. Да. Для ваших целей я не уверен, будет ли заметная разница при сравнении MVC с Webforms.