2016-05-20 8 views
3

Wir haben viele Batch-Jobs für unseren Service, die von einer Maschine ausgeführt werden, die nun keine CPU-Ressourcen mehr hat.Apache Mesos zum Ausführen von Batch-, Singleton-Jobs?

Die meisten dieser Jobs sind ziemlich einfach. Suchen Sie beispielsweise einmal alle 5 Minuten unsere Datenbank ab und suchen Sie nach Daten, die verarbeitet werden müssen. Verarbeiten Sie dann diese Daten, und das Ergebnis wird in die Datenbank zurückgeschrieben.

Der Trick ist, dass alle diese Jobs nur mit einer Instanz gleichzeitig ausgeführt werden können, denn wenn zwei Instanzen gleichzeitig ausgeführt werden, haben wir Race Conditions und generieren doppelte Ergebnisse.

Ist Apache Mesos die richtige Lösung für uns, um den Jobserver zu ersetzen? Das heißt, können wir viele kleine Frameworks erstellen, jeder ist ein geplanter Job und Chronos, um jeden von ihnen mit einem Zeitintervall auszulösen? Können wir garantieren, dass wenn ein Job ausgelöst wird, nur einmal eine Instanz ausgeführt wird?

Antwort

0

Ja Chronos auf Mesos würde den Trick tun. Um genau zu sein, "erstellt man nicht viele kleine Frameworks", sondern Jobs (in Chronos); Chronos ist eines der Mesos-Frameworks, es gibt viele andere wie Marathon oder Cook.

Das Muster wäre als (für eine containerisierter Job) folgt, sagen wir in einem doc test.json genannt:

{ 
"name": "test", 
"cpus": 0.1, 
"mem": 100, 
"shell": true, 
"command": "echo I AM DOING SOME SERIOUS WORK", 
"async": false, 
"container": { 
    "type": "DOCKER", 
    "image": "ubuntu:14.04" 
}, 
"schedule": "R/2016-05-23T17:00:00Z/PT1M", 
"owner": "[email protected]" 
} 

nun zuerst würden Sie den Chronos Job registrieren (Ich verwende http hier aber auch arbeitet mit, sagen wir, curl):

$ http POST http://$CHRONOS_NODE:8080/service/chronos/scheduler/iso8601 < test.json 

Die obige Job jede Minute von 05.00 auf heute durchführen würde und wenn Sie Sie können es manuell auslösen wie so:

$ http PUT http://$CHRONOS_NODE:8080/service/chronos/scheduler/job/test 

Last but not least, Chronos constraints können Sie die Platzierung beeinflussen.

+0

Nur aus Interesse, wie kann Chronos das mögliche "Mehrfachausführungsproblem" vermeiden? Ich denke, das muss anwendungsorientiert gelöst werden ... AFAIK die Einschränkungen können das nicht lösen. – Tobi

+0

Ich nehme an, Sie haben einen Punkt dort, @Tobi, in dem Einschränkungen allein das Problem von OP nicht lösen würden, aber ich glaube in Kombination mit abhängigen Jobs sollte es funktionieren: http://mesos.github.io/chronos/docs/api. html # adding-a-dependent-job –

0

Sie können sich mit Workflow-Management/Job-Orchestrierung Tools wie Luigi oder Airflow befassen. Sie können Abhängigkeiten definieren und Jobs nur ausführen, nachdem die Jobs beendet wurden, von denen sie abhängig sind.

Verwandte Themen