前言
近年蚀瘸,Spring Cloud 儼然已經(jīng)成為微服務(wù)開發(fā)的主流技術(shù)棧,在國內(nèi)開發(fā)者社區(qū)非呈鳎火爆贮勃。
我近年一直在一線互聯(lián)網(wǎng)公司(攜程,拍拍貸等)開展微服務(wù)架構(gòu)實(shí)踐苏章,根據(jù)我個(gè)人的一線實(shí)踐經(jīng)驗(yàn)和我平時(shí)對(duì) Spring Cloud 的調(diào)研寂嘉,我認(rèn)為 Spring Cloud 技術(shù)棧中的有些組件離生產(chǎn)級(jí)開發(fā)尚有一定距離。
比方說 Spring Cloud Config 和 Spring Cloud Sleuth 都是 Pivotal 自研產(chǎn)品枫绅,尚未得到大規(guī)模企業(yè)級(jí)生產(chǎn)應(yīng)用泉孩,很多企業(yè)級(jí)特性缺失(具體見我后文描述)。另外 Spring Cloud 體系還缺失一些關(guān)鍵的微服務(wù)基礎(chǔ)組件并淋,比如 Metrics 監(jiān)控寓搬,健康檢查和告警等。
所以我在參考 Spring Cloud 微服務(wù)技術(shù)棧的基礎(chǔ)上县耽,結(jié)合自身的實(shí)戰(zhàn)落地經(jīng)驗(yàn)句喷,也結(jié)合國內(nèi)外一線互聯(lián)網(wǎng)公司(例如 Netflix镣典,點(diǎn)評(píng),攜程脏嚷,Zalando 等)的開源實(shí)踐骆撇,綜合提出更貼近國內(nèi)技術(shù)文化特色的輕量級(jí)的微服務(wù)參考技術(shù)棧。希望這個(gè)參考技術(shù)棧對(duì)一線的架構(gòu)師(或者是初創(chuàng)公司)有一個(gè)好的指導(dǎo)父叙,能夠少走彎路神郊,快速落地微服務(wù)架構(gòu)。
這個(gè)參考技術(shù)棧和總體架構(gòu)如下圖所示:
主要包含 11 大核心組件趾唱,分別是:
核心支撐組件
- 服務(wù)網(wǎng)關(guān) Zuul
- 服務(wù)注冊(cè)發(fā)現(xiàn) Eureka+Ribbon
- 服務(wù)配置中心 Apollo
- 認(rèn)證授權(quán)中心 Spring Security OAuth2
- 服務(wù)框架 Spring MVC/Boot
監(jiān)控反饋組件
- 數(shù)據(jù)總線 Kafka
- 日志監(jiān)控 ELK
- 調(diào)用鏈監(jiān)控 CAT
- Metrics 監(jiān)控 KairosDB
- 健康檢查和告警 ZMon
- 限流熔斷和流聚合 Hystrix/Turbine
后續(xù)章節(jié)我會(huì)依次簡單介紹這 11 個(gè)組件涌乳,在《微服務(wù)架構(gòu)實(shí)戰(zhàn) 160 講》課程中,我會(huì)對(duì)其中的 8 款核心組件的架構(gòu)設(shè)計(jì)和生產(chǎn)實(shí)踐進(jìn)行深度剖析甜癞,夕晓,感興趣的同學(xué)可以掃描下方二維碼了解詳情。
[圖片上傳失敗...(image-32bb2c-1562735471470)]
核心支撐組件
服務(wù)網(wǎng)關(guān) Zuul
2013 年左右悠咱,infoq 曾經(jīng)對(duì)前 Netflix 架構(gòu)總監(jiān) Adrian Cockcroft 有過一次專訪 [附錄 1]蒸辆,其中有問 Adrian:“Netflix 開源這么多項(xiàng)目,你認(rèn)為哪一個(gè)是最不可或缺的 (MOST Indispensable)”析既,Adrian 回答說:“在 NetflixOSS 開源項(xiàng)目中躬贡,有一個(gè)容易被忽略,但是 Netflix 最強(qiáng)大的基礎(chǔ)服務(wù)之一眼坏,它就是 Zuul 網(wǎng)關(guān)服務(wù)拂玻。Zuul 網(wǎng)關(guān)主要用于智能路由,同時(shí)也支持認(rèn)證宰译,區(qū)域和內(nèi)容感知路由檐蚜,將多個(gè)底層服務(wù)聚合成統(tǒng)一的對(duì)外 API。Zuul 網(wǎng)關(guān)的一大亮點(diǎn)是動(dòng)態(tài)可編程沿侈,配置可以秒級(jí)生效”闯第。從 Adrian 的回答中,我們可以感受到 Zuul 網(wǎng)關(guān)對(duì)微服務(wù)基礎(chǔ)架構(gòu)的重要性肋坚。
Zuul 在英文中是一種怪獸乡括,星際爭霸中蟲族里頭也有 Zuul,Netflix 為網(wǎng)關(guān)起名 Zuul智厌,寓意看門神獸
Zuul 網(wǎng)關(guān)在 Netflix 經(jīng)過生產(chǎn)級(jí)驗(yàn)證,在納入 Spring Cloud 體系之后盲赊,在社區(qū)中也有眾多成功的應(yīng)用铣鹏。Zuul 網(wǎng)關(guān)在攜程(日流量超 50 億),拍拍貸等公司也有成功的落地實(shí)踐哀蘑,是微服務(wù)基礎(chǔ)架構(gòu)中網(wǎng)關(guān)一塊的首選诚卸。其它開源產(chǎn)品像 Kong 或者 Nginx 等也可以改造支持網(wǎng)關(guān)功能葵第,但是較復(fù)雜門檻高一點(diǎn)。
Zuul 網(wǎng)關(guān)雖然不完全支持異步合溺,但是同步模型反而使它簡單輕量卒密,易于編程和擴(kuò)展,當(dāng)然同步模型需要做好限流熔斷(和限流熔斷組件 Hystrix 配合)棠赛,否則可能造成資源耗盡甚至雪崩效應(yīng)(cascading failure)哮奇。
服務(wù)注冊(cè)發(fā)現(xiàn) Eureka + Ribbon
針對(duì)微服務(wù)注冊(cè)發(fā)現(xiàn)場(chǎng)景,社區(qū)里頭的開源產(chǎn)品當(dāng)中睛约,經(jīng)過生產(chǎn)級(jí)大流量驗(yàn)證的鼎俘,目前只有 Netflix Eureka 一個(gè),它也已經(jīng)納入 Spring Cloud 體系辩涝,在社區(qū)中有眾多成功應(yīng)用贸伐,例如攜程 Apollo 配置中心也是使用 Eureka 做軟負(fù)載。其它產(chǎn)品如 Zookeeper/Etcd/Consul 等怔揩,都是比較通用的產(chǎn)品捉邢,還需要進(jìn)一步封裝定制才可生產(chǎn)級(jí)使用。Eureka 支持跨數(shù)據(jù)中心高可用商膊,但它是 AP 最終一致系統(tǒng)伏伐,不是強(qiáng)一致性系統(tǒng)翘狱。
Eureka 是阿基米德洗澡時(shí)發(fā)現(xiàn)浮力原理時(shí)發(fā)出的驚嘆聲秘案,在微服務(wù)中寓意發(fā)現(xiàn)
Ribbon 是可以和 Eureka 配套對(duì)接的客戶端軟負(fù)載庫潦匈,在 Eureka 的配合下能夠支持多種靈活的動(dòng)態(tài)路由和負(fù)載均衡策略赤惊。內(nèi)部微服務(wù)直連可以直接走 Ribbon 客戶端軟負(fù)載,網(wǎng)關(guān)上也可以部署 Ribbon掂为,這時(shí)網(wǎng)關(guān)相當(dāng)于一個(gè)具有路由和軟負(fù)載能力的超級(jí)客戶端勇哗。
Ribbon 是蝴蝶結(jié)的意思
服務(wù)配置中心 Apollo
Spring Cloud 體系里頭有個(gè) Spring Cloud Config 產(chǎn)品昼扛,但是功能遠(yuǎn)遠(yuǎn)達(dá)不到生產(chǎn)級(jí),只能小規(guī)模場(chǎng)景下用欲诺,中大規(guī)模企業(yè)級(jí)場(chǎng)景不建議采用抄谐。攜程框架研發(fā)部開源的 Apollo 是一款在攜程和其它眾多互聯(lián)網(wǎng)公司生產(chǎn)落地下來的產(chǎn)品渺鹦,開源兩年多,目前在 github 上有超過 4k 星蛹含,非常成功毅厚,文檔齊全也是它的一大亮點(diǎn),推薦作為企業(yè)級(jí)的配置中心產(chǎn)品浦箱。Apollo 支持完善的管理界面吸耿,支持多環(huán)境,配置變更實(shí)時(shí)生效憎茂,權(quán)限和配置審計(jì)等多種生產(chǎn)級(jí)功能珍语。Apollo 既可以用于連接字符串等常規(guī)配置場(chǎng)景,也可用于發(fā)布開關(guān)(Feature Flag)和業(yè)務(wù)配置等高級(jí)場(chǎng)景竖幔。在《微服務(wù)架構(gòu)實(shí)戰(zhàn) 160 講》課程中板乙,第二個(gè)模塊就配置中心相關(guān)主題,會(huì)深度剖析攜程 Apollo 的架構(gòu)和實(shí)踐拳氢,預(yù)計(jì) 6 月份推出募逞,歡迎大家關(guān)注學(xué)習(xí)。
阿波羅是希臘神話中太陽神的意思
認(rèn)證授權(quán)中心 Spring Security OAuth2
目前開源社區(qū)還沒有特別成熟的微服務(wù)安全認(rèn)證中心產(chǎn)品馋评,之前我工作過的一些中大型互聯(lián)網(wǎng)公司放接,比如攜程,唯品會(huì)等留特,在這一塊基本都是定制自研的纠脾,但是對(duì)一般企業(yè)來說,定制自研還是有門檻的蜕青。OAuth2 是一種基于令牌 Token 的授權(quán)框架苟蹈,已經(jīng)得到眾多大廠(Google, Facebook, Twitter, Microsoft 等)的支持,可以認(rèn)為是事實(shí)上的微服務(wù)安全協(xié)議標(biāo)準(zhǔn)右核,適用于開放平臺(tái)聯(lián)合登錄慧脱,現(xiàn)代微服務(wù)安全(包括單頁瀏覽器 App/ 無線原生 App/ 服務(wù)器端 WebApp 接入微服務(wù),以及微服務(wù)之間調(diào)用等場(chǎng)景)贺喝,和企業(yè)內(nèi)部應(yīng)用認(rèn)證授權(quán) (IAM/SSO) 等多種場(chǎng)景菱鸥。
Spring Security OAuth2 是 Spring Security 基礎(chǔ)上的一個(gè)擴(kuò)展,支持四種主要的 OAuth2 Flows躏鱼,基本可以作為微服務(wù)認(rèn)證授權(quán)中心的推薦產(chǎn)品氮采。但是 Spring Security OAuth2 還只是一個(gè)框架,不是一個(gè)端到端的開箱即用的產(chǎn)品染苛,企業(yè)級(jí)應(yīng)用仍需在其上進(jìn)行定制扳抽,例如提供 Web 端管理界面,對(duì)接企業(yè)內(nèi)部的用戶認(rèn)證登錄系統(tǒng)殖侵,使用 Cache 緩存令牌贸呢,和微服務(wù)網(wǎng)關(guān)對(duì)接等,才能作為生產(chǎn)級(jí)使用拢军。在《2018 波波的微服務(wù)基礎(chǔ)架構(gòu)和實(shí)踐》課程中楞陷,第一個(gè)模塊就是微服務(wù)安全架構(gòu)和實(shí)踐相關(guān)主題,會(huì)深度剖析 OAuth2 原理和 Spring Security OAuth2 實(shí)踐茉唉,歡迎大家關(guān)注學(xué)習(xí)固蛾。
Spring Security OAuth2 是 Spring Security 框架的一個(gè)擴(kuò)展
服務(wù)框架 Spring/Boot
Spring 可以說是史上最成功的 Web App/API 開發(fā)框架之一,它融入了 Java 社區(qū)中多年來沉淀下來的最佳實(shí)踐度陆,雖然有將近 15 年歷史艾凯,但目前的社區(qū)活躍度仍呈上升趨勢(shì)。Spring Boot 在 Spring 的基礎(chǔ)上進(jìn)一步打包封裝懂傀,提供更貼心的 Starter 工程趾诗,自啟動(dòng)能力,自動(dòng)依賴管理蹬蚁,基于代碼的配置等特性進(jìn)一步降低接入門檻恃泪。另外 Spring Boot 也提供 actuator 這樣的生產(chǎn)級(jí)監(jiān)控特性,支持 DevOps 研發(fā)模式犀斋,它是微服務(wù)開發(fā)框架的推薦首選贝乎。
REST 契約規(guī)范 Swagger 和 Spring 有比較好的集成,使得 Spring 也支持契約驅(qū)動(dòng)開發(fā) (Contract Driven Development) 模型叽粹。對(duì)于一些中大規(guī)模的企業(yè)览效,如果業(yè)務(wù)復(fù)雜團(tuán)隊(duì)較多,考慮到互操作性和集成成本虫几,建議采用契約驅(qū)動(dòng)開發(fā)模型锤灿,也就是開發(fā)時(shí)先定義 Swagger 契約,然后再通過契約生成服務(wù)端接口和客戶端持钉,再實(shí)現(xiàn)服務(wù)端業(yè)務(wù)邏輯衡招,這種開發(fā)模型能夠標(biāo)準(zhǔn)化接口,降低系統(tǒng)間集成成本每强,對(duì)于多團(tuán)隊(duì)協(xié)同并行開發(fā)非常重要始腾。
監(jiān)控反饋組件
數(shù)據(jù)總線 Kafka
最初由 Linkedin 研發(fā)并在其內(nèi)部大規(guī)模成功應(yīng)用,然后在 Apache 上開源的 Kafka空执,是業(yè)內(nèi)數(shù)據(jù)總線 (Databus) 一塊的標(biāo)配浪箭,幾乎每一家互聯(lián)網(wǎng)公司都可以看到 Kafka 的身影。Kafka 堪稱開源項(xiàng)目的一個(gè)經(jīng)典成功案例辨绊,其創(chuàng)始人團(tuán)隊(duì)從 Linkedin 離職后還專門成立了一家叫 confluent 的企業(yè)軟件服務(wù)公司奶栖,圍繞 Kafka 周邊提供配套和增值服務(wù)。在監(jiān)控一塊,日志和 Metrics 等數(shù)據(jù)可以通過 Kafka 做收集宣鄙、存儲(chǔ)和轉(zhuǎn)發(fā)袍镀,相當(dāng)于中間增加了一個(gè)大容量緩沖,能夠應(yīng)對(duì)海量日志數(shù)據(jù)的場(chǎng)景冻晤。除了日志監(jiān)控?cái)?shù)據(jù)收集苇羡,Kafka 在業(yè)務(wù)大數(shù)據(jù)分析,IoT 等場(chǎng)景都有廣泛應(yīng)用鼻弧。如果對(duì) Kafka 進(jìn)行適當(dāng)定制增強(qiáng)设江,還可以用于傳統(tǒng)消息中間件場(chǎng)景。
Kafka 的特性是大容量攘轩,高吞吐叉存,高可用,數(shù)據(jù)可重復(fù)消費(fèi)度帮,可水平擴(kuò)展歼捏,支持消費(fèi)者組等。Kafka 尤其適用于不嚴(yán)格要求實(shí)時(shí)和不丟數(shù)據(jù)的大數(shù)據(jù)日志場(chǎng)景够傍。
Kafka 創(chuàng)始人三人組甫菠,離開 Linkedin 后,創(chuàng)立了基于 Kafka 的創(chuàng)業(yè)公司 Confluent
日志監(jiān)控 ELK
ELK(ElasticSearch/Logstash/Kibana)是日志監(jiān)控一塊的標(biāo)配技術(shù)棧冕屯,幾乎每一家互聯(lián)網(wǎng)公司都可以看到 ELK 的身影寂诱,據(jù)稱攜程是國內(nèi) ELK 的最大用戶,每日增量日志數(shù)據(jù)量達(dá)到 80~90TB安聘。ELK 已經(jīng)非常成熟痰洒,基本上是開箱即用,后續(xù)主要的工作在運(yùn)維浴韭、治理和調(diào)優(yōu)丘喻。ELK 一般和 Kafka 配套使用,因?yàn)槿罩痉衷~操作還是比較耗時(shí)的念颈,Kafka 主要作為前置緩沖泉粉,起到流量消峰作用,抵消日志流量高峰和消費(fèi)(分詞建索引)的不匹配問題榴芳。一旦反向索引建立嗡靡,日志檢索是非常快的窟感,所以日志檢索快和靈活是 ElasticSearch 的最大亮點(diǎn)讨彼。另外 ELK 還有大容量,高吞吐柿祈,高可用哈误,可水平擴(kuò)容等企業(yè)級(jí)特性哩至。
創(chuàng)業(yè)公司起步期,考慮到資源時(shí)間限制蜜自,調(diào)用鏈監(jiān)控和 Metrics 監(jiān)控可以不是第一優(yōu)先級(jí)菩貌,但是 ELK 是必須搭一套的,應(yīng)用日志數(shù)據(jù)一定要收集并建立索引袁辈,基本能夠覆蓋大部分 Trouble Shooting 場(chǎng)景(業(yè)務(wù)菜谣,性能,程序 bug 等)晚缩。另外用好 ELK 的關(guān)鍵是治理,需要制定一些規(guī)則(比如只收集 Warn 級(jí)別以上日志)媳危,對(duì)應(yīng)用的日志數(shù)據(jù)量做好監(jiān)控荞彼,否則開發(fā)人員會(huì)濫用,什么垃圾數(shù)據(jù)都往 ELK 里頭丟待笑,造成大量空間被浪費(fèi)鸣皂,嚴(yán)重的還可能造成性能可用性問題。
ELK + Kafka 參考部署架構(gòu)
調(diào)用鏈監(jiān)控 CAT
Spring Cloud 支持基于 Zipkin 的調(diào)用鏈監(jiān)控暮蹂,我個(gè)人基于實(shí)踐經(jīng)驗(yàn)認(rèn)為 Zipkin 還不能算一款企業(yè)級(jí)調(diào)用鏈監(jiān)控產(chǎn)品寞缝,充其量只能算是一個(gè)半成品,很多重要的企業(yè)級(jí)特性缺失仰泻。Zipkin 最早是由 Twitter 在消化 Google Dapper 論文的基礎(chǔ)上研發(fā)荆陆,在 Twitter 內(nèi)部有較成功應(yīng)用,但是在開源出來的時(shí)候把不少重要的統(tǒng)計(jì)報(bào)表功能給閹割了(因?yàn)橐蕾囉谝恍┍容^重的大數(shù)據(jù)分析平臺(tái))集侯,只是開源了一個(gè)半成品被啼,能簡單查詢和呈現(xiàn)可視化調(diào)用鏈,但是細(xì)粒度的調(diào)用性能數(shù)據(jù)報(bào)表沒有開源棠枉。
Google 大致在 2007 年左右開始研發(fā)稱為 Dapper 的調(diào)用鏈監(jiān)控系統(tǒng)浓体,但在遠(yuǎn)遠(yuǎn)早于這個(gè)時(shí)間(大致在 2002 左右),eBay 就已經(jīng)有了自己的調(diào)用鏈監(jiān)控系統(tǒng) CAL(Centralized Application Logging)辈讶,Google 和 eBay 的設(shè)計(jì)思路大致相同命浴,但是也有一些差別。CAL 在 eBay 有大規(guī)模成功應(yīng)用贱除,被稱為是 eBay 的四大神器之一(另外三個(gè)是 DAL生闲,Messaging 和 SOA)。開源調(diào)用鏈監(jiān)控系統(tǒng) CAT 的作者吳其敏(我曾經(jīng)和他同事勘伺,習(xí)慣叫他老吳)跪腹,曾經(jīng)在 eBay 工作近十年,期間深入消化吸收了 CAL 的設(shè)計(jì)飞醉。2011 年后老吳離開 eBay 去了點(diǎn)評(píng)冲茸,用三年時(shí)間在點(diǎn)評(píng)再造了一款調(diào)用鏈監(jiān)控產(chǎn)品 CAT(Centralized Application Tracking)屯阀,CAT 具有 CAL 的基因和影子,同時(shí)也融入了老吳在點(diǎn)評(píng)的探索實(shí)踐和創(chuàng)新轴术。
CAT 是一款更完整的企業(yè)級(jí)調(diào)用鏈監(jiān)控產(chǎn)品难衰,甚至已經(jīng)接近一個(gè) APM(Application Performance Management)產(chǎn)品的范疇,它不僅支持調(diào)用鏈的查詢和可視化逗栽,還支持細(xì)粒度的調(diào)用性能數(shù)據(jù)統(tǒng)計(jì)報(bào)表盖袭,這塊是 CAT 和市面上其它開源調(diào)用鏈監(jiān)控產(chǎn)品最本質(zhì)的差異點(diǎn),實(shí)際上開發(fā)人員大部分時(shí)間用 CAT 是看性能統(tǒng)計(jì)報(bào)表(主要是 CAT 的 Transaction 和 Problem 報(bào)表)彼宠,這些報(bào)表相當(dāng)于給了開發(fā)人員一把尺子鳄虱,可以自助測(cè)量并持續(xù)改進(jìn)應(yīng)用性能。另外 CAT 還支持應(yīng)用報(bào)錯(cuò)大盤凭峡,自助告警等功能拙已,也是企業(yè)級(jí)監(jiān)控非常實(shí)用的功能。
CAT 在點(diǎn)評(píng)摧冀,攜程倍踪,陸金所,拍拍貸等公司有成功落地案例索昂,因?yàn)槭菄a(chǎn)調(diào)用鏈監(jiān)控產(chǎn)品建车,界面展示和功能等更契合國內(nèi)文化,更易于在國內(nèi)公司落地椒惨。個(gè)人推薦 CAT 作為微服務(wù)調(diào)用鏈監(jiān)控的首選缤至。至于社區(qū)里頭有人提到 CAT 的侵入性問題,我覺得是要一分為二看框产,有利有弊凄杯,有耦合性但是性能更好,一般企業(yè)中基礎(chǔ)架構(gòu)團(tuán)隊(duì)會(huì)使用 CAT 統(tǒng)一為基礎(chǔ)組件埋點(diǎn)秉宿,開發(fā)人員一般不用自己埋點(diǎn)戒突;另外企業(yè)用了一款調(diào)用鏈監(jiān)控產(chǎn)品以后,一般是不會(huì)換的描睦,開發(fā)人員用習(xí)慣就好了膊存,侵入不是大問題。
CAT 的 Transaction 報(bào)表
Metrics 監(jiān)控 KariosDB
除了日志和調(diào)用鏈忱叭,Metrics 也是應(yīng)用監(jiān)控的重要關(guān)注點(diǎn)隔崎。互聯(lián)網(wǎng)應(yīng)用提倡度量驅(qū)動(dòng)開發(fā)(Metrics Driven Development)韵丑,也就是說開發(fā)人員不僅要關(guān)注功能實(shí)現(xiàn)爵卒,做好單元測(cè)試(TDD),還要做好業(yè)務(wù)層(例如注冊(cè)撵彻,登錄和下單數(shù)等)和應(yīng)用層(例如調(diào)用數(shù)钓株,調(diào)用延遲等)的監(jiān)控埋點(diǎn)实牡,這個(gè)也是 DevOps(開發(fā)即運(yùn)維)理念的體現(xiàn),DevOps 要求開發(fā)人員必須關(guān)注運(yùn)維需求轴合,監(jiān)控埋點(diǎn)是一種生產(chǎn)級(jí)運(yùn)維需求创坞。
Metrics 監(jiān)控產(chǎn)品底層依賴于時(shí)間序列數(shù)據(jù)庫(TSDB),最近比較熱的開源產(chǎn)品有 Prometheus 和 InfluxDB受葛,社區(qū)用戶數(shù)量和反饋都不錯(cuò)题涨,可以采納。但是這些產(chǎn)品分布式能力比較弱总滩,定制擴(kuò)展門檻比較高纲堵,一般建議剛起步量不大的公司采用。如果企業(yè)業(yè)務(wù)和團(tuán)隊(duì)規(guī)模發(fā)展到一定階段咳秉,建議考慮支持分布式能力的時(shí)間序列監(jiān)控產(chǎn)品婉支,例如 KairosDB 或者 OpenTSDB,我本人對(duì)這兩款產(chǎn)品都有一些實(shí)踐經(jīng)驗(yàn)澜建,KariosDB 基于 Cassandra,相對(duì)更輕量一點(diǎn)蝌以,建議中大規(guī)模公司采用炕舵,如果你們公司已經(jīng)采用 Hadoop/HBase,則 OpenTSDB 也是不錯(cuò)選擇跟畅。
KairosDB 一般也和 Kafka 配套使用咽筋,Kafka 作為前置緩沖。另外注意使用 KariosDB 打點(diǎn)的話 tag 的值不能太離散徊件,否則會(huì)有查詢性能問題奸攻,這個(gè)和 KariosDB 底層存儲(chǔ)結(jié)構(gòu)有關(guān)系。Grafana 是 Metrics 展示標(biāo)配虱痕,可以和 KariosDB 無縫集成睹耐。
Grafana 是 Metrics 展示標(biāo)配,和主流時(shí)間序列數(shù)據(jù)庫都可以集成
健康檢查和告警 ZMon
除了上述監(jiān)控手段部翘,我們?nèi)孕枰】禉z查和告警系統(tǒng)作為配套的監(jiān)控手段硝训。ZMon 是德國電商公司 Zalando 開源的一款健康檢查和告警平臺(tái),具備強(qiáng)大靈活的監(jiān)控告警能力新思。ZMon 本質(zhì)上可以認(rèn)為是一套分布式監(jiān)控任務(wù)調(diào)度平臺(tái)窖梁,它提供眾多的 Check 腳本(也可以自己再定制擴(kuò)展),能夠?qū)Ω鞣N硬件資源或者目標(biāo)服務(wù)(例如 HTTP 端口夹囚,Spring 的 Actuator 端點(diǎn)纵刘,KariosDB 中的 Metrics,ELK 中的錯(cuò)誤日志等等)進(jìn)行定期的健康檢查和告警荸哟,它的告警邏輯和策略采用 Python 腳本實(shí)現(xiàn)假哎,開發(fā)人員可以實(shí)現(xiàn)自助式告警瞬捕。ZMon 同時(shí)適用于系統(tǒng),應(yīng)用位谋,業(yè)務(wù)山析,甚至端用戶體驗(yàn)層的監(jiān)控和告警。
ZMon 分布式監(jiān)控告警系統(tǒng)架構(gòu)掏父,底層基于 KairosDB 時(shí)間序列數(shù)據(jù)庫
限流熔斷和流聚合 Hystrix+Turbine
2010 年左右笋轨,Netflix 也飽受分布式微服務(wù)系統(tǒng)中雪崩效應(yīng)(Cascading Failure)的困擾,于是專門啟動(dòng)了一個(gè)叫做彈性工程的項(xiàng)目來解決這個(gè)問題赊淑,Hystrix 就是彈性工程最終落地下來的一個(gè)產(chǎn)品爵政。Hystrix 在 Netflix 微服務(wù)系統(tǒng)中大規(guī)模推廣應(yīng)用后,雪崩效應(yīng)問題基本得到解決陶缺,整個(gè)體統(tǒng)更具彈性钾挟。之后 Netflix 把 Hystrix 開源貢獻(xiàn)給了社區(qū),短期獲得社區(qū)的大量正面反饋饱岸,目前 Hystrix 在 github 上有超過 1.3 萬顆星掺出,據(jù)說支持奧巴馬總統(tǒng)選舉的系統(tǒng)也曾使用 Hystrix 進(jìn)行限流熔斷保護(hù) [參考附錄 2],可見限流熔斷是分布式系統(tǒng)穩(wěn)定性的強(qiáng)需求苫费,Netflix 很好的抓住了這個(gè)需求并給出了經(jīng)過生產(chǎn)級(jí)驗(yàn)證的解決方案汤锨。Hystrix 已經(jīng)被納入 Spring Cloud 體系,它是 Java 社區(qū)中限流熔斷組件的首選(目前還看不到第二個(gè)更好的產(chǎn)品)百框。
Turbine 是和 Hystrix 配套的一個(gè)流聚合服務(wù)闲礼,能夠?qū)?Hystrix 監(jiān)控?cái)?shù)據(jù)流進(jìn)行聚合,聚合以后可以在 Hystrix Dashboard 上看到集群的流量和性能情況铐维。
Hystrix 在英文中是豪豬獸的意思褂始,豪豬獸通過身上的刺保護(hù)自己能扒,Netflix 為限流熔斷組件起名 Hystrix唇兑,寓意 Hystrix 能夠保護(hù)微服務(wù)調(diào)用厦坛。
結(jié)論
- 技術(shù)棧沒有好壞之分,只有適合一說棠众。本文推薦的技術(shù)棧主要基于我個(gè)人的實(shí)踐和總結(jié)琳疏,但是未必適合所有場(chǎng)景,畢竟每個(gè)企業(yè)的上下文各不相同闸拿。作為架構(gòu)師你可以參考我推薦的技術(shù)棧空盼,但不可拘泥照搬,你必須在深入理解分布系統(tǒng)原理的基礎(chǔ)上新荤,再結(jié)合企業(yè)實(shí)際場(chǎng)景靈活應(yīng)用揽趾。
- 本文推薦的技術(shù)棧主要面向微服務(wù)基礎(chǔ)架構(gòu),也是《微服務(wù)架構(gòu)實(shí)戰(zhàn) 160 講》課程要深度剖析的主題苛骨。在整個(gè)互聯(lián)網(wǎng)基礎(chǔ)技術(shù)平臺(tái)體系中篱瞎,還有消息苟呐,任務(wù),數(shù)據(jù)訪問層俐筋,發(fā)布系統(tǒng)牵素,容器云平臺(tái),分布式事務(wù)澄者,分布式一致性笆呆,測(cè)試,CI/CD 等其它重要主題粱挡,這些是波波在 2019 第三季和 2020 第四季要陸續(xù)推出的內(nèi)容赠幕,請(qǐng)大家持續(xù)關(guān)注。
附錄
Interview: Adrian Cockcroft on High Availability, Best Practices, and Lessons Learned in the Cloud https://www.infoq.com/articles/cockcroft-high-availability
Netflix 云端開源工具 Hystrix:曾助奧巴馬競(jìng)選 http://it.sohu.com/20121129/n358943361.shtml