Зачем отделять приложения, где есть быстрый производитель и медленный потребитель? Что просходит? - PullRequest
0 голосов
/ 12 января 2020

Я читаю о SQS и очередях сообщений, и мне интересно, что происходит, когда есть быстрый производитель и медленный потребитель. Что просходит? Где хранится сообщение? Находится ли он в стеке памяти, и в конечном итоге происходит переполнение стека и происходит сбой сервера? Это проблема, что память используется как очередь, которая конечна?

1 Ответ

0 голосов
/ 13 января 2020

Если вы постоянно потребляете сообщения медленнее, чем они создаются, обычно сообщения в SQS (или какой-либо другой системе сообщений, которую вы можете использовать) истекают и теряются. Медленный потребитель может вызвать проблемы с памятью, если у вас есть производитель и потребитель в одних и тех же потоках в памяти, и в этом случае вам может не хватить памяти и cra sh, но это менее характерно для архитектуры на основе сообщений. Чаще всего сообщения будут храниться на диске, но обычно срок их хранения все еще ограничен.

[Изменить]

Если вы используете в памяти неограниченную очередь, вы может столкнуться с проблемами, возьмите следующий пример:

from threading import Thread
import time
from multiprocessing import Queue

class SlowConsumer(Thread):
    def __init__(self, queue: Queue):
        self.queue = queue
        Thread.__init__(self)

    def run(self):
        while True:
            v = self.queue.get()
            print(f"Processing #{v}")
            time.sleep(1)

q = Queue()
c = SlowConsumer(q)
c.start()

i=0
while True:
    q.put(i)
    i+=1
    time.sleep(.1)

Потребитель всегда будет отставать от производителя. В конце концов процесс исчерпает доступную память. Это патологический случай, которого следует избегать - обычно используя ограниченную очередь. Примечание: фактически та же самая проблема может существовать с внешними очередями, которые поддерживают неограниченное хранение, такими как Kafka, но у нас не хватит памяти, мы исчерпаем диск. Для дисковых очередей также лучше установить период хранения, если разумный существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...