任何人都可以請我解釋一下客戶端查詢如何分佈在Cassandra集羣中?客戶端查詢如何分佈在Cassandra羣集中?
在我的設置中,我有三個節點(A,B和C),數據在所有節點間均勻共享。我在另一臺PC上運行Python服務器代碼(D)。當客戶端向D發送請求時,Cassandra集羣如何分發客戶端查詢?
任何人都可以請我解釋一下客戶端查詢如何分佈在Cassandra集羣中?客戶端查詢如何分佈在Cassandra羣集中?
在我的設置中,我有三個節點(A,B和C),數據在所有節點間均勻共享。我在另一臺PC上運行Python服務器代碼(D)。當客戶端向D發送請求時,Cassandra集羣如何分發客戶端查詢?
這可能取決於你的python服務器是如何配置的。如果它使用的是Datastax python驅動程序,那麼可以配置各種負載平衡選項,以便告訴驅動程序如何使查詢負載平衡。
例如,cassandra.policies.RoundRobinPolicy將迭代可用的Cassandra節點,以將每個查詢發送到不同的節點。
或者cassandra.policies.TokenAwarePolicy會找出哪些節點具有目標分區的副本並直接聯繫這些節點(即跳過沒有目標分區的節點)。
可用的負載平衡策略有時可以合併。
欲瞭解更多信息,請參閱this。
謝謝吉姆,我已經理解了這個概念....但是如果我有一個像兩個節點A和B的設置。最初A與全數據即意味着沒有集羣設置,並且我添加節點B到集羣與現有的節點A.Now在這個設置中,當兩個節點都有100%的數據時,客戶端查詢是如何分解的? – ssd
這取決於您使用的複製因素。如果使用複製因子1,則兩個節點將分割數據,並且每個節點將處理大約一半的查詢。如果您使用的複製因子爲2,那麼每個節點將擁有完整的數據副本,並且在您執行寫入操作時,兩個節點都會看到寫入,並且在您執行讀取操作時,任一節點都可以處理讀取操作。 –
客戶端向其中一個可用節點發送查詢(我假設您已經建立了到集羣和連接池的連接)。接收請求的節點成爲'協調器'。協調器對主鍵中的令牌進行散列並找出哪個節點有數據。根據一致性級別和複製因子,協調器等待來自所需數量節點的確認。結果然後返回給客戶端。 – LHWizard