Comment concevoir un système distribué planificateur de travail?
Je veux concevoir un planificateur de travail du cluster, qui contient plusieurs hôtes de faire tâche de planification. Par exemple, un emploi qui a besoin de run every 5 minutes
est soumis à la grappe, la grappe doit point sortir de l'accueil à l'incendie de l'exécution suivante, s'assurer que:
- Catastrophe tolérance: si pas tous les hôtes sont à la baisse, le travail doit être tiré avec succès.
- Validité: uniquement un hôte à l'incendie de la prochaine exécution de la tâche.
En raison de la catastrophe de la tolérance, de l'emploi ne peut pas se lier à un hôte spécifique. Une façon est de tous les hôtes de l'interrogation d'une table DB(certainement avec serrure), cela garanti une seule machine obtient la prochaine exécution de la tâche. Parce qu'il se verrouille de la table, est-il mieux de conception?
OriginalL'auteur coderz | 2014-11-12
Vous devez vous connecter pour publier un commentaire.
Utiliser le Quartz cadre. Il a un cron comme la syntaxe, peuvent être regroupées et seulement l'un des hôtes dans le cluster va faire un travail à la fois. Si un hôte ou d'un travail échoue, un autre hôte, va réessayer dans l'attente de l'emploi.
coderz, de quartz avec le cluster fonctionne comme un simple quartz configuration. vous venez de définir les org.le quartz.jobStore.propriétés isclustered = true, ajouter le quartz des tables de la base de données et de quartz sera de prendre soin de la catastrophe de la tolérance et de l'exécuter une fois seulement. Pour plus d'informations sur la façon de quartz de clustering œuvres, vous pouvez la lire quartz-scheduler.org/generated/2.2.1/html/qs-all/#page/...
OriginalL'auteur Stefan
Je n'ai besoin de quelque chose comme cela, il y a longtemps, lors de la synchronisation a été fait avec les disquettes. Vous devez être clair sur trois choses, qui semble simple, mais en environnement distribué l'arent 🙂
"Synchronisation Des Sections"
Si vous obtenez une nette scission, ce qui signifie que votre cluster est divisé en deux sections séparées, qui peuvent communiquer à l'intérieur des sections, mais pas entre les deux sections, le "feu de l'emploi exactement une fois" ne peut acquis par la synchronisation de la section.
"Catastrophe"
Si presque tous les temps de tous les ordinateurs sont en place et en cours d'exécution et que très rarement un échec, et l'échec des deux est presque impensable, c'est une chose complètement différente, chaque hôte est en cours d'exécution à temps partiel seulement, les connexions sont instables, ou la synchronisation se fait par des connexions d'accès à distance ou par floppys. Si vous voulez même de traiter avec un filet de split, il devient vraiment très compliqué.
Si vous voulez traiter avec des hôtes malveillants, vous avez un autre Problème.
"Validité"
Feu tous les emplois exactement une fois... à vous de les synchroniser plus rapidement que l'emploi intervalle de déclenchement.
edit: Tipp pour le planificateur de tâches de conception. J'ai un gros fichier texte, qui contient des lignes. Chaque ligne est une tâche de travail, en commençant par emploi-type, puis de temps à s'exécuter, alors le commandement et le dernier mais pas moins une option nouvelle présentation de l'intervalle pour la répétition des tâches. La synchronisation des moyens de fusion. Tâches exécutées sont supprimés. Si la nouvelle présentation est sur, une nouvelle tâche est inséré ou joint.
Dans un monde idéal, chaque hôte ist toujours connecté aux autres, je voudrais mettre en œuvre quelque chose comme un anneau à jeton. Si il n'y a pas de maître, est choisi par les hôtes, et le maître est prévu à l'annexe tout jusqu'à ce qu'il n'est pas l'envoi de heardbeats pendant un certain temps. Si il y a deux maîtres, ils négocient pour l'un d'entre eux à devenir des maîtres(peut-être inférieur MAC-Adresse... quoi que).
Si vous avez à traiter avec des hôtes malveillants, vous pouvez utiliser certains byzantine gerenals-la solution du problème. La sélection du maître est deja assez bonne à l'épreuve contre des hôtes malveillants. Avec un peu de rsa-krypto le maître peut la signature de chaque commande, de renvoyer les attaques peuvent être traités avec des horodatages ou la croissance d'indices... voila.
seulement comme une histoire à partir d'un onld programmeur, pas prévu pour aujourd'hui, tout est toujours connecté à l'internet dans le monde:
Mon gros problème a environ 20 ans a été, que les hôtes ont été synchronisés à partir d'une fois par heure, et une fois par jour à une fois par semaine ou une fois par mois. Donc, la solution était d'avoir différentes commandes:
1. exécuter sur chaque hôte à une date donnée (ce qui est assez loin dans le futur pour la synchronisation)
2. exécuter sur un ordinateur hôte, où "whoami" contient un certain sous-chaîne.
3. exécuter sur un aléatoire d'accueil avec peu de probabilité, et d'envoyer un accusé de réception à tous les autres, qu'il est déjà exécuté.
La troisième commande-type fait quelque chose comme "le feu qu'une seule fois", si la synchronisation est beaucoup plus rapide que la probabilité de l'exécution. Il n'a pas besoin de maître-esclave de l'architecture et il fonctionne très bien, si vous connaissez la synchronisation des intervalles.
OriginalL'auteur Marco Haschka
J'ai googlé le Dkron (Distribué planification des tâches système). Il a api rest et semble bon. J'ai l'intention d'essayer de l'utiliser
Dkron site
OriginalL'auteur shcherbak
Je ne suis pas sûr de savoir comment en créer un, mais il y a open-source les produits qui ne sont que ce qui peut servir d'exemple. On est Planificateur Quartz qui est mentionné ci-dessus.
Mais, apparemment, WallmartLabs ont évalué le Quartz, la trouve pas assez bien, et il a ainsi créé et open-source une meilleure (à leur avis) alternative appelée BigBen. Vous pourriez peut-être aussi regarder qui.
OriginalL'auteur mvmn
Envisager d'utiliser AWS Simple Workflow Service si vous êtes OK avec l'aide de web services AWS. L'avantage, par rapport à quelque chose comme le Quartz, c'est qu'il ne dépend pas de la base de données qui vous héberger et il peut fournir beaucoup plus de planification. Par exemple, il peut exécuter certaines activités de fixer votre cluster ou de la page vous si la planification n'est pas possible pour une raison quelconque. Voici un exemple d'une tâche de flux de travail.
OriginalL'auteur Maxim Fateev
Découvrez Chronos (https://mesos.github.io/chronos/) qui s'exécute au-dessus de Mesos - (https://mesos.apache.org/) resource scheduler.
Mesos est un système de gestion des ressources de calcul, d'où un calcul de ressources peuvent être quelque chose comme un script, un service web, une hadoop/spark emploi, et c'est la langue agnostique. Il est conscient de physique de ressources (CPU, Mem, etc...) disponible dans votre cluster et peut allouer des emplois selon l'endroit où les ressources sont disponibles. Chronos s'exécute au-dessus de Mesos et fournit cron-comme les capacités de planification de sorte que vous pouvez planifier des tâches récurrentes et c'est aussi la langue agnostique. I. e. Chronos les horaires et les soumet votre travail de Mesos et Mesos chiffres ce que l'hôte de l'exécuter sur.
OriginalL'auteur gnurik