2008-09-20 2 views
45

Аргументы о простоте решений с использованием XML-RPC или REST легко понять и с трудом спорить.Производительность SOAP против XML-RPC или REST

Я также часто слышал аргументы о том, что увеличение объема SOAP может существенно повлиять на используемую полосу пропускания и, возможно, даже на латентность. Я бы хотел увидеть результаты теста, который количественно оценивает воздействие. Кто-нибудь знает хороший источник такой информации?

ответ

6

Есть несколько исследований, которые были сделаны в отношении этого, что вы можете найти информативным. Пожалуйста, смотрите следующее:

Существует также (несколько устарели) интересный разговор о производительности темы на MSDN Forums.

Короче говоря, большинство из этих источников, похоже, согласны с тем, что SOAP и REST имеют одинаковую производительность для данных общего назначения. Однако некоторые результаты указывают на то, что с двоичными данными REST может быть фактически менее результативным. См. Ссылки на форуме, который я связал для получения более подробной информации об этом.

19

REST как протокол не определяет форму сообщения, в то время как SOAP имеет этот стандарт.

Для этого, несколько упрощенным, чтобы попытаться сравнить эти два, они являются яблоками для апельсинов.

Это означает, что SOAP-конверт (минус данные) составляет всего несколько k, поэтому не должно быть заметной разницы в скорости, если вы извлекаете сериализованный объект через SOAP и REST.

+1

Я думаю, что это disingenous сказать, что REST не определяет конверт сообщения; он говорит: «используйте то, что использует http», которое является типом mime. – pjz 2008-09-20 01:21:32

+0

О, правда? Я хочу отправить сериализованный класс C#, как потребитель протокола REST будет знать, как его анализировать с типом mime. – FlySwat 2008-09-20 01:25:30

2

Я не знаю ни одного ответа на вопрос, связанный с бенчмаркингом, однако, что я знаю о формате SOAP, это да, у него есть накладные расходы, но эти накладные расходы не увеличиваются на каждый запрос: если у вас есть один элемент, отправленный для веб-службы у вас есть накладные расходы + одна конструкция элемента, и если у вас есть 1000 элементов, отправленных в веб-службу, у вас есть надстройка + 1000 элементов. Накладные расходы возникают, когда XML-запрос отформатирован для конкретной операции, но каждый отдельный элемент аргумента в запросе отформатирован одинаково.

Если вы придерживаетесь повторяющихся коротких всплесков данных (скажем, 500 элементов), скорость должна быть приемлемой.

62

Основное влияние на скорость SOAP и REST связано не с скоростью прокрутки, а с кашируемостью. REST предлагает использовать семантику веб-сайта вместо того, чтобы пытаться туннелировать ее через XML, поэтому веб-службы RESTful, как правило, предназначены для правильного использования заголовков кеша, поэтому они хорошо работают с стандартной инфраструктурой сети, например кешированием прокси и даже локальными кешами браузера. Кроме того, использование семантики сети означает, что такие вещи, как ETags и автоматическое сжатие на молнии, хорошо понимают способы повышения эффективности.

.. и теперь вы говорите, что хотите тесты. Ну, с помощью Google я нашел one guy, чей тест показывает, что REST будет на 4-6 раз быстрее, чем SOAP, а другой paper, что также способствует REST.

5

Расширение на ответ «pjz».

Если вы получаете много операций SOAP на основе информации (получить * тип вызовов), в настоящее время вы не можете их кэшировать. Но если бы вы выполняли эти же операции с помощью REST, существует вероятность того, что данные (в зависимости от вашего бизнес-контекста) могут быть кэшированы, как указано выше. Поскольку SOAP использует POST для своих операций, он не может кэшировать информацию на стороне сервера.

8

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

Что-то вроде JSON было бы более компактным и, возможно, быстрее сериализовать/десериализовать, но не использовать его исключительно по этой причине. Сделайте то, что вы чувствуете, имеет смысл в то время и измените его, если это проблема.

Все, что обычно использует HTTP (если это не повторное использование соединения HTTP 1.1 keepalive, которое не реализовано многими реализациями) запускает новое TCP-соединение для каждого запроса; это довольно плохо, особенно в отношении ссылок с высокой задержкой. HTTPS намного хуже. Если у вас есть много коротких запросов от одного отправителя к одному получателю, подумайте о том, как вы можете взять это накладные расходы.

Использование HTTP для любого типа RPC (будь то SOAP или что-то еще) всегда будет нести накладные расходы. Другие протоколы RPC обычно позволяют открывать соединение.

4

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

0

Я предполагаю, что главный вопрос заключается в том, как сравнивать RPC с SOAP.

они оба выполняют один и тот же подход к абстракции связи, имея объекты заглушки, с которыми вы работаете, и примитивные/сложные типы данных, которые вы возвращаете, не зная, как все это обрабатывается снизу.

Я всегда предпочитаю (JSON-) RPC, потому что

  • это легкий
  • существует огромное множество реализаций для всех языков программирования там
  • это просто выучить/использовать/создать
  • это быстро (особенно с JSON)

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

несколько больше деталей вы получите от этого StackOverflow question

 Смежные вопросы

  • Нет связанных вопросов^_^