架構(gòu)圖1
架構(gòu)圖2
名詞理解:
1、Nginx
用來做反向代理戴质、負(fù)載均衡度宦,當(dāng)有請求的時候,根據(jù)配置的調(diào)度策略(加權(quán)輪詢置森、IP哈希斗埂、最少連接數(shù)符糊、一致性哈希)給請求者返回相應(yīng)的服務(wù)器IP凫海。
2、Zuul服務(wù)網(wǎng)關(guān)
zuul的核心是一系列的filters, 其作用可以類比Servlet框架的Filter
Zuul的主要功能是路由和過濾器男娄。是各種服務(wù)的統(tǒng)一入口行贪,同時還會用來提供監(jiān)控漾稀、授權(quán)、安全建瘫、調(diào)度等等崭捍;可以通過擴(kuò)展ZuulFilter,在執(zhí)行方法之前啰脚,做各種檢查工作殷蛇。
3、Ribbon客戶端負(fù)載均衡
Spring Cloud Ribbon是一個基于HTTP和TCP的客戶端負(fù)載均衡工具橄浓,它基于Netflix Ribbon實現(xiàn)粒梦。通過Spring Cloud的封裝,可以讓我們輕松地將面向服務(wù)的REST模版請求自動轉(zhuǎn)換成客戶端負(fù)載均衡的服務(wù)調(diào)用荸实。Spring Cloud Ribbon雖然只是一個工具類框架匀们,它不像服務(wù)注冊中心、配置中心准给、API網(wǎng)關(guān)那樣需要獨(dú)立部署泄朴,但是它幾乎存在于每一個Spring Cloud構(gòu)建的微服務(wù)和基礎(chǔ)設(shè)施中。因為微服務(wù)間的調(diào)用露氮,API網(wǎng)關(guān)的請求轉(zhuǎn)發(fā)等內(nèi)容祖灰,實際上都是通過Ribbon來實現(xiàn)的,包括后續(xù)我們將要介紹的Feign畔规,它也是基于Ribbon實現(xiàn)的工具夫植。所以,對Spring Cloud Ribbon的理解和使用油讯,對于我們使用Spring Cloud來構(gòu)建微服務(wù)非常重要详民。
4、Feign
Feign是一個聲明性web服務(wù)客戶端陌兑。它使編寫web服務(wù)客戶機(jī)變得更容易沈跨。要使用Feign創(chuàng)建一個接口并對其進(jìn)行注釋。它具有可插入的注釋支持兔综,包括偽注釋和JAX-RS注釋饿凛。Feign還支持可插拔的編碼器和解碼器。Spring Cloud增加了對Spring MVC注釋的支持软驰,并支持使用在Spring Web中默認(rèn)使用的相同httpmessageconverter涧窒。Spring Cloud集成Ribbon和Eureka,在使用Feign時提供負(fù)載均衡的http客戶端锭亏。
5纠吴、Sleuth-鏈路跟蹤
為服務(wù)之間調(diào)用提供鏈路追蹤。通過Sleuth可以很清楚的了解到一個服務(wù)請求經(jīng)過了哪些服務(wù)慧瘤,每個服務(wù)處理花費(fèi)了多長戴已。從而讓我們可以很方便的理清各微服務(wù)間的調(diào)用關(guān)系固该。
6、斷路器(Hystrix)
在微服務(wù)架構(gòu)中糖儡,根據(jù)業(yè)務(wù)來拆分成一個個的服務(wù)伐坏,服務(wù)與服務(wù)之間可以相互調(diào)用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign來調(diào)用握联。為了保證其高可用桦沉,單個服務(wù)通常會集群部署。由于網(wǎng)絡(luò)原因或者自身的原因金闽,服務(wù)并不能保證100%可用永部,如果單個服務(wù)出現(xiàn)問題,調(diào)用這個服務(wù)就會出現(xiàn)線程阻塞呐矾,此時若有大量的請求涌入苔埋,Servlet容器的線程資源會被消耗完畢,導(dǎo)致服務(wù)癱瘓蜒犯。服務(wù)與服務(wù)之間的依賴性组橄,故障會傳播,會對整個微服務(wù)系統(tǒng)造成災(zāi)難性的嚴(yán)重后果罚随,這就是服務(wù)故障的“雪崩”效應(yīng)玉工。Netflix開源了Hystrix組件,實現(xiàn)了斷路器模式淘菩,SpringCloud對這一組件進(jìn)行了整合
7遵班、Turbine集群監(jiān)控
Turbine 是聚合服務(wù)器發(fā)送事件流數(shù)據(jù)的一個工具,用來監(jiān)控集群下 hystrix 的 metrics 情況潮改。
通過turbine可以監(jiān)控集群的請求量兵钮,可以知道系統(tǒng)的請求高峰期雏赦,從而更好的知道系統(tǒng)的短板在哪里。
8、Consul服務(wù)治理 和Eureka服務(wù)治理
由于Spring Cloud為服務(wù)治理做了一層抽象接口垃喊,所以在Spring Cloud應(yīng)用中可以支持多種不同的服務(wù)治理框架尖淘,比如:Netflix Eureka颈将、Consul驹针、Zookeeper。
Spring Cloud Consul項目是針對Consul的服務(wù)治理實現(xiàn)阿蝶。Consul是一個分布式高可用的系統(tǒng)雳锋,它包含多個組件,但是作為一個整體羡洁,在微服務(wù)架構(gòu)中為我們的基礎(chǔ)設(shè)施提供服務(wù)發(fā)現(xiàn)和服務(wù)配置的工具玷过。它包含了下面幾個特性: 服務(wù)發(fā)現(xiàn)、 健康檢查、 Key/Value存儲冶匹、 多數(shù)據(jù)中心习劫。由于Consul自身提供了服務(wù)端咆瘟,所以我們不需要像之前實現(xiàn)Eureka的時候創(chuàng)建服務(wù)注冊中心嚼隘,直接通過下載consul的服務(wù)端程序就可以使用。Consul比Eureka注冊支持的更多一些袒餐。
9飞蛹、config配置管理
引入spring cloud config后,我們的外部配置文件就可以集中放置在一個git倉庫里灸眼,再新建一個config server卧檐,用來管理所有的配置文件,維護(hù)的時候需要更改配置時焰宣,只需要在本地更改后霉囚,推送到遠(yuǎn)程倉庫,所有的服務(wù)實例都可以通過config server來獲取配置文件匕积,這時每個服務(wù)實例就相當(dāng)于配置服務(wù)的客戶端config client,為了保證系統(tǒng)的穩(wěn)定盈罐,配置服務(wù)端config server可以進(jìn)行集群部署
什么是微服務(wù)(Microservice)
微服務(wù)英文名稱Microservice,Microservice架構(gòu)模式就是將整個Web應(yīng)用組織為一系列小的Web服務(wù)闪唆。這些小的Web服務(wù)可以獨(dú)立地編譯及部署盅粪,并通過各自暴露的API接口相互通訊。它們彼此相互協(xié)作悄蕾,作為一個整體為用戶提供功能票顾,卻可以獨(dú)立地進(jìn)行擴(kuò)。
微服務(wù)架構(gòu)需要的功能或使用場景
1:我們把整個系統(tǒng)根據(jù)業(yè)務(wù)拆分成幾個子系統(tǒng)帆调。
2:每個子系統(tǒng)可以部署多個應(yīng)用奠骄,多個應(yīng)用之間使用負(fù)載均衡。
3:需要一個服務(wù)注冊中心番刊,所有的服務(wù)都在注冊中心注冊戚揭,負(fù)載均衡也是通過在注冊中心注冊的服務(wù)來使用一定策略來實現(xiàn)。
4:所有的客戶端都通過同一個網(wǎng)關(guān)地址訪問后臺的服務(wù)撵枢,通過路由配置民晒,網(wǎng)關(guān)來判斷一個URL請求由哪個服務(wù)處理。請求轉(zhuǎn)發(fā)到服務(wù)上的時候也使用負(fù)載均衡锄禽。
5:服務(wù)之間有時候也需要相互訪問潜必。例如有一個用戶模塊,其他服務(wù)在處理一些業(yè)務(wù)的時候沃但,要獲取用戶服務(wù)的用戶數(shù)據(jù)磁滚。
6:需要一個斷路器,及時處理服務(wù)調(diào)用時的超時和錯誤,防止由于其中一個服務(wù)的問題而導(dǎo)致整體系統(tǒng)的癱瘓垂攘。
7:還需要一個監(jiān)控功能维雇,監(jiān)控每個服務(wù)調(diào)用花費(fèi)的時間等。
目前主流的微服務(wù)框架:Dubbo晒他、 SpringCloud吱型、thrift、Hessian等陨仅,目前國內(nèi)的中小企業(yè)用的大多數(shù)都是Dubbo津滞,SpringCloud。
SpringCloud項目簡介
springCloud是基于SpringBoot的一整套實現(xiàn)微服務(wù)的框架灼伤。他提供了微服務(wù)開發(fā)所需的配置管理触徐、服務(wù)發(fā)現(xiàn)、斷路器狐赡、智能路由撞鹉、微代理、控制總線颖侄、全局鎖鸟雏、決策競選、分布式會話和集群狀態(tài)管理等組件发皿。最重要的是崔慧,
跟spring boot框架一起使用的話,會讓你開發(fā)微服務(wù)架構(gòu)的云服務(wù)非常好的方便穴墅。
SpringBoot旨在簡化創(chuàng)建產(chǎn)品級的 Spring 應(yīng)用和服務(wù)惶室,簡化了配置文件,使用嵌入式web服務(wù)器玄货,含有諸多開箱即用微服務(wù)功能
spring cloud子項目包括:
Spring Cloud Config:配置管理開發(fā)工具包皇钞,可以讓你把配置放到遠(yuǎn)程服務(wù)器,目前支持本地存儲松捉、Git以及Subversion夹界。
Spring Cloud Bus:事件、消息總線隘世,用于在集群(例如可柿,配置變化事件)中傳播狀態(tài)變化,可與Spring Cloud Config聯(lián)合實現(xiàn)熱部署丙者。
Spring Cloud Netflix:針對多種Netflix組件提供的開發(fā)工具包复斥,其中包括Eureka、Hystrix械媒、Zuul目锭、Archaius等评汰。
Netflix Eureka:云端負(fù)載均衡,一個基于 REST 的服務(wù)痢虹,用于定位服務(wù)被去,以實現(xiàn)云端的負(fù)載均衡和中間層服務(wù)器的故障轉(zhuǎn)移。
Netflix Hystrix:容錯管理工具奖唯,旨在通過控制服務(wù)和第三方庫的節(jié)點,從而對延遲和故障提供更強(qiáng)大的容錯能力惨缆。
Netflix Zuul:邊緣服務(wù)工具,是提供動態(tài)路由臭埋,監(jiān)控踪央,彈性臀玄,安全等的邊緣服務(wù)瓢阴。
Netflix Archaius:配置管理API,包含一系列配置管理API健无,提供動態(tài)類型化屬性荣恐、線程安全配置操作、輪詢框架累贤、回調(diào)機(jī)制等功能叠穆。
Spring Cloud for Cloud Foundry:通過Oauth2協(xié)議綁定服務(wù)到CloudFoundry,CloudFoundry是VMware推出的開源PaaS云平臺臼膏。
Spring Cloud Sleuth:日志收集工具包硼被,封裝了Dapper,Zipkin和HTrace操作。
Spring Cloud Data Flow:大數(shù)據(jù)操作工具渗磅,通過命令行方式操作數(shù)據(jù)流嚷硫。
Spring Cloud Security:安全工具包,為你的應(yīng)用程序添加安全控制始鱼,主要是指OAuth2仔掸。
Spring Cloud Consul:封裝了Consul操作,consul是一個服務(wù)發(fā)現(xiàn)與配置工具医清,與Docker容器可以無縫集成起暮。
Spring Cloud Zookeeper:操作Zookeeper的工具包,用于使用zookeeper方式的服務(wù)注冊和發(fā)現(xiàn)会烙。
Spring Cloud Stream:數(shù)據(jù)流操作開發(fā)包负懦,封裝了與Redis,Rabbit、Kafka等發(fā)送接收消息柏腻。
Spring Cloud CLI:基于 Spring Boot CLI纸厉,可以讓你以命令行方式快速建立云組件。
SpringCloud特點
1:約定優(yōu)于配置
2:開箱即用葫盼、快速啟動
3:適用于各種環(huán)境
4:輕量級的組件
5:組件支持豐富残腌,功能齊全