AWS的每個(gè)區(qū)域一般由多個(gè)可用區(qū)(AZ)組成,而可用區(qū)一般是由多個(gè)數(shù)據(jù)中心組成。AWS引入可用區(qū)設(shè)計(jì)主要是為了提升用戶應(yīng)用程序的高可用性。因?yàn)榭捎脜^(qū)與可用區(qū)之間在設(shè)計(jì)上是相互獨(dú)立的,也就是說它們會(huì)有獨(dú)立的供電、獨(dú)立的網(wǎng)絡(luò)等,這樣假如一個(gè)可用區(qū)出現(xiàn)問題時(shí)也不會(huì)影響另外的可用區(qū)。在一個(gè)區(qū)域內(nèi),可用區(qū)與可用區(qū)之間是通過高速網(wǎng)絡(luò)連接,從而保證很低的延時(shí)。
3EVCache 的高可用性
AWS的每個(gè)區(qū)域一般由多個(gè)可用區(qū)(AZ)組成,而可用區(qū)一般是由多個(gè)
數(shù)據(jù)中心組成。AWS引入可用區(qū)設(shè)計(jì)主要是為了提升用戶應(yīng)用程序的高可用性。因?yàn)榭捎脜^(qū)與可用區(qū)之間在設(shè)計(jì)上是相互獨(dú)立的,也就是說它們會(huì)有獨(dú)立的供電、獨(dú)立的網(wǎng)絡(luò)等,這樣假如一個(gè)可用區(qū)出現(xiàn)問題時(shí)也不會(huì)影響另外的可用區(qū)。在一個(gè)區(qū)域內(nèi),可用區(qū)與可用區(qū)之間是通過高速網(wǎng)絡(luò)連接,從而保證很低的延時(shí)。
EVCache實(shí)例通過將Amazon EC2放到多個(gè)可用區(qū), 能夠預(yù)防應(yīng)用的單點(diǎn)故障。無論在相同的物理區(qū)域內(nèi)還是在不同的物理區(qū)域之間,在多個(gè)AZ上運(yùn)行獨(dú)立的應(yīng)用都是非常重要的。如果一個(gè)可用區(qū)失效了,在其它可用區(qū)上的應(yīng)用可以繼續(xù)運(yùn)行,從而實(shí)現(xiàn)高可用性。
由于跨越了多個(gè)亞馬遜
云服務(wù)可用區(qū),EVCache集群是不會(huì)掛掉的。當(dāng)其中的實(shí)例偶然掛掉時(shí),通過一致性哈??缂悍制瑏硎咕彺娴挠绊懡档阶畹?。
在保持高可用性的同時(shí),操作EVCache集群的總體成本很低,因?yàn)榫彺鏇]有命中時(shí)訪問亞馬遜云服務(wù)服務(wù)的成本較高,如訪問SimpleDB、AWS S3、EC2上的Cassandra等等。EVCache 集群的總體成本在高穩(wěn)定,線性擴(kuò)展的條件下還是令人滿意的。
隱藏在需求后面的是數(shù)據(jù)或狀態(tài)所需要的每個(gè)請(qǐng)求服務(wù),必須是跨地區(qū)可用的。高可靠性
數(shù)據(jù)庫和高性能緩存是支持分布式架構(gòu)的基礎(chǔ)設(shè)施,一個(gè)典型場(chǎng)景是將緩存架構(gòu)于數(shù)據(jù)庫前面或其它持久存儲(chǔ)前面。如果沒有緩存的全局復(fù)制,一個(gè)地區(qū)的的會(huì)員切換到另外一個(gè)地區(qū)時(shí),會(huì)在新的地區(qū)緩存中沒有原地區(qū)的數(shù)據(jù),這種情況稱為冷緩存。處理這種緩存數(shù)據(jù)丟失的辦法只有重新從數(shù)據(jù)庫加載,但是這種方式會(huì)延長響應(yīng)時(shí)間并對(duì)數(shù)據(jù)庫形成巨大沖擊,EVCache 除了跨可用區(qū)復(fù)制之外,還提供了跨區(qū)域復(fù)制,對(duì)基于AWS的高可用性進(jìn)行了增強(qiáng)。
4EVCache的典型應(yīng)用場(chǎng)景
Netflix的用戶體驗(yàn)重度依賴于大容量、低時(shí)延、全球可用的緩存數(shù)據(jù)層。例如,用戶坐在沙發(fā)上看電影或者電視節(jié)目,在用戶的每一次交互中都有緩存的身影,從會(huì)話存儲(chǔ)到視頻歷史,到用戶狀態(tài),都得益于EVCache的穩(wěn)定和高容錯(cuò)性。
這里介紹一個(gè)典型的用例——向用戶推薦與已看歷史中節(jié)目類似的電影或者電視節(jié)目。
內(nèi)容相似性推薦服務(wù)給出了與已看歷史中節(jié)目類似的電影或者電視節(jié)目的相似性列表。一旦計(jì)算出了相似性,就存儲(chǔ)在SimpleDB/S3 中,前端使用EVCache。當(dāng)任何應(yīng)用或者算法需要這些數(shù)據(jù)的時(shí)候,可以從 EVCache提取數(shù)據(jù),并返回結(jié)果。具體過程如下:
一個(gè)客戶向Web應(yīng)用發(fā)了一個(gè)頁面請(qǐng)求,處理這一請(qǐng)求需要得到一個(gè)電影或電視節(jié)目的相似性列表
Web應(yīng)用查詢 EVCache 來得到這些數(shù)據(jù),這樣場(chǎng)景的典型緩存命中率高于99.9%
如果緩存沒有命中, Web應(yīng)用將調(diào)用相似性計(jì)算服務(wù)來計(jì)算這些數(shù)據(jù)
如果已經(jīng)計(jì)算過的數(shù)據(jù)也沒有命中的話, 相似性計(jì)算服務(wù)將從 SimpleDB中讀取數(shù)據(jù)。如果在SimpleDB 沒有,相似性計(jì)算服務(wù)根據(jù)給出的電影或電視節(jié)目重新計(jì)算相似性
相似性計(jì)算服務(wù)在計(jì)算出電影或電視節(jié)目的數(shù)據(jù)后,將數(shù)據(jù)寫入到 EVCache中
最后,相似性計(jì)算服務(wù)生成客戶端所需要的響應(yīng)并返回給客戶端
EVCache 是線性擴(kuò)展的,通過容量監(jiān)控,可以在一分鐘內(nèi)擴(kuò)容,在幾分鐘內(nèi)完成重新均衡和數(shù)據(jù)預(yù)熱。