Frage

Hintergrund

Ich versuche, die beste Struktur für eine Azure -Anwendung herauszufinden. Jede meiner Arbeiterrollen wird mehrere langjährige Jobs aufdrehen. Im Laufe der Zeit kann ich Jobs von einer Instanz auf eine andere übertragen, indem ich sie in einen Readonly -Modus in der Quellinstanz umschaltet, sie in die Zielinstanz dreht und dann das Original auf der Quellinstanz dreht.

Wenn ich zu viele Jobs habe, kann ich Azure sagen, dass er eine zusätzliche Rolleninstanz spinnen und sie für neue Jobs verwenden soll. Umgekehrt kann ich, wenn meine Last abfällt (z. B. während der Nacht), herausragende Jobs auf ein paar Maschinen konsolidieren und Azure sagen, dass ich mir weniger Fälle geben soll.

Das Problem ist, dass Azure (wie ich es verstehe) keinen Mechanismus, damit ich entscheiden kann, welche Instanz aufhören soll. Daher kann ich nicht wissen, auf welche Server ich konsolidieren soll, und einige meiner Jobs werden sterben, wenn ihre Instanz aufhört, was zu Verzögerungen für Benutzer führt, während ich diese Jobs in überlebenden Instanzen neu starte.

Idee 1: Ich entscheide, welche Instanz anhalten soll, und kehre von seinem Lauf () zurück. Ich sage dann Azure, dass er meine Instanzzahl um eins reduzieren soll, und hoffe, dass es zu dem Schluss kommt, dass die kaputte Instanz ein guter Kandidat ist. Hat jemand so etwas versucht?

Idee 2: Ich definiere eine ganze Reihe verschiedener Arbeiterrollen mit identischen Inhalten. Ich kann individuell anhalten und sie starten, indem ich ihre Instanzzahl von Null auf eins und wieder zurückschalte. Ich denke, diese Idee würde funktionieren, aber ich mag es nicht, weil sie gegen die natürliche azure Art zu gehen scheint, um Dinge zu tun, und weil es mich in viel zusätzliche Buchhaltung beteiligt, um die zusätzlichen Arbeiterrollen zu verwalten.

Idee 3: Lebe damit.

Gibt es bessere Ideen?

War es hilfreich?

Lösung

Als Antwort auf Ihre Ideen

Idee 1: Ich habe nicht versucht, genau das zu tun, was Sie beschreiben, aber meiner Erfahrung nach hat Ihre erste Instanz einen Namen, der mit _0, dem nächsten _1 endet, und ich bin sicher, Sie können den Rest erraten. Wenn Sie die Instanzzahl verringern, fällt die Instanz mit dem höchsten Suffix ab. Ich wäre überrascht, wenn es den Zustand einer bestimmten Instanz berücksichtigt.

Idee 2: Wie ich denke, dass Sie darauf hinweisen, wird dies Managementprobleme verursachen. Sie können nur 5 verschiedene Arbeitnehmer pro Hosted -Service haben, sodass Sie einen Service für jede Gruppe von 5 Rollen benötigen, auf die Sie skalieren können. Auch wenn Sie Updates bereitstellen, müssen Sie x -mal mehr Dienste hochladen, bei denen X die maximale Anzahl von Instanzen ist, die Sie derzeit unterstützen.

Idee 3: Technisch am einfachsten. Bis zur Klärung ist dies wahrscheinlich das, was ich vorerst tun würde. Um die Nachteile dieser Option zu reduzieren, kann es sich um die Untersuchung des Ladens der Daten schneller bewerben. Normalerweise gibt es ein Goldillocks -Level (nicht zu viel, nicht zu wenig) Parallelität, das dabei hilft.

Andere Tipps

Sie haben Recht - Sie können nicht auswählen, welche Instanz zum Anhalten ist. Im Allgemeinen würden Sie in jeder Arbeiterrolle die gleichen Jobs ausführen, bei denen jede Instanz dieselbe Warteschlange beobachtet (oder möglicherweise mehrere Threads oder Jobs, die mehrere Warteschlangen beobachten).

Wenn Sie wirklich einen Job in einer Instanz ausführen müssen (z. B. einen Scheduler), sollten Sie Blob -Leasingverträge als die Möglichkeit verwenden, dies einzuschränken. Erstellen Sie einen Blob als Mutex. Wie in jeder Instanz versucht der Scheduler -Job, einen Schreibmietvertrag für diesen Blob zu erhalten. Wenn es erfolgreich ist, läuft es. Wenn es fehlschlägt, schläft es einfach (vielleicht für eine Minute) und versucht erneut. Wenn Sie in der Lage in der Anzahl der Punkte in der Zukunft in der Lage sind, werden wir angenommen, dass die Instanz, die den Scheduler läuft, getötet wird. Eine Minute später (oder in welcher Zeitspanne, die Sie wählen) versucht eine andere Instanz, den Mietvertrag zu erwerben, erfolgreich zu sein, und führt jetzt den Scheduler -Code aus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top