阿里趙林:阿里企業(yè)級分布式應(yīng)用服務(wù)EDAS產(chǎn)品解密
本文根據(jù)阿里高級技術(shù)專家趙林(花名:丹臣)的演講整理。趙林在演講中主要為大家詳細(xì)介紹了阿里企業(yè)級分布式應(yīng)用服務(wù)器EDAS產(chǎn)品和背后技術(shù)實踐。
企業(yè)級分布式應(yīng)用服務(wù)(EDAS,Enterprise Distributed Application Service)是一個以阿里中間件團(tuán)隊多款久經(jīng)歷練的組件產(chǎn)品作為核心基礎(chǔ),所組建的企業(yè)云計算解決方案。其充分利用阿里云現(xiàn)有的資源管理和服務(wù)體系,引入中間件整套成熟的分布式計算框架——包括分布式應(yīng)用核心框架,分布式數(shù)據(jù)化運(yùn)營,大型應(yīng)用全生命周期管理等,以應(yīng)用為中心,集成到EDAS平臺上,幫助企業(yè)級客戶輕松構(gòu)建并托管分布式應(yīng)用服務(wù)體系。
企業(yè)級分布式應(yīng)用服務(wù)與傳統(tǒng)IOE架構(gòu)的區(qū)別
傳統(tǒng)IOE架構(gòu)
傳統(tǒng)IOE架構(gòu)
隨著時間推移,在出現(xiàn)新業(yè)務(wù)時,開發(fā)人員有兩種應(yīng)對辦法。
- 在原應(yīng)用上增加新業(yè)務(wù),將原本較小的應(yīng)用慢慢擴(kuò)充成很大的應(yīng)用;
- 另起爐灶,重新創(chuàng)建針對新業(yè)務(wù)的新應(yīng)用。
第一種只適用于業(yè)務(wù)較少的情況,而在新業(yè)務(wù)不斷增加的情況下,增加新應(yīng)用也就成了必須。而在這種傳統(tǒng)架構(gòu)中,新增的應(yīng)用需要一一與原有的底層數(shù)據(jù)庫相連,導(dǎo)致每個應(yīng)用都需要連接多個數(shù)據(jù)庫。
此外,在傳統(tǒng)IOE架構(gòu)中:
- 每個應(yīng)用彼此沒有太大關(guān)系,按煙囪式排列,唯一的共通點(diǎn)在于都與底層的數(shù)據(jù)庫相連;
- 所能處理的應(yīng)用個數(shù)通常比較少,從幾個到幾十個不等。
總結(jié):在傳統(tǒng)IOE架構(gòu)中,每個應(yīng)用都比較龐大,同時需要連接多個數(shù)據(jù)庫;架構(gòu)中的應(yīng)用數(shù)量較少,應(yīng)用與應(yīng)用之間的關(guān)系簡單。
大型分布式應(yīng)用
大型分布式應(yīng)用
- 應(yīng)用彼此間存在復(fù)雜的調(diào)用關(guān)系;
- 架構(gòu)中可管理的應(yīng)用多,可能達(dá)到成百上千個應(yīng)用。
其優(yōu)點(diǎn)在于:這種架構(gòu)具有良好的可擴(kuò)展性;而缺點(diǎn)在于管理與運(yùn)維比較困難,另外由于應(yīng)用數(shù)量多,隨著業(yè)務(wù)增長,應(yīng)用服務(wù)器從十臺增加到上百臺上千臺,這時業(yè)務(wù)系統(tǒng)故障與機(jī)器故障就一定會成為常態(tài)。
傳統(tǒng)“中心化”系統(tǒng)與阿里的“去中心化”系統(tǒng)架構(gòu)的區(qū)別
傳統(tǒng)“中心化”(ESB)系統(tǒng)架構(gòu)
傳統(tǒng)中心化系統(tǒng)架構(gòu)
- 服務(wù)調(diào)用者與服務(wù)提供者通過企業(yè)服務(wù)總線相連接;
- ESB成為瓶頸:無論在性能上還是成本消耗上,ESB都會導(dǎo)致瓶頸出現(xiàn)。
阿里“去中心化”系統(tǒng)架構(gòu)
阿里“去中心化”系統(tǒng)架構(gòu)
開發(fā)這個架構(gòu)的初衷是為了支撐分布式應(yīng)用,為了讓整個業(yè)務(wù)系統(tǒng)的擴(kuò)展沒有瓶頸,只需按照業(yè)務(wù)發(fā)展需要進(jìn)行擴(kuò)展;上圖是最早的雛形。后面為了完善該架構(gòu),又做了很多工作,下面將詳細(xì)說明。
EDAS服務(wù)調(diào)用
服務(wù)接口可視化:讓分布式應(yīng)用不再是黑盒
在最初的架構(gòu)中,由于看不到任何的數(shù)據(jù)或者發(fā)布了什么服務(wù),開發(fā)人員也并不明確每個應(yīng)用具體包含什么服務(wù),這就像一個黑盒子,所有內(nèi)容都是一團(tuán)迷霧。
EDAS在線平臺
將服務(wù)接口可視化之后,在應(yīng)用啟動時將自動完成服務(wù)注冊,所發(fā)布和消費(fèi)的服務(wù)可以在EDAS平臺在線查看,所有內(nèi)容一目了然。
EDAS服務(wù)調(diào)用的安全性
EDAS服務(wù)調(diào)用結(jié)構(gòu)
普通框架是沒有安全性可言的,任何人只要知道地址就可以通過服務(wù)接口隨意進(jìn)行調(diào)用。為此我們針對三種維度的安全性做出了控制:在發(fā)布、訂閱和調(diào)用服務(wù)時必須使用合法的安全令牌(access key/secret key)。
- 服務(wù)提供者在服務(wù)注冊中心發(fā)布,需要權(quán)限AK;
- 服務(wù)調(diào)用者獲得服務(wù)提供者的IP,需要授權(quán);
- 服務(wù)調(diào)用者知道IP,需要調(diào)用時,需要正確的AK。
此外,授權(quán)數(shù)據(jù)會下發(fā)到服務(wù)機(jī)器中,避免造成性能瓶頸。
EDAS應(yīng)用發(fā)布
傳統(tǒng)集中式模式:
傳統(tǒng)的應(yīng)用包下載模式
l 應(yīng)用包通過中間文件服務(wù)器下載,需受限于其網(wǎng)絡(luò)帶寬;
l 能夠發(fā)布的機(jī)器數(shù)量較少
P2P流式應(yīng)用包分發(fā)模式:
P2P應(yīng)用包分發(fā)模式
- 通過EDAS發(fā)布控制中心下載;
- 類似P2P下載模式,可快速提供任何一個下載點(diǎn);
- 支持大規(guī)模應(yīng)用集群發(fā)布。
效率對比
隨著所發(fā)布的應(yīng)用實例增多,兩種發(fā)布方式的效率對比如下:
兩種發(fā)布方式的效率對比
傳統(tǒng)集中式(黃色):隨著發(fā)布集群規(guī)模擴(kuò)大,耗時急劇增長;P2P流式:采用EDAS燎原發(fā)布系統(tǒng),隨著應(yīng)用實例的增加,發(fā)布的時間幾乎保持不變。
EDAS擴(kuò)容
EDAS提供簡單方便高效的應(yīng)用擴(kuò)容服務(wù)。在傳統(tǒng)模式中,擴(kuò)容需運(yùn)維或開發(fā)人員手動布置環(huán)境、安裝GDP等等;而在P2P流式中,一鍵即可擴(kuò)容,只要機(jī)器資源足夠,在EDAS平臺點(diǎn)擊“應(yīng)用擴(kuò)容”即可完成。
一鍵擴(kuò)容界面
EDAS數(shù)據(jù)化運(yùn)營
立體監(jiān)控服務(wù)
立體監(jiān)控服務(wù)
EDAS監(jiān)控服務(wù)三個層面的監(jiān)控數(shù)據(jù):資源、容器和應(yīng)用。
- 系統(tǒng)資源:負(fù)載、CPU、內(nèi)存、 磁盤、網(wǎng)絡(luò)
- 容器:堆內(nèi)存、類加載情況、線程池、連接器
- 應(yīng)用:響應(yīng)時間、吞吐率、關(guān)鍵鏈路分析
其中:
系統(tǒng)資源監(jiān)控
系統(tǒng)資源監(jiān)控界面
以應(yīng)用/單機(jī)的視角來對基礎(chǔ)資源消耗進(jìn)行監(jiān)控:
- 可以看到應(yīng)用下所有節(jié)點(diǎn)的平均負(fù)載
- 通過技術(shù)監(jiān)控,及時發(fā)現(xiàn)問題
- 可以配置報警規(guī)則,有異常時快速報警
容器監(jiān)控
容器監(jiān)控界面
實時采集容器運(yùn)行的監(jiān)控指標(biāo),為應(yīng)用運(yùn)行環(huán)境問題診斷提供依據(jù):
- 堆內(nèi)存與非堆內(nèi)存使用情況
- 類加載情況
- 線程運(yùn)行情況
- 連接器情況
應(yīng)用實時監(jiān)控
應(yīng)用監(jiān)控界面
監(jiān)控服務(wù)接口的調(diào)用量,分布式系統(tǒng)服務(wù)的承載能力等,并將其數(shù)據(jù)化:
- 監(jiān)控所有服務(wù)接口、方法的實時調(diào)用情況,調(diào)用鏈的實時查詢
- 快速感知系統(tǒng)流量變化,找出系統(tǒng)瓶頸
- 執(zhí)行實時鏈路分析
服務(wù)綜合治理
分布式應(yīng)用的難點(diǎn)在于集成分布式應(yīng)用一體化監(jiān)控、數(shù)據(jù)化運(yùn)營以及高效的服務(wù)治理。其中,服務(wù)有兩種角色,服務(wù)提供者以及鏈路負(fù)責(zé)人。
服務(wù)提供者關(guān)心:
誰調(diào)用了我的服務(wù)? 在什么鏈路下調(diào)用,調(diào)用是否合理?調(diào)用趨勢怎樣?產(chǎn)生的瞬間峰值有多少?我的系統(tǒng)是否能支撐,是否需要擴(kuò)容。
所能采取的應(yīng)對措施:分組、限流、鑒權(quán)、壓測。
鏈路負(fù)責(zé)人關(guān)心:
我依賴了哪些應(yīng)用、哪些服務(wù)? 整個鏈路的依賴路徑是怎樣的?哪些容易出錯,哪些是鏈路的處理瓶頸? 這些依賴如果出錯,會有什么影響?
所能采取的應(yīng)對措施:捕獲異常;降級:對于不穩(wěn)定的服務(wù),是否需要降級;開關(guān):系統(tǒng)壓力很大的話,需要關(guān)閉不必要的操作;優(yōu)化:利用服務(wù)治理,對瓶頸進(jìn)行優(yōu)化。
鷹眼監(jiān)控
鷹眼監(jiān)控界面
阿里鷹眼監(jiān)控平臺能夠提供應(yīng)用的響應(yīng)時間和吞吐量信息,并提供全鏈路分析功能,從而找出系統(tǒng)熱點(diǎn)和瓶頸:
- 完整記錄所有故障
- 準(zhǔn)確定位故障源
所解決的問題:在開發(fā)者參差不齊的情況下,快速完成上層業(yè)務(wù)目標(biāo),完成開發(fā)任務(wù);提供透明化的觀察方式:快速找出對依賴的壓力、易故障點(diǎn)與瓶頸點(diǎn)。
快速找出對依賴的壓力、易故障點(diǎn)與瓶頸點(diǎn)
容量壓測
容量壓測界面
自動計算前端的關(guān)鍵請求與后端機(jī)器數(shù)量的對應(yīng)關(guān)系,針對機(jī)器是否需要加減進(jìn)行預(yù)測:
- 在真實線上的環(huán)境基礎(chǔ)上,通過調(diào)整服務(wù)器權(quán)重,真實模擬壓測情況,評估單機(jī)的最大服務(wù)能力,從而提供吞吐能力數(shù)據(jù)以供性能優(yōu)化參考;
- 用自動化平臺,相對科學(xué)的精確手段將服務(wù)能力數(shù)據(jù)化;
限流降級
容量是任何一個系統(tǒng)天然存在的上限??陀^上講,不管性能如何,都有可能在業(yè)務(wù)上超出預(yù)期容量。
限流是服務(wù)接口提供方對消費(fèi)方的設(shè)置,降級則是服務(wù)消費(fèi)方對服務(wù)提供方的設(shè)置。通過降級設(shè)置,對服務(wù)消費(fèi)方進(jìn)行保護(hù),一旦超過某個時間,便允許強(qiáng)行斷開。通過現(xiàn)有的能量對服務(wù)提供方進(jìn)行保護(hù),在出現(xiàn)超過流量最大能力的時候斷開,避免將系統(tǒng)整個拖垮。
彈性伸縮
擴(kuò)容界面
應(yīng)用擴(kuò)容規(guī)則和縮容規(guī)則一站式設(shè)置:根據(jù)CPU、LOAD、RT三個指標(biāo)設(shè)置應(yīng)用的自動擴(kuò)容或縮容。
EDAS配置推送
大型分布式系統(tǒng)應(yīng)用配置推送
- 對大型分布式應(yīng)用配置進(jìn)行集中管理:修改更容易,通知更及時,配置變更也更安全;
- 對應(yīng)用配置變更進(jìn)行歷史記錄:讓應(yīng)用配置可以輕松回退到前一版本;
- 追蹤應(yīng)用配置推送軌跡:讓配置推送所到達(dá)機(jī)器變得可視化;
- 應(yīng)用集群推送的規(guī)模更大、效率更高。
EDAS灰度系統(tǒng)
EDAS灰度系統(tǒng)
能夠允許一部分用戶使用新功能,一部分用戶使用原有功能,再通過實際測試作出最正確的決定。在業(yè)務(wù)系統(tǒng)層面,讓現(xiàn)有的系統(tǒng)可以平滑升級。http://click.aliyun.com/m/24591/
EDAS——世界級優(yōu)秀PAAS平臺
應(yīng)用客戶案例
- 適用于各行各業(yè);
- 高性能、高彈性、高容錯;
- 打造以應(yīng)用為中心的平臺服務(wù),讓開發(fā)人員專注于業(yè)務(wù)邏輯;
- 構(gòu)建360度的應(yīng)用運(yùn)維服務(wù)平臺,集成各種運(yùn)維管控工具。