очередь с контролем оттока (обратное давление) на AWS
Я хотел бы иметь очередь (FIFO большой емкости), в которую я мог бы помещать элементы, а также контролировать скорость выхода элементов из очереди.
Похоже, что SQS скорее фокусируется на обработке элементов в очереди как можно быстрее, без прямого контроля оттока. Даже с очередью SQS FIFO я не вижу хорошего способа контролировать пропускную способность элементов, покидающих очередь.
Даже использование тайм-аута видимости допускает только очень неэффективную реализацию противодавления.
Есть ли лучший сервис AWS для этого варианта использования?
Или есть хороший подход с использованием SQS, которого я еще не вижу?
1 ответ
Вся идея очереди состоит в том, чтобы отделить производителя от потребителя, что означает, что производитель создает сообщения с определенной скоростью, а потребитель потребляет их с другой скоростью.
Если вы хотите получать сообщения с более низкой скоростью, вам нужно настроить своего потребителя на получение сообщений с этой определенной скоростью. Вам не обязательно потреблять каждое сообщение, когда оно поступает, вы можете оставить их в очереди и потреблять, когда сможете. Например, у вас может быть потребитель, который периодически извлекает сообщения.
Если вашим потребителем является Lambda, вы можете установить зарезервированный предел параллелизма, чтобы у него было определенное количество функций, работающих параллельно. Если вы хотите установить более жесткое ограничение, вы можете активировать Lambda с помощью запланированного события CloudWatch. Хотя я бы не рекомендовал последний подход, потому что он не очень масштабируется.