Wenn ich mehrere Webserver in Erlang ausgeführt habe (Load Balanced) und Mnesia für die Backend-Datenbank verwendet wird, was ist der beste Weg, um das ganze System auf eine neuere Version zu aktualisieren?In Erlang, was ist der beste Weg, um ein verteiltes System zu aktualisieren?
Antwort
Obwohl Erlang Hot-Code-Laden unterstützt, ist es nicht etwas, das man verwenden muss. In Ihrem Fall scheint es einfacher, einen Knoten einmal aus dem Load-Balancer zu entfernen, ihn neu zu starten und den neuen Code wieder in den Load-Balancer zu laden.
Das Herunterfahren von Knoten ist auch etwas, worauf Sie vorbereitet sein müssen, wenn Sie ein Warm-Upgrade auf neue Erlang/OTP-Releases in Ihrem Live-System durchführen möchten.
Aber das wirkliche Problem, das für Sie aufblühen kann, sind die Sorgen, die von Mnesia kommen. Ich denke, Sie sollten eine neue Frage mit den Besonderheiten stellen, was Mnesien tun soll. Wenn es keine Schema-/Tabellenänderungen gibt und Sie nur einen Knoten entfernen und später hinzufügen möchten. Oder wenn Sie neue Tabellen oder neue Spalten in Tabellen einfügen. Mnesia bietet die Möglichkeit, Knoten mit Tabellenreplikaten hinzuzufügen und zu entfernen, und es unterstützt auch mehrere Tabellendefinitionen über mnesia:transform_table/3,4
.
Wenn Sie nur Code-Upgrades machen, schrieb ich einen Artikel über erlang release handling with fab. Mit dieser Konfiguration können Sie Code in Echtzeit laden, ohne die Knoten neu starten zu müssen. Die Transformation der Datenbank sollte jedoch von einem einzigen Knoten aus erfolgen, der getrennt vom Release-Upgrade ausgelöst wird.
- 1. Was ist der beste Weg, ein kompaktes verteiltes System mit Ruby und Mongodb zu entwickeln?
- 2. Was ist der beste Weg, um ein Verzeichnis zu leeren?
- 3. Was ist der beste Weg, um ein Objekt in einem Array in ReactJS zu aktualisieren?
- 4. Was ist der beste Weg, Jenkins-Projekte zu aktualisieren?
- 5. Was ist der beste Weg, um mehrere Aktionen zu behandeln?
- 6. Was ist der beste Weg, um ein Zählerfeld in MySQL
- 7. Was ist der beste Weg, Hibernate Entity sicher zu aktualisieren?
- 8. Was ist der beste Weg, um einen InputStream zu überwachen?
- 9. Was ist der beste Weg, um in C++ zu casten?
- 10. Was ist der beste Weg, um Client-Logs in MySQL
- 11. Was ist der beste Weg, um ein "Passwort vergessen?" Seite?
- 12. Was ist der beste Weg, um mit OSGI zu beginnen?
- 13. Was ist der beste Weg, um einen "Timer" zu implementieren?
- 14. Was ist der beste Weg, um srand() zu säen?
- 15. Was ist der beste Weg, um eine Tabelle zu deduplizieren?
- 16. Was ist der beste Weg, um eine Animation zu fahren?
- 17. Was ist der beste Weg, um eine Enumeration zu erhöhen?
- 18. Was ist der beste Weg, um einen ByteArrayOutputStream zu schließen?
- 19. Was ist der beste Weg, um Code zu organisieren?
- 20. Was ist der beste Weg, um eine Eigenschaft zu deklarieren?
- 21. Was ist der beste Weg, um jQuery zu lernen?
- 22. Was ist der beste Weg, um vorberechnete Daten zu implementieren?
- 23. Was ist der beste Weg zu
- 24. Was ist der beste Weg, um ähnliche Strings zu bearbeiten?
- 25. Was ist der beste Weg, um eine IllegalArgumentException zu fangen
- 26. Was ist der beste Weg, um innere Produkte zu bilden?
- 27. Was ist der beste Weg, um eine Sitemap zu erstellen?
- 28. Was ist der beste Weg, um mehrere Suchoptionen zu behandeln?
- 29. Was ist der einfachste Weg, um MNS-Schema zu aktualisieren?
- 30. Android, Was ist der beste Weg, um AbstractThreadedSyncAdapter zu töten?
Ja, ich fürchte, wenn ich neue Tabellen oder neue Spalten in Tabellen einführe, muss ich das ganze System runterziehen. Vielen Dank für Ihre Antwort. Ich wusste nicht, dass es eine transform_table-Funktion gibt. –