可用性在公有云的范疇意味著公司必須確保自己的服務(wù)宕機(jī)時(shí)間最少。對(duì)于很多web規(guī)模的企業(yè)來(lái)說(shuō)連接的丟失意味著客戶的丟失。要確保可用性,重要的是在故 障變成徹底斷電以前就要發(fā)現(xiàn)并想法減輕。使用AWS,開(kāi)發(fā)人員可以采取三管齊下的方法來(lái)提高持續(xù)性,通過(guò)使用如Amazon Route 53,彈性負(fù)載均衡和自動(dòng)擴(kuò)展組這樣的工具。
直接請(qǐng)求過(guò)程,例如視頻回放的請(qǐng)求,不是由事件驅(qū)動(dòng)的。基于這個(gè)原因,并行化在這里不像在其他后端進(jìn)程那樣適用。對(duì)于那些需要立刻作出反應(yīng)的直接請(qǐng)求,開(kāi) 發(fā)人員必須提供高可用性的支持。如果用戶在嘗試播放視頻時(shí)得到一個(gè)“500錯(cuò)誤,服務(wù)器不可用”的回應(yīng),該業(yè)務(wù)將有可能失去用戶。
企業(yè)可以很輕松地發(fā)布一整夜維護(hù)的聲明并期待客戶能夠接受這段時(shí)間內(nèi)將不能訪問(wèn)服務(wù)的日子已經(jīng)過(guò)去了。如果一個(gè)業(yè)務(wù)想要提供99.999%的正常運(yùn)行時(shí)間,那么一個(gè)月的停機(jī)時(shí)間大約只能有40分鐘。
為了實(shí)現(xiàn)這種AWS可用性,開(kāi)發(fā)人員必須能預(yù)見(jiàn)到錯(cuò)誤-而不只是避免錯(cuò)誤。開(kāi)發(fā)人員必須有一個(gè)適當(dāng)?shù)牧鞒蹋梢詮娜魏涡问降钠茐男誀顩r下恢復(fù),他們必須能夠處理所有類(lèi)型的網(wǎng)絡(luò)和區(qū)域問(wèn)題。他們還需要有位于靠近國(guó)際客戶區(qū)域地點(diǎn)的服務(wù)器并能將客戶路由到正確的地理位置。
開(kāi)發(fā)人員應(yīng)該關(guān)注三個(gè)層面來(lái)實(shí)現(xiàn)全球AWS可用性。在最頂層是Amazon Route 53。在地區(qū)層面,開(kāi)發(fā)者可以使用彈性負(fù)載均衡(ELB),然后在域?qū)用妫麄冃枰黾幼詣?dòng)擴(kuò)展組。
圖1:典型的AWS高可靠性架構(gòu)
該架構(gòu)保護(hù)資源避免幾個(gè)潛在的問(wèn)題,包括地理問(wèn)題,通過(guò)直接引導(dǎo)用戶到離其最近的網(wǎng)絡(luò)位置,用ELB解決單獨(dú)域的問(wèn)題,使用自動(dòng)擴(kuò)展組解決單獨(dú)服務(wù)器的問(wèn)題。開(kāi)發(fā)人員可以配置自動(dòng)擴(kuò)展組來(lái)自動(dòng)殺掉未響應(yīng)ELB健康檢查的任何實(shí)例。
經(jīng)受住區(qū)域性亞馬遜Web服務(wù)問(wèn)題的考驗(yàn)
然而所有這些都假定AWS不會(huì)有一整個(gè)區(qū)域的斷電。但并非總是如此,事實(shí)上,有很多記錄在案的事件表明,亞馬遜曾經(jīng)有過(guò)某個(gè)具體服務(wù)的一整個(gè)區(qū)域斷電,包 括DynamoDB和彈性計(jì)算云。如果亞馬遜在一個(gè)地區(qū)出現(xiàn)問(wèn)題,一個(gè)業(yè)務(wù)可能會(huì)失去那片地區(qū)的所有客戶并需要手動(dòng)將流量重定向到另一個(gè)區(qū)域,除非你添加 了Route 53健康檢查。
支持地理路由和健康檢查很簡(jiǎn)單,只要設(shè)置一個(gè)在故障發(fā)生時(shí)可以切換到其他端點(diǎn)的區(qū)域端點(diǎn)。例如,如果一個(gè)網(wǎng)站是example.com,它可以設(shè)置us- east.example.com,us-west.example.com和eu-west.example.com這三個(gè)端點(diǎn)。然后配置 Example.com使用在地理位置上最近的端點(diǎn)。但其中每個(gè)端點(diǎn)將被配置為使用這三個(gè)ELB之一,優(yōu)先使用最近的并同時(shí)通過(guò)健康檢查來(lái)轉(zhuǎn)到其它端點(diǎn) 上。
圖2:在這張Route 53配置圖中,黑色代表最理想的選擇,藍(lán)色代表次要選擇,紅色是第三選擇。
圖2顯示了一個(gè)Route 53區(qū),根據(jù)地理位置配置了三個(gè)獨(dú)立的端點(diǎn)。如果我們被導(dǎo)向美東端點(diǎn),則首選是美東負(fù)載平衡器。倘若負(fù)載平衡器不可用,它會(huì)嘗試使用美西的負(fù)載平衡器。如 果美西的ELB也宕了,則會(huì)轉(zhuǎn)到歐西地區(qū)。如果這三個(gè)地區(qū)都宕掉了,那么你的麻煩就很大了。在Route 53的層面適當(dāng)配置健康檢查將有助于減少整個(gè)區(qū)域出故障時(shí)的宕機(jī)時(shí)間。
這就是所謂的增加持續(xù)性-預(yù)期到個(gè)別的區(qū)域會(huì)斷電,并有一個(gè)用于恢復(fù)服務(wù)的計(jì)劃。但驗(yàn)證和支持每個(gè)區(qū)域的個(gè)體可用性很重要。例如,如果整個(gè)區(qū)域發(fā)生故障,其他區(qū)域仍然應(yīng)該能夠不受任何影響的工作。這可以通過(guò)使用數(shù)據(jù)庫(kù)復(fù)制達(dá)到。
幸運(yùn)的是,亞馬遜已經(jīng)在DynamoDB上支持跨地區(qū)復(fù)制。很多其他的數(shù)據(jù)庫(kù)也支持主主復(fù)制方案,這樣可以在出現(xiàn)問(wèn)題時(shí)轉(zhuǎn)到另一個(gè)域來(lái)支持區(qū)域隔離和持續(xù)性。
當(dāng)開(kāi)發(fā)者需要支持應(yīng)用的高可用性訪問(wèn)時(shí),多層次的持續(xù)性是必須的。幸運(yùn)的是,AWS提供了三種很好的服務(wù)可以結(jié)合起來(lái)使用,以解決地區(qū),區(qū)域和實(shí)例層面的 問(wèn)題。通過(guò)添加像NewRelic這樣的第三方服務(wù)來(lái)監(jiān)控應(yīng)用程序可以為你的業(yè)務(wù)提供各種警報(bào)并可以自動(dòng)修復(fù)服務(wù)以減少停機(jī)時(shí)間。