Самый эффективный способ использования AWS SQS (с Golang) - PullRequest
0 голосов
/ 16 апреля 2019

При использовании AWS SQS (Simple Queue Service) вы платите за каждый запрос к услуге (push, pull, ...).Максимум 256 КБ для каждого сообщения, которое вы можете отправить в очередь.

Чтобы сэкономить деньги, я бы хотел буферизовать сообщения, отправленные в приложение Go, прежде чем отправлять их в SQS, пока у меня не будет достаточно данных дляэффективно использовать ограничение в 256 КБ.

Поскольку мое приложение Go является веб-сервером, моя текущая идея состоит в том, чтобы использовать строковый мьютекс и добавлять сообщения до тех пор, пока я превышаю ограничение в 256 КБ, а затем выдать событие push SQS.Чтобы сэкономить еще больше места, я мог бы сжать каждое сообщение перед добавлением его в строку mutex.

Интересно, есть ли какой-нибудь поток gzip, который я мог бы использовать для этого.Я предполагаю, что сжатие всех объединенных сообщений приведет к меньшему размеру, чем сжатие каждого сообщения перед добавлением его в строковый мьютекс.Одним из способов было бы сжать мьютекс строки после каждого добавления, чтобы проверить его размер.Но это может быть очень медленно.

Есть ли лучший способ?Или есть лучший подход к каналам?Я все еще новичок в Го, я должен признать.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Вы можете угадать размер сжатых сообщений и рассчитать, достигли ли вы максимального размера. Отслеживайте счетчик размера сообщения и для каждого нового сообщения увеличивайте счетчик до ожидаемого сжатого размера. Выполните фактическое сжатие и отправьте в SQS, только если ваш счетчик превысит 256 КБ. Таким образом, вы можете избежать сжатия каждый раз, когда приходит новое сообщение. Для такого варианта использования, как несколько, выполнение нескольких тестов с образцом набора сообщений должно дать приблизительный процент ожидаемого сжатия.

0 голосов
/ 16 апреля 2019

Я бы выбрал следующий подход

  • Использовать канал для приема входящих "внутренних" сообщений в процедуру go
  • В этой стандартной процедуре сохраняйте сообщения в «сыром» формате, поэтому 10 сообщений - это 10 необработанных несжатых элементов
  • Каждый раз, когда приходит новый необработанный элемент, сжимайте все необработанные сообщения в одно. Если размер с новым сообщением> 256 КБ, тогда сожмите сообщения, КРОМЕ САМОГО последнего и нажмите на SQS

Это вычислительно дорого. Каждое отдельное сообщение вызывает полное сжатие всех ожидающих сообщений. Однако это эффективно для использования SQS

...