34 votes

Comment garantir la livraison du message avec le céleri?

J'ai une application en python où je veux commencer à faire plus de travail en arrière-plan, de sorte que l'échelle de mieux comme ça devient plus occupé. Dans le passé, j'ai utilisé le Céleri pour faire normal des tâches de fond, et cela a bien fonctionné.

La seule différence entre cette application et les autres que j'ai fait dans le passé, c'est que j'ai besoin de garantir que ces messages sont traités, ils ne peuvent pas être perdus.

Pour cette application, je ne suis pas trop préoccupé par la vitesse de mon message de la file d'attente, j'ai besoin de fiabilité et de durabilité en premier lieu. Pour être sûr que je veux avoir deux de la file d'attente des serveurs, à la fois dans les différents centres de données dans le cas où quelque chose va mal, l'un d'une sauvegarde de l'autre.

En regardant le Céleri on dirait qu'il prend en charge un tas de différents backends, certains avec plus de fonctionnalités que les autres. Les deux plus populaires ressemblent et redis RabbitMQ j'ai donc pris un peu de temps pour les examiner plus à fond.

RabbitMQ: Prend en charge durable des files d'attente et de clustering, mais le problème avec la façon dont ils ont clustering aujourd'hui, c'est que si vous perdez un nœud dans le cluster, tous les messages de ce nœud sont pas disponibles jusqu'à ce que vous amenez le nœud de retour en ligne. Il n'a pas reproduit les messages entre les différents nœuds du cluster, c'est juste réplique les métadonnées sur le message, puis il remonte vers le nœud d'origine pour faire passer le message, si le nœud n'est pas en cours d'exécution, vous êtes S. O. L. ne sont Pas idéales.

La façon dont ils recommandent de contourner ce problème est d'installer un second serveur et de reproduire le système de fichiers à l'aide de DRBD, puis l'exécution de quelque chose comme stimulateur pour passer la clients vers le serveur de sauvegarde quand il en a besoin aussi. Cela semble assez compliqué, vous ne savez pas si il ya une meilleure façon. Quelqu'un connais un meilleur moyen?

Redis: Prend en charge une lecture de l'esclave et cela me permettrait d'avoir une sauvegarde en cas de situations d'urgence, mais il ne supporte pas les maître-maître de l'installation, et je ne suis pas sûr si il gère un actif de basculement entre le maître et l'esclave. Il n'a pas les mêmes caractéristiques que RabbitMQ, mais semble beaucoup plus facile à installer et à entretenir.

Questions:

  1. Quelle est la meilleure façon pour l'installation de céleri de sorte qu'il sera de garantir message la transformation.

  2. Quelqu'un a fait cela avant? Si oui, serait l'esprit de partage de ce que vous avez fait?

5voto

Chris Johnson Points 2887

Beaucoup de choses ont changé depuis le PO! Il existe maintenant une option pour la haute disponibilité appelée "files d'attente en miroir". Cela va assez loin dans la résolution du problème que vous avez décrit. Voir http://www.rabbitmq.com/ha.html .

3voto

Travis R Points 8935

Vous voudrez peut-être consulter IronMQ , il couvre vos besoins (durable, hautement disponible, etc.) et constitue une solution en nuage native, donc aucune maintenance. Et il existe un courtier Celery pour cela: https://github.com/iron-io/iron_celery afin que vous puissiez commencer à l'utiliser simplement en changeant votre configuration de Celery.

1voto

Malcolm Box Points 2427

Je soupçonne que le céleri lié aux systèmes existants est la mauvaise solution pour les garanties de fiabilité dont vous avez besoin.

Étant donné que vous souhaitez un système de file d'attente distribué offrant de fortes garanties de durabilité et de fiabilité, je commencerais par rechercher un tel système (ils existent), puis par trouver le meilleur moyen de le lier en Python. Cela peut être via Celery et un nouveau backend, ou non.

0voto

varela Points 478

J'ai utilisé Amazon SQS pour cette proposition et j'ai obtenu de bons résultats. Vous recevrez un message jusqu'à ce que vous le supprimiez de la file d'attente, ce qui vous permettra de développer votre application aussi haut que vous le souhaitez.

0voto

mogga Points 347

L'utilisation d'un système de rendu distribué est-elle une option? Normalement réservé au HPC mais beaucoup de concepts sont les mêmes. Découvrez Qube ou le rendu de la date limite. Il existe également d’autres solutions open source. Tous ont à l'esprit le basculement en raison du haut degré de complexité et du risque d'échec de certains rendus pouvant prendre des heures par trame de séquence d'images.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X