自從微服務(wù)架構(gòu)開始變得火熱以后,越來越多的系統(tǒng)被拆解成了很多個(gè)細(xì)胞一樣的微服務(wù)伦乔。設(shè)想一下厉亏,如果你的系統(tǒng)有100個(gè)微服務(wù)構(gòu)成,要對這100個(gè)微服務(wù)進(jìn)行管理烈和,這絕對是一個(gè)不小的挑戰(zhàn)爱只。所以緊接著又出現(xiàn)了一堆讓人頭暈眼花的概念:服務(wù)注冊發(fā)現(xiàn),請求鏈路追蹤招刹,服務(wù)熔斷恬试,服務(wù)限流窝趣,服務(wù)管控配置,服務(wù)預(yù)警训柴。還有就是一抓一大把的開源工具:Eurake哑舒,Zuul,Ribbon畦粮,hystrix散址,zipkin,dubbo宣赔,Sleuth预麸,Elastic Search,grafna儒将,Promethues吏祸。
這樣,當(dāng)我們在說服務(wù)治理時(shí)钩蚊,是不是把這些概念和工具都用上了就能夠很好的治理這100多個(gè)微服務(wù)了贡翘?稍微用Google或者baidu搜索一下“服務(wù)治理”這個(gè)關(guān)鍵字,就很容易發(fā)現(xiàn)其實(shí)整個(gè)社區(qū)對服務(wù)治理都沒有形成一個(gè)共識砰逻,有人理解的服務(wù)治理是基于dubbo的服務(wù)注冊和服務(wù)發(fā)現(xiàn)鸣驱,有人理解的服務(wù)治理是一整套從請求網(wǎng)關(guān),服務(wù)配置中心到日志中心架構(gòu)體系蝠咆。
所以這篇文章我想從現(xiàn)在的現(xiàn)象出發(fā)踊东,分析這些概念和這些工具究竟是在解決什么問題,然后再嘗試做一個(gè)簡單的歸納和抽象刚操,看看一個(gè)服務(wù)治理體系究竟應(yīng)該解決哪些問題闸翅,而為了解決這些問題應(yīng)該具備哪些能力。
服務(wù)治理的那些藥
如果我們把服務(wù)治理類比成是在給一個(gè)人治病菊霜,那么上面提到的那些概念和工具坚冀,很明顯就是治病的藥了。既然有了這么多藥了鉴逞,那么不妨讓我們先從這些藥下手记某,看看這些流行的藥都能是為了解決什么問題的,然后再看看這些問題之間存在什么關(guān)聯(lián)构捡。
讓我們從Netflix全家桶開始液南,很多微服務(wù)架構(gòu)都是基于這套全家桶的。作為一個(gè)視頻流媒體行業(yè)的公司叭喜,能夠自主開發(fā)并向社區(qū)貢獻(xiàn)了這么多工具是我們應(yīng)該表示感謝和敬意的。由于現(xiàn)在在使用這些工具的時(shí)候都是使用Spring Cloud封裝好的模塊蓖谢,所以下面基于Spring cloud 的工具棧來進(jìn)行介紹:
Eureka捂蕴,這是一個(gè)用來注冊服務(wù)的工具譬涡,通過簡單的配置,在服務(wù)啟動的時(shí)候就會自動注冊到Eureka服務(wù)器上啥辨。
Hystrix涡匀,這是一個(gè)用來保護(hù)服務(wù)的熔斷工具,雖然最近宣布已經(jīng)停止維護(hù)更新了溉知。
Zuul陨瘩,這是一個(gè)用來對請求進(jìn)行路由的服務(wù)網(wǎng)關(guān)工具,最近的zuul2采用了Netty實(shí)現(xiàn)了異步非阻塞編程模型级乍。
Ribbon舌劳,這是一個(gè)用來分配請求的負(fù)載均衡工具
Feign,這是一個(gè)用來更方便調(diào)用其它服務(wù)的工具玫荣,也能進(jìn)行負(fù)載均衡
Archaius甚淡,這是一個(gè)管理配置API的工具
Spring Cloud Config,用來對配置進(jìn)行管理捅厂,可以把每個(gè)服務(wù)的配置放在遠(yuǎn)端服務(wù)器以方便進(jìn)行配置修改
Spring Cloud Sleuth贯卦,Tracing采集工具包,對Zipkin焙贷,HTrace進(jìn)行了封裝
Spring Cloud Consul撵割,封裝了Consul操作,同樣是用來進(jìn)行服務(wù)注冊發(fā)現(xiàn)的
Spring Cloud Zookeeper辙芍,封裝了Zookeeper啡彬,也是用來進(jìn)行服務(wù)注冊發(fā)現(xiàn)的
Spring Cloud Gateway,給Spring MVC提供API網(wǎng)關(guān)功能的工具沸手,里面也包含安全處理等特性
除了Spring Cloud和Netfix提供的這些工具以外外遇,還有下面這些工具也經(jīng)常在服務(wù)監(jiān)控治理中被使用:
Dubbo,自稱是一個(gè)高性能的Java RPC框架契吉,但是其實(shí)廣泛用于服務(wù)注冊發(fā)現(xiàn)跳仿,提供三個(gè)核心能力:面向接口的遠(yuǎn)程方法調(diào)用,智能容錯(cuò)和負(fù)載均衡捐晶,服務(wù)注冊發(fā)現(xiàn)菲语。
logback,java日志框架惑灵,是log4j的升級版本
ElasticSearch山上,雖然是一個(gè)搜索引擎和分析框架,但因?yàn)樘峁┖芎玫拇鎯筒樵冃阅苡⒅В越?jīng)常用于日志的采集和存儲
Kibana佩憾,Elastic的可視化插件,可以配合Elastic使用可視化查詢?nèi)罩?/p>
logstash,Elastic的日志分析工具
grafna妄帘,時(shí)序性分析工具楞黄,提供漂亮的圖形化界面
Promethues,強(qiáng)大系統(tǒng)監(jiān)控和報(bào)警框架抡驼,提供多維度數(shù)據(jù)模型鬼廓,靈活強(qiáng)大的查詢語句,有多種可視化圖形界面
Spring boot admin致盟,用來管理Spring Boot應(yīng)用的工具碎税,提供可視化的用戶界面
Zipkin,分布式追蹤工具馏锡,用來采集程序的延時(shí)數(shù)據(jù)
Htrace雷蹂,Apache的分布式追蹤工具。
resilience4j眷篇,用來被Hystrix指定作為熔斷的替代工具原茅。
雖然這兩個(gè)長長的列表已經(jīng)羅列了超過20個(gè)各種工具了菇民,但是這20多個(gè)也僅僅是整個(gè)微服務(wù)治理生態(tài)工具鏈中的一小部分激况,你肯定還知道一些我沒有列出來的工具帅戒。由于這里我們的目的并不是找出所有的藥,而是想分析一下這些流行的藥都有什么特點(diǎn)昧港,都是治什么病的擎椰。所以就先基于這些藥,看看他們的共性是什么创肥。
如果把功能相同的進(jìn)行一下歸類达舒,會發(fā)現(xiàn)有這樣幾個(gè)主要功能:
服務(wù)注冊發(fā)現(xiàn):Eurake,Dobbo叹侄,Consul巩搏,ZooKeeper
服務(wù)配置:Spring Cloud Config,Archaius
服務(wù)熔斷:Hystrix趾代,resilience4j
網(wǎng)關(guān):Zuul贯底,Spring Cloud Gateway
負(fù)載均衡:Ribbon,F(xiàn)eign
追蹤工具:Sleuth撒强,Zipkin禽捆,Htrace
日志采集:logback,ElasticSearch
監(jiān)控平臺:Promethues飘哨,Kibana胚想,grafna,Spring boot admin
這樣面對這些紛繁復(fù)雜的工具我們有了一個(gè)基本的劃分芽隆,當(dāng)然即便是這8個(gè)分類還是有點(diǎn)多浊服,而且相互之間的關(guān)系也不明確统屈,為什么會有這8個(gè)分類的原因也不清楚。下面就一起深入一下牙躺,看看這些工具之間的內(nèi)在關(guān)系究竟是什么鸿吆。
服務(wù)治理究竟要治的是什么?
讓我們先放下微服務(wù)述呐,像《微服務(wù)設(shè)計(jì)》那本書中說的一樣,把自己想象成一個(gè)城市規(guī)劃師蕉毯,我們的目標(biāo)不是治理微服務(wù)乓搬,而是要治理一個(gè)城市的交通,那么我們會怎么思考代虾?
在進(jìn)行城市交通規(guī)劃之前首先要做的第一個(gè)事情是收集信息进肯,要能夠知道這個(gè)城市發(fā)生了什么,所以在各個(gè)路口需要安裝采集探頭棉磨,記錄車來車往的信息江掩。有了信息以后就需要對信息進(jìn)行分析了,那么就需要可視化的圖形界面乘瓤,能夠一眼就看出什么地方出了問題环形,通往哪個(gè)工廠的路壞了。發(fā)現(xiàn)了問題就要解決問題了衙傀,限制一下?lián)矶侣范蔚牧髁刻б鳎讶ネ粋€(gè)公園的車輛導(dǎo)向到另外一個(gè)類似的公園。最后统抬,如果把城市作為一個(gè)國家來考慮火本,那么每個(gè)進(jìn)入這個(gè)城市的車輛都需要進(jìn)行檢查,看看有沒有攜帶違禁品聪建,最后給這些不熟悉道路的外地車規(guī)劃路線钙畔。通過上面這個(gè)思考的過程,我們發(fā)現(xiàn)要對一個(gè)城市進(jìn)行治理的時(shí)候金麸,第一要采集信息擎析,然后要能夠?qū)Σ杉男畔⑦M(jìn)行監(jiān)控和分析,最后根據(jù)分析的結(jié)果采取對應(yīng)的治理策略钱骂。另外從整體安全的角度考慮還需要一個(gè)守門人叔锐。
因此我們也用同樣的思路來思考服務(wù)治理,網(wǎng)關(guān)就是整個(gè)整體的守門人见秽,日志采集愉烙,追蹤工具,服務(wù)注冊發(fā)現(xiàn)都是用來采集信息的解取,然后需要監(jiān)控平臺來展現(xiàn)這些采集的信息步责,并進(jìn)行監(jiān)控和分析。最后根據(jù)分析的結(jié)果采取治理策略,有的服務(wù)快撐不住了要限流蔓肯,有的服務(wù)壞了要熔斷遂鹊,并且還能夠及時(shí)的調(diào)整這些服務(wù)的配置。
下面的腦圖就從這四個(gè)方面構(gòu)建了一個(gè)簡易的服務(wù)治理體系:請求網(wǎng)關(guān)蔗包,信息采集秉扑,信息分析,治理策略
服務(wù)治理體系
作為對當(dāng)前服務(wù)治理領(lǐng)域各種紛繁復(fù)雜工具的一次簡單梳理调限,這個(gè)體系不一定是完全準(zhǔn)確的舟陆。但是總不能每次說到服務(wù)治理的時(shí)候我們都把幾十個(gè)工具拿出來看看能用哪個(gè)工具吧。我希望達(dá)到的目的是耻矮,當(dāng)大家需要對微服務(wù)進(jìn)行治理和監(jiān)控的時(shí)候秦躯,能夠用這個(gè)簡易的體系做個(gè)參考,明確的知道在請求網(wǎng)關(guān)裆装,信息采集踱承,信息分析,治理策略這四個(gè)方面還缺少了什么東西哨免。
全網(wǎng)最新架構(gòu)實(shí)戰(zhàn)文檔:高并發(fā)+分布式+微服務(wù)+SpringBoot+Nginx茎活。有需要的小伙伴們幫忙轉(zhuǎn)發(fā)一下然后再關(guān)注我私信回復(fù)“架構(gòu)”獲取吧!