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