Как добиться высокопроизводительного REST API в Azure с помощью .NET?

У нас есть веб-роль .NET, размещенная в Windows Azure , которая обслуживает только REST API с помощью только нескольких веб-методов .

API довольно активно используется другими облачными приложениями (не браузерами). Каждый метод не имеет состояния, что обеспечивает прямое масштабирование и обычно взаимодействует с хранилищем BLOB-объектов или таблиц.

Тогда, в отличие от большинства классических API, количество данных , загруженных в API, обычно намного больше , чем данных , загруженных из API. Кроме того, размер среднего сообщения обычно также довольно велик (т.е. превышает 100 КБ).

Пока что мы используем WCF поверх форм ASP.NET с сообщениями POX (простой старый XML).Производительность внешнего интерфейса не очень хорошая, виноваты:

  • XML многословен ==> ограничение полосы пропускания.
  • ASP.NET + WCF + WcfRestContrib медленно анализирует / сериализует сообщения ==> Ограничение ЦП.

Мне интересно, какова наилучшая стратегия для достижения максимально возможной производительности внешнего интерфейса для уменьшения количества виртуальных машин, необходимых для поддержки рабочей нагрузки.

Возможные стратегии, которые я рассматриваю:

  • Отказаться от XML в пользу ProtoBuf.
  • Добавить восходящий поток GZip-сжатие (классическое HTTP-сжатие применяется только нисходящим потоком ).
  • Полностью отказаться от WCF в пользу необработанных HttpHandler s.

Проверял ли кто-нибудь различные альтернативы, чтобы максимально использовать каждую виртуальную машину Azure для такого использования?

Ps: Неявно ссылается на Lokad Forecasting API , но пытался сформулировать вопрос в более общей форме .

13
задан Joannes Vermorel 27 September 2011 в 15:34
поделиться