#java #amazon-web-services #jms #amazon-sqs
#java #amazon-web-services #jms #amazon-sqs
Вопрос:
Требование: необходимо использовать пакеты сообщений из очереди sqs. При обработке данных необходимо применить ряд операций. Частота сообщений может быть высокой в течение некоторого времени, поэтому приложение должно иметь возможность обрабатывать ее путем соответствующего масштабирования. Мы разрабатываем приложение для более длительного запуска, после разработки не должно быть никаких серьезных изменений в разработке.
Проект основан на платформе на основе drop-wizard.
Опции:
- Lambda — Исключил эту опцию, поскольку огромная загрузка сообщений в sqs приводит к большему количеству сбоев (в конечном итоге в dlq) в случае lambda. Также мне нужно выполнить более одной операции с данными, где lambda подходит только для одной операции с ним.
- AWS SQS SDK — необходимо записать логику потока для этого (для опроса и обработки сообщений)
- AWS предоставила sqs sdk на основе jms (amazon-sqs-java-messaging-lib) — похоже, он идеально подходит для моего варианта использования. Поскольку он будет обрабатывать логику опроса и параллелизма. Но проблема в том, что последняя версия для этого jar была выпущена в апреле 2019 года. Прошло почти 2 года, до сих пор нет обновлений для этой библиотеки. Также остается много открытых вопросов без ответа.
Я боюсь, что aws выведет из эксплуатации эту библиотеку, а также мой проект должен быть построен таким образом, чтобы в будущем не было серьезных изменений в разработке, таких как изменение зависимости.
Может кто-нибудь, пожалуйста, просветить меня, могу ли я использовать эту библиотеку или лучше просто придерживаться ванильного aws sqs sdk? Если есть какие-либо другие варианты, пожалуйста, укажите это также.
———————————————————ОБНОВЛЕНИЕ————————————————————- Спасибо за предложение использовать lambda или step, увеличив количество одновременных ограничений, чтобы справиться с большой нагрузкой в 1000 tps. Я также провел еще некоторый анализ варианта использования моего проекта и решил перейти к контейнерному приложению, используя простой ванильный AWS SQS sdk для взаимодействия с SQS.
Причины этого решения:
SQS -> My_APP -> Другое приложение
- Как вы можете видеть поток, из My_APP мне нужно взаимодействовать с другим приложением, которое может поддерживать определенные tps. Если у меня есть контроль над логикой опроса, я могу решить эту проблему.
- Также My_APP — это не простой процесс. здесь будет происходить более 1 процесса. (Преобразование, некоторое сопоставление, …)
- Причина, по которой я опубликовал этот вопрос, — получить некоторые обновления библиотеки amazon-sqs-java-messaging-lib. В итоге я не пошел по этому пути, поскольку не уверен в поддержке aws этой библиотеки в будущем.
Комментарии:
1. Почему лямбда приведет к сбою? Сколько стоит ваша «огромная загрузка сообщений»?
2. В пиковое время ожидается около 1200 tps.
3. Не так много. Вы можете заставить lambda сделать это. Вы можете попросить службу поддержки увеличить ваш лимит по умолчанию, допустим, от 1000 до 2000.
4. Спасибо, что указали на это. Я забыл добавить еще один момент — здесь обработка будет похожа на серию операций с данными. В то время как lambda является оптимальным для решения только одной операции. Также я не могу позволить себе 1 лямбду для каждой из этих операций, что может привести к высокой стоимости. Вот почему я изучаю какое-то контейнерное приложение в ec2, используя предоставленный aws sdk.
Ответ №1:
Я не понимаю, «лямбда оптимален для решения только одной операции». Что заставляет вас так говорить? Единственным ограничением является время, необходимое для выполнения серии операций. Если вы постоянно получаете тайм-ауты при выполнении нескольких операций, вы можете использовать пошаговые функции. См. https://docs.aws.amazon.com/step-functions/latest/dg/connect-lambda.html .