

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 自動探索的運作方式
<a name="AutoDiscovery.HowAutoDiscoveryWorks"></a>

**Topics**
+ [連線至快取節點](#AutoDiscovery.HowAutoDiscoveryWorks.Connecting)
+ [一般叢集操作](#AutoDiscovery.HowAutoDiscoveryWorks.NormalOps)
+ [其他操作](#AutoDiscovery.HowAutoDiscoveryWorks.OtherOps)

本節說明用戶端應用程式如何使用 ElastiCache 叢集用戶端來管理快取節點連線，以及與快取中的資料項目互動。

## 連線至快取節點
<a name="AutoDiscovery.HowAutoDiscoveryWorks.Connecting"></a>

從應用程式的觀點而言，連線到叢集組態端點與直接連線到個別快取節點沒什麼不同。以下順序圖表顯示連線到快取節點的程序。

![\[連線至快取節點\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/autodiscovery_cluster_membership_refresh-diagram.png)



**連線至快取節點的程序**  

|  |  | 
| --- |--- |
|  ![\[1\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/callouts/1.png) | 應用程式解析組態端點的 DNS 名稱。因為組態端點包含所有快取節點的 CNAME 項目，DNS 名稱會解析到其中一個節點。用戶端接著便能連線到該節點。 | 
|  ![\[2\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/callouts/2.png) | 用戶端請求所有其他節點的組態資訊。因為每個節點都會維持叢集中所有節點的組態資訊，任何節點都能在請求時將組態資訊傳遞給用戶端。 | 
|  ![\[3\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/callouts/3.png) | 用戶端接收到目前快取節點主機名稱及 IP 地址的清單。然後，它便能連線到叢集中所有其他的節點。 | 



**注意**  
用戶端程式每分鐘更新快取節點主機名稱及 IP 地址的清單一次。此輪詢間隔可視需要進行調整。

## 一般叢集操作
<a name="AutoDiscovery.HowAutoDiscoveryWorks.NormalOps"></a>

應用程式連線到所有快取節點之後，ElastiCache 叢集用戶端便會判斷哪些節點應存放個別資料項目，以及稍後應對哪些節點查詢該資料項目。以下順序圖表顯示一般叢集操作的程序。

![\[一般叢集操作\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/autodiscovery_normal_cache_usage-diagram.png)



**一般叢集操作的程序**  

|  |  | 
| --- |--- |
|  ![\[1\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/callouts/1.png) | 應用程式針對個別資料項目發出 get 請求，以資料項目的鍵進行識別。 | 
|  ![\[2\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/callouts/2.png) | 用戶端針對鍵使用雜湊演算法，判斷哪個快取節點包含該資料項目。 | 
|  ![\[3\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/callouts/3.png) | 隨即從適當節點請求資料項目。 | 
|  ![\[4\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/callouts/4.png) | 資料項目傳回應用程式。 | 

## 其他操作
<a name="AutoDiscovery.HowAutoDiscoveryWorks.OtherOps"></a>

在某些情況下，您可能會對叢集的節點進行變更。例如，您可以新增額外節點以滿足其他需求，或刪除節點以在需求減少期間節省成本。或者，您可能會因為任何節點故障而替換掉節點。

當叢集內發生變更，使中繼資料需要更新叢集的端點時，便會同時變更所有節點。因此，任何指定節點中的中繼資料都會與叢集內其他所有節點中的中繼資料保持一致。

在其中任何一種情況下，由於叢集內所有節點的中繼資料都會同時更新，因此所有節點內的中繼資料都會隨時保持一致。建議您一律使用組態端點來取得叢集內各種節點的端點。透過使用組態端點，您可以確保不會從在您面前「消失」的節點取得端點資料。

### 新增節點
<a name="AutoDiscovery.HowAutoDiscoveryWorks.OtherOps.AddNode"></a>

節點啟動期間，中繼資料內不會包含其端點。當節點可供使用時，它便會新增到每個叢集節點的中繼資料。在此案例中，所有節點內的中繼資料都會保持一致，並且您只能在新節點可供使用之後與它互動。在節點可供使用之前，您將無法得知它，並且您會以相同方式與叢集內的節點互動，就好像新節點不存在。

### 刪除節點
<a name="AutoDiscovery.HowAutoDiscoveryWorks.OtherOps.DelNode"></a>

移除節點時，會先從中繼資料移除其端點，然後再從叢集移除節點。在此案例中，所有節點內的中繼資料都會保持一致，並且不會在節點無法使用的同時包含要移除節點的端點。在移除節點期間，中繼資料內不會報告該節點，因此您的應用程式屆時只會與 n-1 個剩餘節點進行互動，宛如節點不存在。

### 取代節點
<a name="AutoDiscovery.HowAutoDiscoveryWorks.OtherOps.ReplaceNode"></a>

若節點失敗，ElastiCache 會撤下該節點，並啟用替代節點。取代程序可能需要幾分鐘。在此期間，所有節點內的中繼資料仍會顯示失敗節點的端點，但任何嘗試與該節點進行的互動都會失敗。因此，建議您的邏輯一律包含重試邏輯。