Wir sind gerade dabei, von einer monolithischen Architektur zu einer automatisch skalierten Gruppe überzugehen, und ich bin mir nicht sicher, wie ich meine Datenbankmigrationen (Laravel) ausführen soll.
Ich denke, dass ein Skript ausgeführt wird, wenn eine neue Box online geht. Dadurch wird mein neuester Code heruntergezogen. Sollte dieses Skript auch meine Datenbankmigration ausführen? Ich bin nicht sicher, wie ich es auf nur einer Box zum Laufen bringen kann?
Antworten:
Wie machst du deine Bereitstellungen? Nuke + erstellt die ASG neu (ob jeweils ein Knoten oder durch Ersetzen der gesamten Gruppe auf einmal), oder haben Sie ein Skript, das alle Ihre aktiven Knoten neu bereitstellt?
Und wie lösen Sie Ihre Bereitstellungen aus?
Idealerweise möchten Sie Bereitstellungen von einer Art CI-Server wie Bamboo oder Jenkins ausführen / auslösen. In diesem Fall können Sie Ihre DB-Migrationen vom Build-Server (oder seinen Komponenten-Build-Agent-Instanzen) ausführen.
Dies würde Ihnen eine bessere Kontrolle über Ihre Umgebung ermöglichen, da Sie beispielsweise die Datenbank aus dem Snapshot wiederherstellen könnten, wenn die Bereitstellung fehlschlägt.
quelle
Der Migrationsstatus vieler Orms in der Datenbank selbst, aber wenn Sie dies manuell tun, ist es auch nicht schwer, sich selbst zu erstellen. Haben Sie einfach eine "Migrationsstatus" -Tabelle, in der alle ausgeführten Migrationen gespeichert sind. Auf diese Weise kann ein Knoten, wenn er online geht, diese Tabelle einfach mit seinem lokalen Ordner "Migrationen" vergleichen und ausführen, was fehlt. Dies sollte dazu führen, dass nur Ihr erster Knoten nach einem Versionsstoß die Migrationen ausführt.
Als Randnotiz: CloudFoundry löst dieses Problem, indem jede Instanz (jeder Knoten) in Ihrem Skalensatz auf ihre Kennung zugreifen kann. Der erste erhält 0, der nächste 1 usw. Auf diese Weise weiß ein Knoten, ob er der erste ist, und kann Migrationen ausführen. Ich denke nicht, dass ASGs dasselbe haben.
quelle