2010-10-04 2 views
5

У нас есть приложение Flex/Java, использующее BlazeDS, и мы изучаем сокращение размера передаваемых между нашим сервером и клиентом размеров.Сжатие GZip стоит с AMF

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

UPDATE

Я только что провел простой тест, чтобы определить, какую степень сжатия мы могли бы ожидать, если бы мы должны были включить gzipping. Я просто захватил полезную нагрузку AMF в некоторых файлах и просто скрепил их с помощью версии командной строки Linux. Я не указывал уровень сжатия, просто по умолчанию, то есть «нормальный». Похоже, что в среднем на 9% уменьшается размер полезной нагрузки, при этом некоторые полезные нагрузки достигают 61%. Может ли кто-нибудь увидеть недостаток в этом методе и какой уровень сжатия можно использовать в HTTP-gzipping?

+0

Возможно, это смешной вопрос - используете ли вы варианты, выставленные контейнером сервлетов (то есть tomcat), чтобы включить сжатие? Или вы используете фильтр пользовательских запросов для этого? Я видел, что плавающий вокруг кода подсказывает, что вы запускаете свой собственный фильтр, но я не понимаю, почему вы не можете просто включить сжатие на коннекторе tomcat. благодаря! – tyler

ответ

5

Недавно мы переключили некоторую клиент-серверную связь с SOAP на AMF, а также сравнили влияние сжатия. Мы сосредоточились на одном конкретном сервисе, который возвращает некоторые большие ответы. Это были наши результаты, возвращая одни и те же данные (сериализовать Xfire + эгидой для SOAP и BlazeDS для AMF):

  • SOAP: несжатый: 1000KB архивированная: 100KB (90% снижена)
  • АМФ: несжатый: 200 КБ gzipped: 30 КБ (снижение на 85%)

Наш вывод - gzipping, безусловно, того стоит. Бинарный AMF может быть сжат почти так же хорошо, как XML (SOAP). Конечно, ваш пробег может варьироваться в зависимости от вида данных, которые вы возвращаете.

+0

На каком размере снижается производительность сжатия/декомпрессии, перевешивает сокращенный сетевой трафик? – splash

+3

@splash: Я не думаю, что это зависит от размера. Для больших запросов недостаток (больше процессорного времени) и преимущество (меньшие репоны) масштабируются вместе. Это зависит от того, сколько CPU и пропускной способности требуется вашему серверу и клиентам * запасным * (так что это зависит от того, сколько у вас есть, и как процессор и интенсивность полосы пропускания приложения). –

+0

Было бы также полезно прочитать спецификацию AMF, чтобы понять, где она работает, а где нет. Например, строки не сжимаются вообще в AMF, с другой стороны, если у вас есть целая цепочка, вы не увидите существенного улучшения. –

4

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

например. запись с полем категории, которая является одной из 6 возможностей, может принимать 32-битные, если она закодирована как GUID, но вы можете представить ее с 3 битами. Сжатие будет рассматривать эти шаблоны как очень частое и уменьшать их.

Аналогичные для не повторяющихся строк.

AMF имеет некоторые оптимизации для небольших целых чисел и повторяющихся строк, но не очень сжатие. См. this discusion.

Сделайте несколько тестов и решите.

2

Вы можете поэкспериментировать с тем, как включение и выключение GZIP меняет размеры переноса, используя мой Census RIA Benchmark. Но, как указывали другие, результаты в значительной степени зависят от данных. Таким образом, ваши собственные тесты с вашими собственными данными - лучший способ решить.

Также имейте в виду, что с обеих сторон в GZIP есть накладные расходы, поэтому иногда это накладные расходы (более медленные соединения), а иногда и нет.