2014-12-07 94 views
1

分佈式系統中的不同組件如何知道在哪裏發送消息來訪問某些服務?分佈式系統在哪裏發送請求?

例如,假設我有一個處理認證的服務和一個處理搜索的服務。處理搜索的組件如何知道在哪裏發送認證請求?子域名更常用嗎?如果是這樣,在這種情況下複製是如何工作的?是否有一些處理所有這些路由的本地IP地址註冊表?

回答

1

您正在描述的問題稱爲服務查找/服務註冊表/資源查找/ ..它取決於。這取決於你的系統有多大以及它的動態性如何。

如果您只有很少的組件,它可能足以將必要的信息存儲在配置文件中,或將其作爲參數傳遞。通常,許多人使用DNS作爲查找系統,但由於緩存和長時間延遲,它不被認爲是一個好的選擇。

我認爲大多數分佈式系統使用Zookeeper爲他們存儲這些信息。這樣所有的服務只需要知道Zookeeper集羣的IP地址。如果你有複製,你只需要在Zookeeper中存儲多個地址,並且根據你使用的系統,你需要自己選擇一個地址,或者驅動程序這樣做(如果你連接到複製數據庫例如)。

另一種方法是使用消息隊列,如ZMQ將消息轉發到正確的實例。 ZMQ也可以處理複製和負載平衡。

+0

那麼服務如何在註冊表中註冊?它只是在啓動時對註冊表進行ping操作,還是需要提前註冊註冊表?我意識到這可能是特定於實現的,你可以告訴我是否「取決於」。 – aclave1 2014-12-08 00:38:28

+0

對於zookeeper,您只需將連接信息包含在特定的密鑰中,其他所有服務都將使用該密鑰來找到您,ZMQ我不確定 - 它不是真的正確,但您可以看到zookeeper是一個可靠的分佈式內部數據庫,內存數據庫(但僅將其用於配置值,不要嘗試將其用於實際數據) – peter 2014-12-08 01:48:39