У меня есть приложение python, где я хочу начать делать больше работы в фоновом режиме, чтобы он стал лучше масштабироваться по мере того, как он становится более занятым. Раньше я использовал сельдерей для выполнения обычных фоновых задач, и это сработало хорошо.
Единственное различие между этим приложением и другими, которые я делал в прошлом, это то, что я должен гарантировать, что эти сообщения обработаны, они не могут быть потеряны.
Для этого приложения я не слишком обеспокоен скоростью для очереди сообщений, мне нужна надежность и долговечность, и формост. Чтобы быть в безопасности, я хочу иметь два сервера очереди, как в разных центрах обработки данных, в случае, если что-то пойдет не так, а как резервное копирование другого.
Глядя на сельдерей, похоже, что он поддерживает кучу разных бэкэндов, некоторые из которых имеют больше возможностей, чем другие. Два самых популярных выглядят как redis и RabbitMQ, поэтому я потратил некоторое время на их изучение.
RabbitMQ: Поддерживает длительные очереди и кластеризацию, но проблема с тем, как они сегодня кластеризуются, заключается в том, что если вы потеряете node в кластере, все сообщения в этом node недоступны, пока вы не вернете этот node обратно. Он не реплицирует сообщения между различными узлами в кластере, он просто реплицирует метаданные об этом сообщении, а затем возвращается к исходному node, чтобы получить сообщение, если node не работает, вы SOL Не идеально.
Способ, которым они рекомендуют обойти это, - настроить второй сервер и реплицировать файловую систему с помощью DRBD, а затем запустить что-то вроде кардиостимулятора, чтобы переключать клиентов на резервный сервер, когда это необходимо. Это кажется довольно сложным, не уверен, есть ли лучший способ. Кто-нибудь знает лучший способ?
Redis: Поддерживает чтение подчиненного устройства, и это позволит мне иметь резервную копию в случае возникновения чрезвычайных ситуаций, но не поддерживает настройку master-master, и я не уверен, справляется ли она с активным откатом между master и slave. Он не имеет таких же функций, как RabbitMQ, но выглядит намного проще в настройке и обслуживании.
Вопросы:
-
Каков наилучший способ настройки сельдерея? так что это будет гарантировать сообщение обработка.
-
Кто-нибудь сделал это раньше? Если так, Было бы разумно делиться тем, что вы сделали?