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