亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go Webapp Cluster Leader選舉

Go Webapp Cluster Leader選舉

Go
森欄 2021-12-07 16:53:05
我正在編寫一個相當復雜的 Go webapp,我想讓它高度可用。我計劃讓多個 VM 運行該應用程序,并使用負載平衡器根據我的需要在它們之間引導流量。它變得復雜的地方在于 webapp 有一種數據庫簿記例程在運行,我只想要(最多)任何時候的一個實例。因此,如果我有三個 webapp 虛擬機,那么只有其中一個應該進行簿記。(是的,我知道我可以將簿記完全拆分為一個單獨的 VM 實例,但代碼已與 web 應用程序的其余部分高度集成。)我花了幾個小時研究etcd、raft、bully、memberlist、Pacemaker等等。這些似乎都需要吸收很多信息來完成我所追求的目標,或者我看不到使用它們的明確方法。在這個特定用例中,我想要的是一個系統,讓 Go webapp 節點自動檢測彼此并選舉一個“領導者”來進行簿記。理想情況下,這可以擴展到 2 到 10 個節點,并且不需要手動將 IP 地址添加到配置文件(但可能,如有必要)。我在想在網絡分區或其他節點無法看到其他節點的情況下,我不希望它選舉自己作為領導者,因為有可能有兩個節點試圖在同時。這也意味著,如果我將集群精簡為單個 VM,則不會發生簿記,但在維護期間可以容忍一小段時間,或者我可以在某處設置某種標志。我想知道是否有人可以為我指出正確的方向,希望我如何能夠以低復雜度實現這一目標,同時盡可能地利用現有的代碼庫。
查看完整描述

1 回答

?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

根據您的容錯和一致性要求 - 特別是防止分區中的腦裂 - 像 Raft 這樣的共識算法是您最想要的。但是即使 Raft 是為可理解性而設計的,它仍然需要大量的專業知識才能正確實施。因此,正如其他人所提到的,您應該研究現有的服務或實現。

ZooKeeper (ZAB)、etcd (Raft) 和Consul (Raft) 是用于執行此類操作的最廣泛使用的系統。考慮到您希望虛擬機從 2 個節點擴展到 10 個節點,這很可能是您想要的方式。Raft 和其他共識算法有仲裁要求,如果算法直接嵌入到您的 VM 中,則以這種方式進行擴展可能不太實用。通過使用外部服務,您的 VM 只需成為共識服務的客戶端,并且可以獨立于它進行擴展。

或者,如果您不想依賴外部服務進行協調,Raft 網站提供了各種語言的詳盡實現列表,其中一些是共識服務,一些可以嵌入。但是,請注意其中許多是不完整的。至少,任何適用于生產的 Raft 實現都必須實現日志壓縮。如果沒有日志壓縮,服務器實際上只能運行有限的時間 - 直到磁盤填滿日志。


查看完整回答
反對 回復 2021-12-07
  • 1 回答
  • 0 關注
  • 224 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號