Jetzt, da wir für die Leader-Wahl auf LeaderLatch des Kurators migriert sind, scheint es, dass unser Leader-Wahlcode VIEL mehr tut als nötig. Einige Dinge, die ich gerne behoben sehen würde:
AnythingBase
ist fast immer ein Anti-Pattern. Werde ElectionServiceBase
los. Wenn wir eine gemeinsame Schnittstelle brauchen, definieren Sie sie. Ziehen Sie es vor, allgemeines Verhalten in Hilfsmethoden zu stecken, anstatt sie zu erben, usw.Das fallende Scala-Skript veranschaulicht, wie prägnant unser Leader-Wahlmodul sein sollte:
https://gist.github.com/timcharper/22a1bca65e9a8268225dcfb97420cdf7
Ich stimme den meisten Ihrer Punkte zu. Einige Ergänzungen:
ElectionServiceBase
: Die gemeinsame Schnittstelle ist bereits definiert: ElectionService
.Scalas eigene Empfehlung lautet, einen Threadpool mit fester Größe zum Blockieren von IO zu haben.
Der Wahlcode verwendet eine andere Clientinstanz. Sollte es das gleiche wie der Speicher verwenden?
Ich möchte auch, dass stopLeadership
und startLeadership
sperrenfrei / nicht blockierend sind. Siehe meinen Kommentar in D379 .
@jeschkies warum hast du überhaupt stopLeadership
? Warum nicht einfach abstürzen?
@jeschkies sollte wahrscheinlich dieselbe Clientinstanz verwenden, aber ich bin mir nicht sicher, ob Curator hinter den Kulissen eine Aggregation des Zookeeper-Verbindungspools durchführt.
Bei genauerem Nachdenken sollten wir mehr recherchieren. Was passiert, wenn auf dem Speicher eine hohe Menge an Lese-/Schreibverkehr vorhanden ist und es zu einem Rückstand kommt? Könnten wir die Führung verlieren? Ich bin mir nicht sicher, was die Folgen sind.
Hinweis: Dieses Problem wurde zu https://jira.mesosphere.com/browse/MARATHON-2008 migriert. Weitere Informationen finden Sie unter https://groups.google.com/forum/#!topic/marathon-framework/khtvf-ifnp8 .
Hilfreichster Kommentar
Scalas eigene Empfehlung lautet, einen Threadpool mit fester Größe zum Blockieren von IO zu haben.