Pour le meilleur ou pour le pire, nous avons migré l'ensemble de notre LAMPE de l'application web à partir de machines spécifiques pour le cloud (Amazon EC2 machines). Il va très bien jusqu'à présent, mais la façon dont nous faisons des crons est sous-optimale, j'ai un Amazon spécifique à la question de savoir comment gérer au mieux les tâches cron dans le cloud à l'aide de "l'Amazone".
Le problème: Nous avons plusieurs serveurs web, et besoin pour exécuter crons pour les travaux en lots comme la création de flux RSS, déclenchant des e-mails, beaucoup de choses différentes en fait. MAIS les tâches cron besoin pour s'exécuter uniquement sur une machine parce qu'ils écrivent souvent à la base de données afin de dupliquer les résultats s'exécuter sur plusieurs machines. Jusqu'à présent, nous avons désigné l'un des serveurs web en tant que "maître-toile" et il a un peu "spécial", les tâches que les autres serveurs n'ont pas. Le compromis pour le cloud computing, c'est la fiabilité - nous ne voulons pas d'un "maître-toile" parce que c'est un point de défaillance unique. Nous voulons tous être identiques et être en mesure de haut de gamme et de réduire, sans se souvenir de ne pas prendre le maître-serveur de cluster.
Quelqu'un at-il de bons conseils sur la re-conception d'une application pour convertir Linux tâches cron en transitoire éléments de travail qui n'ont pas de point unique de défaillance?
Mes idées à ce jour:
- Avoir une machine dédiée uniquement à l'exécution de crons. Ce serait un peu plus facile à gérer, mais serait encore un point unique de défaillance, et serait gaspiller de l'argent supplémentaire instance.
- Certains emplois pourraient être déplacés à partir de linux crons pour MySQL Événements cependant, je ne suis pas un grand fan de cette idée que je ne veux pas mettre la logique de l'application dans la base de données de la couche.
- Peut-être que nous pouvons exécuter tous les crons sur toutes les machines, mais de changer notre cron scripts afin qu'ils commencent tous avec un peu de logique qui met en œuvre un mécanisme de verrouillage de sorte qu'un seul serveur prend en fait d'action et les autres, il suffit de sauter. Je ne suis pas fan de cette idée qu'il y paraît potentiellement buggy et je préfère utiliser un Amazon meilleures pratiques plutôt que de rouler notre propre.
- Je suis d'imaginer une situation où les travaux sont planifiés quelque part, ajouté à une file d'attente, puis les serveurs pourraient chacun être un travailleur, qui peut dire "hey, les gars, je vais prendre celui-ci". Amazon Simple Workflow Service des sons exactement ce genre de chose, mais je ne suis actuellement pas en savoir beaucoup sur elle de sorte que des précisions seraient utiles. Il semble sorte de "poids lourds" pour quelque chose d'aussi simple qu'un cron? Est-ce le bon service ou est-il plus adapté Amazon service?
Mise à jour: Depuis posant la question, j'ai regardé le Amazon Simple Workflow Service webinaire sur youtube et a remarqué à 34:40 (http://www.youtube.com/watch?v=lBUQiek8Jqk#t=34m40s) j'ai attrapé un aperçu d'une diapositive de mentionner des tâches cron comme un exemple d'application. Dans leur page de documentation, "AWS Flow Framework échantillons pour Amazon SWF", Amazon disent qu'ils ont des exemples de code pour crons:
... > Cron jobs Dans cet exemple, une longue course de flux de travail périodiquement exécute une activité. La capacité de poursuivre les exécutions, en tant que nouveau les exécutions de sorte qu'une exécution peut fonctionner pendant de très longues périodes de le temps est démontrée. ...
J'ai téléchargé le SDK AWS pour Java (http://aws.amazon.com/sdkforjava/) et bien sûr enterré à l'intérieur d'un ridicule couches de dossiers, il est certains de code java (aws-java-sdk-1.3.6/samples/AwsFlowFramework/src/com/amazonaws/services/simpleworkflow/flow/examples/periodicworkflow
).
Le problème est que si je suis honnête, ce n'est pas vraiment utile car il n'est pas quelque chose que je peux facilement digérer avec mon niveau de compétences. Le même échantillon est manquant dans le sdk php et il ne semble pas être un tutoriel qui marche bien le processus. Donc, fondamentalement, je suis toujours à la chasse pour obtenir des conseils ou des conseils...