EVCache 具有如下的特性:
1EVCache 的CS架構
EVCache客戶端是一個Java的客戶端,用于發現EVCache服務器并管理所有的增刪改查(CRUD)操作,由客戶端處理在集群中添加/刪除服務器。基于亞馬遜云服務可用區,客戶端在執行創建、更新和刪除操作的時候復制數據。
另一方面,客戶端的讀操作直接從同一可用區的服務器讀取數據。
EVCache 具有如下的特性:
1EVCache 的CS架構
EVCache客戶端是一個Java的客戶端,用于發現EVCache
服務器并管理所有的增刪改查(CRUD)操作,由客戶端處理在集群中添加/刪除服務器。基于亞馬遜
云服務可用區,客戶端在執行創建、更新和刪除操作的時候復制數據。
另一方面,客戶端的讀操作直接從同一可用區的服務器讀取數據。
一個EVCache客戶端連接了多個EVCache的服務器集群。 在一個區域內,Netflix有多個全數據集的拷貝,由亞馬遜云服務的可用區隔離開來。虛線框描述了區域內的副本,每個擁有數據的全量鏡像,作為AWS的自動伸縮組來管理這些鏡像。某些緩存在一個區域內有兩個鏡像,有的擁有更多。這種高層架構長期來看是有效的,不會改變,每個客戶端連接自己區域內所有可用區的所有服務器。寫操作被發往所有實例,讀操作優先選擇離讀請求近的服務器。
2EVCache 跨區域復制
Netflix的全球云服務遍布AWS各個服務區域,例如北弗吉尼亞、俄勒岡州和愛爾蘭,為這些地區的會員提高就近服務,但網絡流量會因為各種原因改變,比如關鍵基礎設施出了問題故障,或者地區之間進行失敗恢復的練習等,因此Netflix采用無態應用
服務器服務于來自任何地區的會員。
這些數據如果從持久層存儲獲得將會非常昂貴(造成頻繁的
數據庫訪問),Netflix需要將這種數據寫入到本地緩存,而且必須復制到所有地區的緩存中,以便服務于各個地區的用戶請求。
微服務是依賴于緩存的,必須快速可靠地訪問多種類型的數據,比如會員的觀影歷史、排行榜和個性化推薦等,這些數據的更新與改變都必須復制到全世界各個地區,以便這些地區的用戶能夠快速可靠地訪問。
這張圖說明復制操作是在SET操作以后實現,應用程序調用EVCache客戶端庫的set方法,之后復制路徑對于調用者是透明的:
EVCache客戶端庫發送SET到緩存系統的本地地區的一個實例服務器中
EVCache客戶端庫同時也將寫入元數據(包括key,但不包括要緩存的數據本身)到復制消息隊列(Kafka)
本地區的復制中繼服務將會從這個消息隊列中讀取消息
中繼服務會從本地緩存中抓取符合key的數據
中繼服務會發送一個SET請求到另一個地域的復制中繼服務
在另一個區域中,復制中繼服務會接受請求,然后執行SET操作到它的本地緩存,完成復制
在接受地區的本地應用當通過GET操作以后會在本地緩存上看到這個已經更新的數據值
這是一個簡單描述,需要注意的是,它只會對SET操作有效,對于其它DELETE TOUCH或批mutation等操作不會復制,DELETE和TOUCH是非常類似的,只有一點不同:它們不從本地緩存中讀取已經存在的值。
跨區域復制主要是通過消息隊列進行,一個地區的EVCache客戶端不會注意到其它地區的復制情況,讀寫都是只使用本區域緩存,不會和其它地區緩存耦合,通過消息系統來解耦合。