У нас есть веб-сервисы REST, которые могут обслуживать XML или JSON (WCF). Я играю с идеей реализации Protobufs. Зачем?
ПРОФИ
- Меньшая нагрузка на серверы.
- Меньший размер сообщения - меньше трафика.
- Теперь легче переключиться, чем позже.
МИНУСЫ
- Нужно реализовать
- Будет сложнее устранять неполадки / прослушивать сообщения для отладки.
- Я могу включить GZip на сервере и JSON будет потреблять столько же трафика
Каково ваше предложение и / или опыт в этом?
web-services
wcf
serialization
катит
источник
источник
Ответы:
Превышает ли бизнес ценность их реализации над стоимостью?
Если вы внедряете, вам нужно изменить не только ваш сервер, но и все клиенты (хотя вы можете поддерживать оба формата и изменять клиентов только по мере необходимости). Это займет время и тестирование, что является прямой ценой. И не стоит недооценивать время, необходимое для реального понимания буферов протокола (особенно причины сделать поле обязательным или необязательным), а также время, необходимое для интеграции компилятора protobuf в ваш процесс сборки.
Так что значение превышает это? Вы сталкиваетесь с выбором «наши расходы на пропускную способность составляют X% наших доходов, и мы не можем это поддержать»? Или даже «нам нужно потратить 20 000 долларов, чтобы добавить серверы для поддержки JSON»?
Если у вас нет насущных потребностей в бизнесе, ваши «плюсы» на самом деле не профи, а преждевременная оптимизация.
источник
я поддерживаю apis, и кто-то до меня добавил protobuf (потому что это было "быстрее"). Единственное, что быстрее - это RTT из-за меньшей полезной нагрузки, и это можно исправить с помощью gzipped JSON.
Часть, которая мне неприятна, - это относительная работа по поддержке protobuf (по сравнению с JSON). Я использую Java, поэтому мы используем сопоставление объектов Джексона для JSON. Добавление к ответу означает добавление поля в POJO. Но для protobuf мне нужно изменить файл .proto, а затем обновить логику сериализации и десериализации, которая перемещает данные в / из буферов протокола и в POJO. Неоднократно случалось, что случался релиз, когда кто-то добавил поле и забыл вставить код сериализации или десериализации для буферов протокола.
Теперь, когда клиенты реализовали против буферов протокола, от него почти невозможно избавиться.
Вероятно, из этого можно догадаться, мой совет - не делай этого.
источник