版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于SpringCloud和Netflix的微服務(wù)技術(shù)架構(gòu)基于Spring
Cloud和Netflix打造基于SpringCloud和Netflix的微服務(wù)技術(shù)架構(gòu)1基于SpringCloud和Netflix的微服務(wù)技術(shù)架構(gòu)Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)融數(shù)微服務(wù)架構(gòu)的核心概念和實(shí)現(xiàn)融數(shù)DevOps平臺(tái)對(duì)微服務(wù)的支撐技術(shù)團(tuán)隊(duì)的組織OperationExcellentAgenda談?wù)勎⒎?wù)2Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)2Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)融數(shù)微服務(wù)架構(gòu)的核心概念和實(shí)現(xiàn)融數(shù)DevOps平臺(tái)對(duì)微服務(wù)的支撐技術(shù)團(tuán)隊(duì)的組織OperationExcellentAgenda談?wù)勎⒎?wù)3Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)3從微服務(wù)的概念談起高度封裝松耦合獨(dú)立部署獨(dú)立擴(kuò)展應(yīng)用組件從微服務(wù)的概念談起高度封裝松耦合獨(dú)立部署獨(dú)立擴(kuò)展應(yīng)用組件4從微服務(wù)的概念談起高度封裝松耦合獨(dú)立部署獨(dú)立擴(kuò)展應(yīng)用組件從微微服務(wù)與SOA的異同從設(shè)計(jì)原則來(lái)講,微服務(wù)架構(gòu)遵循SOAprinciples小的、可重用的服務(wù)并不一定是微服務(wù),微服務(wù)架構(gòu)強(qiáng)調(diào)敏捷、獨(dú)立開(kāi)發(fā)、獨(dú)立部署、獨(dú)立擴(kuò)展,重用在某種程度上范圍影響敏捷性微服務(wù)架構(gòu)為了實(shí)現(xiàn)其敏捷特性,在SOA約束的基礎(chǔ)之上又添加了新的約束微服務(wù)之間不能互相依賴,因此要求微服務(wù)能夠獨(dú)立部署,獨(dú)立擴(kuò)展,微服務(wù)之間的依賴越少越好一個(gè)應(yīng)用只做一件事不要為外部應(yīng)用發(fā)布API,依賴通過(guò)service或者事件搞定最好通過(guò)異步事件交互每個(gè)應(yīng)用擁有自己獨(dú)立的數(shù)據(jù)微服務(wù)與SOA的異同從設(shè)計(jì)原則來(lái)講,微服務(wù)架構(gòu)遵循SOAp5微服務(wù)與SOA的異同從設(shè)計(jì)原則來(lái)講,微服務(wù)架構(gòu)遵循SOAp采用微服務(wù)需要的一些前提條件沒(méi)有銀彈!微服務(wù)將單體應(yīng)用中的復(fù)雜性轉(zhuǎn)移到了應(yīng)用組件之間微服務(wù)粒度問(wèn)題:如果粒度太細(xì),就需要一個(gè)編排服務(wù),其實(shí)退回到了小型的SOA架構(gòu)如果服務(wù)粒度過(guò)粗,就不利于獨(dú)立部署采用微服務(wù)之前,需要考慮如下幾點(diǎn)微服務(wù)架構(gòu)基礎(chǔ)組件:服務(wù)路由服務(wù)注冊(cè)和發(fā)現(xiàn)配置服務(wù)監(jiān)控事件溯源(event
sourcing)框架團(tuán)隊(duì)的敏捷成熟的如何,是否有足夠的DevOps經(jīng)驗(yàn)團(tuán)隊(duì)的數(shù)據(jù)管理方式是否滿足微服務(wù)的要求團(tuán)隊(duì)是否有非常強(qiáng)的架構(gòu)實(shí)踐能力采用微服務(wù)需要的一些前提條件沒(méi)有銀彈!微服務(wù)將單體應(yīng)用中的復(fù)6采用微服務(wù)需要的一些前提條件沒(méi)有銀彈!微服務(wù)將單體應(yīng)用中的復(fù)Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)融數(shù)微服務(wù)架構(gòu)的核心概念和實(shí)現(xiàn)融數(shù)DevOps平臺(tái)對(duì)微服務(wù)的支撐技術(shù)團(tuán)隊(duì)的組織OperationExcellentAgenda談?wù)勎⒎?wù)7Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)7微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)技術(shù)選型的考慮點(diǎn)社區(qū)熱度文檔多坑少比較容易找到人架構(gòu)成熟度方便開(kāi)發(fā)方便遷移多協(xié)議支持多語(yǔ)言支持學(xué)習(xí)曲線基于成熟技術(shù)現(xiàn)有知識(shí)傳承可維護(hù)性監(jiān)控能力運(yùn)維能力微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)技術(shù)選型的考慮點(diǎn)社區(qū)熱度文檔多架8微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)技術(shù)選型的考慮點(diǎn)社區(qū)熱度文檔多架微服務(wù)技術(shù)選型過(guò)程功能點(diǎn)/服務(wù)框架備選方案Netflix/Spring
cloudMotangRPCThriftDubbo/DubboX功能定位完整的微服務(wù)框架RPC框架,但整合了ZK或Consul,實(shí)現(xiàn)集群環(huán)境的基本的服務(wù)注冊(cè)/發(fā)現(xiàn)RPC框架RPC框架服務(wù)框架支持Rest是Ribbon支持多種可插拔的序列化選擇否否否否支持RPC否是(Hession2)是是是支持多語(yǔ)言是(Rest形式)?否是是否服務(wù)注冊(cè)/發(fā)現(xiàn)是(Eureka)Eureka服務(wù)注冊(cè)表,Karyon服務(wù)端框架支持服務(wù)自注冊(cè)和健康檢查是(zookeeper/consul)否否是負(fù)載均衡是(服務(wù)端zuul+客戶端Ribbon)Zuul-服務(wù),動(dòng)態(tài)路由云端負(fù)載均衡
Eureka(針對(duì)中間層服務(wù)器)是(客戶端)否否是(客戶端)配置服務(wù)Netflix
ArchaiusSpring
cloud
Config
Server
集中配置是(zookeeper提供)否否否服務(wù)調(diào)用鏈監(jiān)控是(zuul)Zuul提供邊緣服務(wù),API網(wǎng)關(guān)否否否否高可用/容錯(cuò)是(服務(wù)端Hystrix+客戶端Ribbon)是(客戶端)否否是(客戶端)典型應(yīng)用案例NetflixSinaGoogleFacebook社區(qū)活躍程度高一般高一般已經(jīng)不維護(hù)了學(xué)習(xí)難度中等低高高低文檔豐富度高一般一般一般高其他Spring
Cloud
Bus為我們的應(yīng)用程支持降級(jí)Netflix內(nèi)部在開(kāi)發(fā)集成gRPCIDL定義實(shí)踐的公司比較多微服務(wù)技術(shù)選型過(guò)程功能點(diǎn)/服務(wù)框架備選方案Netflix/S9微服務(wù)技術(shù)選型過(guò)程功能點(diǎn)/服務(wù)框架備選方案Netflix/S微服務(wù)技術(shù)選型過(guò)程目前團(tuán)隊(duì)主要采用Spring
Boot
+
RestEasy的方式實(shí)現(xiàn)服務(wù)化首先支持rest現(xiàn)有業(yè)務(wù)代碼的遷移不希望改動(dòng)太大小團(tuán)隊(duì),希望能夠有一個(gè)比較全面的解決方案結(jié)論Netflix提供了比較全面的解決方案Spring
Cloud對(duì)于Netflix的封裝比較全面Spring
Cloud基于Spring
Boot,團(tuán)隊(duì)有基礎(chǔ)Spring
Cloud提供了Control
Bus能夠幫助實(shí)現(xiàn)監(jiān)控埋點(diǎn)業(yè)務(wù)應(yīng)用部署在阿里云,Spring
Cloud對(duì)12factors以及Cloud-Native的支持,有利于在云環(huán)境下使用微服務(wù)技術(shù)選型過(guò)程目前團(tuán)隊(duì)主要采用SpringBoot+10微服務(wù)技術(shù)選型過(guò)程目前團(tuán)隊(duì)主要采用SpringBoot+Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)融數(shù)微服務(wù)架構(gòu)的核心概念和實(shí)現(xiàn)融數(shù)DevOps平臺(tái)對(duì)微服務(wù)的支撐技術(shù)團(tuán)隊(duì)的組織OperationExcellentAgenda談?wù)勎⒎?wù)11Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)11微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)簡(jiǎn)化開(kāi)發(fā)調(diào)用方便高性能可用性和安全方便使用,節(jié)約時(shí)間代碼生成Migration
tools膠水方便測(cè)試clientsexplorer文檔柔性設(shè)計(jì)多協(xié)議支持,方便新協(xié)議添加CachingContinuationsmetricsthrottlingload
sheddingauthentication微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)簡(jiǎn)化開(kāi)發(fā)調(diào)用方便高性能可用性和安12微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)簡(jiǎn)化開(kāi)發(fā)調(diào)用方便高性能可用性和安Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)融數(shù)微服務(wù)架構(gòu)的核心概念和實(shí)現(xiàn)融數(shù)DevOps平臺(tái)對(duì)微服務(wù)的支撐技術(shù)團(tuán)隊(duì)的組織OperationExcellentAgenda談?wù)勎⒎?wù)13Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)13核心模型Envelopeconsum
erp
rod
ucer核心模型Envelopeconsumerproduce14核心模型Envelopeconsumerproduce核心模型}Envelopee=
…;//OpenEnvelopeCustomercustomer=
e.get(Customer.class);ProducerCustomercustomer=
…;//Sealin
envelopeEnvelopee=factory.newEnvelope();e.set(Customer.class,customer);ConsumerEnvelopeAPIpublicinterfaceEnvelopeextendsSerializable{public<T>voidset(Class<T>clazz,To);public<T>voidset(T
o);public<T>Tget(Class<T>clazz);public<T>T
get();…核心模型}Envelopee=…;//OpenEn15核心模型}Envelopee=…;//OpenEn核心模型Shapes
(定義數(shù)據(jù)類型)SimpleListMapStructure核心模型Shapes(定義數(shù)據(jù)類型)16核心模型Shapes(定義數(shù)據(jù)類型)核心模型Shapes核心模型Traits
(定義Shaps的行為)<pattern
target=“l(fā)ocation”><regex
value=“[0-9]{5}(?:\-[0-9]{4})?”/></pattern><string
name=“l(fā)ocation”/>核心模型Traits(定義Shaps的行為)<patter17核心模型Traits(定義Shaps的行為)<patter核心模型S
h
ap
eTraits/E
n
velo
p
e1**1**1S
h
ap
eS
im
p
leC
o
m
p
lexS
erviceTraitsId
em
p
o
ten
tTraitsE
xcep
tio
nTraitsF
au
ltTraitsJavaTraitsE
n
u
mTraitsS
erviceO
p
eratio
n1*In
p
u
tO
u
tp
u
tE
rro
rs1*0..10..1核心模型/Envelope1**1**1Idem18核心模型/Envelope1**1**1Idem服務(wù)處理實(shí)現(xiàn)HandlersOrchestratorActivityEndpointClientActivityTransportProtocol服務(wù)處理實(shí)現(xiàn)HandlersOrchestratorActi19服務(wù)處理實(shí)現(xiàn)HandlersOrchestratorActi插件式EndPointNettyJettyAMPOrchestratorTomcatActivityEndpointClientHTTP/RPCONE
WAY插件式EndPointNettyJettyAMPOrches20插件式EndPointNettyJettyAMPOrchesOrchestrator重用HandlersOrchestratorTransportProtocolHandlersOrchestratorEndpointINTERNETProtocolTransportOrchestrator重用HandlersOrchestr21Orchestrator重用HandlersOrchestr集成測(cè)試HandlersOrchestratorClientInterfaceMock
TransportProtocolHandlersOrchestratorMockEndpointActivityProtocolTransport集成測(cè)試HandlersOrchestratorClient22集成測(cè)試HandlersOrchestratorClient服務(wù)處理責(zé)任鏈Business
Logic服務(wù)處理責(zé)任鏈BusinessLogic23服務(wù)處理責(zé)任鏈BusinessLogic服務(wù)處理責(zé)任鏈Bu編寫(xiě)并配置服務(wù)<beanid="ochestrator"
class="cn.rongcapital.msp.service.helper.OchestratorHelper"><constructor-arg><ref
bean="handlerChain"/></constructor-arg></bean><beanid="handlerChain"
class="cn.rongcapital.msp.service.helper.ChainHelper"><properties><list><bean
class="cn.rongcapital.msp.service.HttpHandler"/><bean
class="cn.rongcapital.msp.service.PintHandler"/><bean
class="cn.rongcapital.msp.service.ThrottlingHandler"/></list></properties></bean><beanid="server"
class="cn.rongcapital.msp.service.server.UndertowServer"><constructor-arg><beanclass="cn.rongcapital.msp.service.EndpoingConfig"><propertyname="metricsFactory"
ref="metricsFactory"/><propertyname="ochestrator"
ref="ochestrator"/><propertyname="uri"
ref=":8080"/></bean></constructor-arg></bean>編寫(xiě)并配置服務(wù)<beanid="ochestrator"24編寫(xiě)并配置服務(wù)<beanid="ochestrator"Spring
Cloud遵循12
Factors模式Configuration
ManagementService
discoveryCircuitbreakersIntelligent
routingControlbusOne-timetokensGloballocksLeadership
electionDistributed
sessionsSpringCloud遵循12Factors25SpringCloud遵循12FactorsSpring配置管理配置信息統(tǒng)一管理提供RESTfulAPI配置信息允許動(dòng)態(tài)變更支持多種數(shù)據(jù)類型的配置內(nèi)容分級(jí)配置將配置分為多個(gè)層級(jí):全局、系統(tǒng)、應(yīng)用、階段最終的配置集合,是所有層級(jí)的配置的并集同名的配置,末端會(huì)覆蓋上層的配置(可配置)版本控制配置項(xiàng)和配置集合具有版本信息,發(fā)生變更后會(huì)保留歷史記錄配置集合可以隨時(shí)回退到歷史版本配置變更主動(dòng)通知客戶端訂閱配置變更信息,在配置發(fā)生變更后會(huì)立即收到通知和新的配置集合客戶端與應(yīng)用程序集成集成spring-boot提供接口,允許在運(yùn)行期間動(dòng)態(tài)獲取配置本地存儲(chǔ)在客戶端本地保存當(dāng)前配置,保證應(yīng)用程序在不能訪問(wèn)Repository下也可以運(yùn)行充分抽象,允許多實(shí)現(xiàn)配置信息可以保存在數(shù)據(jù)庫(kù)里,也可以保存在NoSQL里Repository可以使用Zookeeper或Redis等,也可以自行編寫(xiě)允許自定義配置信息的序列化方式,默認(rèn)使用
JDK
的序列化方式配置管理配置信息統(tǒng)一管理26配置管理配置信息統(tǒng)一管理配置管理配置信息統(tǒng)一管理26ZuulLoad
balancerLoad
balancerLoad
balancerZuulZuulZuulA
uth
S
erviceZuulLoadbalancerLoadbalancer27ZuulLoadbalancerLoadbalancer服務(wù)發(fā)現(xiàn):
Eureka
ServerEureka
client會(huì)緩存服Eureka
server的注冊(cè)信Eureka的注冊(cè)只針對(duì)ap服務(wù)每隔30秒向Eureka如果在15分鐘內(nèi)有85%Eureka
Server之間的數(shù)務(wù)注冊(cè)信息;息只存儲(chǔ)在內(nèi)存中;plication級(jí)別,不支持更細(xì)粒度的服務(wù)注冊(cè),比如單個(gè)rest;Server發(fā)送心跳,不建議修改心跳時(shí)間,Eureka用這個(gè)時(shí)間來(lái)判斷集群內(nèi)是否出現(xiàn)大范圍通信異常;的服務(wù)沒(méi)有被續(xù)約,則Eureka
Server停止移除已注冊(cè)的服務(wù),以保護(hù)已經(jīng)注冊(cè)的服務(wù)信息不丟失;據(jù)同步,采用全量拉取,增量同步的方式? Zookeeper–
CP? Etcd–
CP,DNS? Eureka-
AP服務(wù)發(fā)現(xiàn):EurekaServerEurekaclie28服務(wù)發(fā)現(xiàn):EurekaServerEurekaclieRibbonLoad
B
alancerLoad
balancerLoad
balancerLoad
balancer,策略名策略描述實(shí)現(xiàn)說(shuō)明BestAvailableRule選擇一個(gè)最小的并發(fā)請(qǐng)求的server逐個(gè)考察Server,如果Server被tripped了,則忽略,在選擇其中ActiveRequestsCount最小的server。AvailabilityFilteringRule過(guò)濾掉那些因?yàn)橐恢边B接失敗的被標(biāo)記為circuit
tripped的后端server,并過(guò)濾掉那些高并發(fā)的的后端server(active
connections
超過(guò)配置的閾值)使用一個(gè)AvailabilityPredicate來(lái)包含過(guò)濾server的邏輯,其實(shí)就就是檢查status里記錄的各個(gè)server的運(yùn)行狀態(tài)WeightedResponseTimeRule根據(jù)響應(yīng)時(shí)間分配一個(gè)weight,響應(yīng)時(shí)間越長(zhǎng),weight越小,被選中的可能性越低。一個(gè)后臺(tái)線程定期的從status里面讀取評(píng)價(jià)響應(yīng)時(shí)間為每個(gè)server計(jì)算一個(gè)weight。當(dāng)剛開(kāi)始運(yùn)行,沒(méi)有形成statas時(shí),使用roubine策略選擇server。RetryRule對(duì)選定的負(fù)載均衡策略機(jī)上重試機(jī)制。在一個(gè)配置時(shí)間段內(nèi)當(dāng)選擇server不成功,則一直嘗試使用subRule的方式選擇一個(gè)可用的server使用舉例:IRulerule=newRetryRule(newRoundRobinRule(),
200);
200表示retry的時(shí)間間隔RoundRobinRuleroundRobin方式輪詢選擇server輪詢index,選擇index對(duì)應(yīng)位置的serverRandomRule隨機(jī)選擇一個(gè)server在index上隨機(jī),選擇index對(duì)應(yīng)位置的serverZoneAvoidanceRule復(fù)合判斷server所在區(qū)域的性能和server的可用性選擇server使用ZoneAvoidancePredicate和AvailabilityPredicate來(lái)判斷是否選擇某個(gè)server,前一個(gè)判斷判定一個(gè)zone的運(yùn)行性能是否可用,剔除不可用的zone(的所有server),AvailabilityPredicate用于過(guò)濾掉連接數(shù)過(guò)多的Server。擴(kuò)展點(diǎn):自定義負(fù)載均衡策略:=myclientmyclient.ribbon.NFLoadBalancerClassName=均衡器類名myclient.ribbon.NFLoadBalancerRuleClassName=均衡策略類名RibbonLoadBalancerLoadbalan29RibbonLoadBalancerLoadbalan熔斷器:HystrixHystrix核心由RxJava驅(qū)動(dòng),是一個(gè)基于觀察者模式的事件回調(diào)庫(kù);Hyxtrix的核心處理邏輯是將調(diào)用包裝成Command,將對(duì)依賴的調(diào)用轉(zhuǎn)換成Command
API調(diào)用;circuitBreaker.allowRequest()判定熔斷是否開(kāi)啟;Hystrix熔斷器本質(zhì)是一組狀態(tài)機(jī),是fast-fail設(shè)計(jì)思想的體現(xiàn);處理請(qǐng)求時(shí)判定熔斷器是否開(kāi)啟,開(kāi)啟使用備選方案(如定義的fallback方法)往下執(zhí)行,未開(kāi)啟按正常邏輯執(zhí)行;熔斷器依賴metrics收集的health指標(biāo),對(duì)錯(cuò)誤請(qǐng)求數(shù)及錯(cuò)誤百分比進(jìn)行條件判定。circuit-b
reaker
op
en?room
in
thread
p
ool?run()
successshort-circuitedthread
p
oolrejectedsuccessfailuretim
eoutfalb
ack
im
p
lem
ented
?falb
ack
sem
ap
horeat
cap
acity?getFalb
ack()succeed
s?short-circuitedthread
p
oolrejectedsuccessfailureNNNNNNYYYYYY熔斷器:HystrixHystrix核心由RxJava驅(qū)動(dòng),30熔斷器:HystrixHystrix核心由RxJava驅(qū)動(dòng),HystrixUI&TurbineNetflix通過(guò)turbine聚合Hystrix的監(jiān)控流信息Hystirx的dashboard監(jiān)控信息只支持實(shí)時(shí)監(jiān)控Netflix內(nèi)部會(huì)把收集到的數(shù)據(jù)寫(xiě)入到Atlas系統(tǒng),我們通過(guò)Kafka
+
ELK收集和存儲(chǔ)HystrixUI&TurbineNetflix通過(guò)t31HystrixUI&TurbineNetflix通過(guò)t服務(wù)端治理LBZuulA
uth
S
erviceAAuuthth
S
SeervrviciceeA
uth
S
erviceQ
Aueurtyh
S
erviceCommandAAuSutehthr
vS
SiecerevrviciceeEureka
ServerClientsVirtual
IP
/H
ostnam
eb
indLBZuulb
ind服務(wù)端治理LBZuulAuthServiceAAuut32服務(wù)端治理LBZuulAuthServiceAAuutAgenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)融數(shù)微服務(wù)架構(gòu)的核心概念和實(shí)現(xiàn)融數(shù)DevOps平臺(tái)對(duì)微服務(wù)的支撐技術(shù)團(tuán)隊(duì)的組織OperationExcellentAgenda談?wù)勎⒎?wù)33Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)33部署概念的抽象S
ervice*******1*1包是部署最小單位服務(wù)組件由包、配置組成環(huán)境包含服務(wù)組件以及運(yùn)行它所依賴的Host或者Host
Group有版本才能回滾部署概念的抽象Service*******1*1包是部34部署概念的抽象Service*******1*1包是部服務(wù)的部署服務(wù)組件
=(可運(yùn)行代碼
+
配置)
&(依賴+
配置)&(基礎(chǔ)設(shè)施+
配置)V
M
/D
ocker)S
ervice*******1*1V
M
/D
ocker)V
M
/D
ocker)服務(wù)的部署服務(wù)組件=VM/Docker)Servi35服務(wù)的部署服務(wù)組件=VM/Docker)Servi基于Spring-Cloud和Netflix的微課件36基于Spring-Cloud和Netflix的微課件36DevOps總體架構(gòu)GitLibp
ulingnotifyp
ulingb
ind
vipnotifyDevOps總體架構(gòu)GitLibpulingnotifyp37DevOps總體架構(gòu)GitLibpulingnotifypAgenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)融數(shù)微服務(wù)架構(gòu)的核心概念和實(shí)現(xiàn)融數(shù)DevOps平臺(tái)對(duì)微服務(wù)的支撐技術(shù)團(tuán)隊(duì)的組織OperationExcellentAgenda談?wù)勎⒎?wù)38Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)38技術(shù)團(tuán)隊(duì)組織
–
小團(tuán)隊(duì)康威定律Two-Pizza
Team團(tuán)隊(duì)成員以7+/-2人為最佳,團(tuán)隊(duì)成員水平相當(dāng)保持團(tuán)隊(duì)規(guī)模在個(gè)位數(shù),如果超過(guò),拆分團(tuán)隊(duì)魔數(shù)團(tuán)隊(duì)成員能夠近距離的溝通,增進(jìn)彼此的了解干杯規(guī)則團(tuán)隊(duì)成員能夠非常清楚的了解團(tuán)隊(duì)的目標(biāo)以及其他團(tuán)隊(duì)成員的工作團(tuán)隊(duì)信息透明化鼓勵(lì)創(chuàng)新和自治,團(tuán)隊(duì)自己決定使用的技術(shù),鼓勵(lì)團(tuán)隊(duì)間的技術(shù)競(jìng)爭(zhēng)勝出的團(tuán)隊(duì)的方案會(huì)被基礎(chǔ)架構(gòu)部門(mén)采納并全公司推廣去中心化技術(shù)團(tuán)隊(duì)組織–小團(tuán)隊(duì)康威定律團(tuán)隊(duì)成員以7+/-2人為最佳39技術(shù)團(tuán)隊(duì)組織–小團(tuán)隊(duì)康威定律團(tuán)隊(duì)成員以7+/-2人為最佳技術(shù)團(tuán)隊(duì)組織
–
團(tuán)隊(duì)劃分技術(shù)團(tuán)隊(duì)組織–團(tuán)隊(duì)劃分40技術(shù)團(tuán)隊(duì)組織–團(tuán)隊(duì)劃分技術(shù)團(tuán)隊(duì)組織–團(tuán)隊(duì)劃分40技術(shù)團(tuán)隊(duì)組織
–
團(tuán)隊(duì)間合作技術(shù)團(tuán)隊(duì)組織–團(tuán)隊(duì)間合作41技術(shù)團(tuán)隊(duì)組織–團(tuán)隊(duì)間合作技術(shù)團(tuán)隊(duì)組織–團(tuán)隊(duì)間合作41技術(shù)團(tuán)隊(duì)組織
–
結(jié)果導(dǎo)向主人翁意識(shí)(Ownership)行動(dòng)力(BiasforAction)吃自己的狗糧(Eatyourdog
food)工程師負(fù)責(zé)從需求調(diào)研、設(shè)計(jì)、開(kāi)發(fā)、測(cè)試、部署、維護(hù)、監(jiān)控、功能升級(jí)等一系列的工作,也就是說(shuō)軟件工程師負(fù)責(zé)應(yīng)用或者服務(wù)的全生命周期的所有工作運(yùn)維是團(tuán)隊(duì)成員的第一要?jiǎng)?wù),在強(qiáng)大的自動(dòng)化運(yùn)維工具的支撐下,軟件工程師必須負(fù)責(zé)服務(wù)或者應(yīng)用的SLA讓開(kāi)發(fā)人員參與架構(gòu)設(shè)計(jì),而不是架構(gòu)師參與開(kāi)發(fā)技術(shù)團(tuán)隊(duì)組織–結(jié)果導(dǎo)向主人翁意識(shí)(Ownership)42技術(shù)團(tuán)隊(duì)組織–結(jié)果導(dǎo)向主人翁意識(shí)(Ownership)技Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)融數(shù)微服務(wù)架構(gòu)的核心概念和實(shí)現(xiàn)融數(shù)DevOps平臺(tái)對(duì)微服務(wù)的支撐技術(shù)團(tuán)隊(duì)的組織OperationExcellentAgenda談?wù)勎⒎?wù)43Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)43傳統(tǒng)的運(yùn)維流程傳統(tǒng)的運(yùn)維流程44傳統(tǒng)的運(yùn)維流程傳統(tǒng)的運(yùn)維流程44傳統(tǒng)的運(yùn)維流程如何定位問(wèn)題如何定位人員時(shí)效性監(jiān)控自動(dòng)化問(wèn)題反饋一旦發(fā)現(xiàn)問(wèn)題,我們希望能夠迅速定位并安排相應(yīng)的業(yè)務(wù)和開(kāi)發(fā)人員及時(shí)跟進(jìn),直到問(wèn)題解決傳統(tǒng)的運(yùn)維流程如何定位問(wèn)題一旦發(fā)現(xiàn)問(wèn)題,我們希望能夠迅速定位45傳統(tǒng)的運(yùn)維流程如何定位問(wèn)題一旦發(fā)現(xiàn)問(wèn)題,我們希望能夠迅速定位新的運(yùn)維機(jī)制C
TIC
TIR
esolve
G
roupO
nC
al***1新的運(yùn)維機(jī)制CTICTIResolveGroupO46新的運(yùn)維機(jī)制CTICTIResolveGroupOOperation
Excellent/業(yè)務(wù)驅(qū)動(dòng)改進(jìn)研發(fā)經(jīng)理監(jiān)控Sev1&
Sev2每周分析COEOperationExcellent/業(yè)務(wù)驅(qū)動(dòng)改進(jìn)47OperationExcellent/業(yè)務(wù)驅(qū)動(dòng)改進(jìn)Oper謝謝!謝謝!48謝謝!謝謝!48基于SpringCloud和Netflix的微服務(wù)技術(shù)架構(gòu)基于Spring
Cloud和Netflix打造基于SpringCloud和Netflix的微服務(wù)技術(shù)架構(gòu)49基于SpringCloud和Netflix的微服務(wù)技術(shù)架構(gòu)Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)融數(shù)微服務(wù)架構(gòu)的核心概念和實(shí)現(xiàn)融數(shù)DevOps平臺(tái)對(duì)微服務(wù)的支撐技術(shù)團(tuán)隊(duì)的組織OperationExcellentAgenda談?wù)勎⒎?wù)50Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)50Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)融數(shù)微服務(wù)架構(gòu)的核心概念和實(shí)現(xiàn)融數(shù)DevOps平臺(tái)對(duì)微服務(wù)的支撐技術(shù)團(tuán)隊(duì)的組織OperationExcellentAgenda談?wù)勎⒎?wù)51Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)51從微服務(wù)的概念談起高度封裝松耦合獨(dú)立部署獨(dú)立擴(kuò)展應(yīng)用組件從微服務(wù)的概念談起高度封裝松耦合獨(dú)立部署獨(dú)立擴(kuò)展應(yīng)用組件52從微服務(wù)的概念談起高度封裝松耦合獨(dú)立部署獨(dú)立擴(kuò)展應(yīng)用組件從微微服務(wù)與SOA的異同從設(shè)計(jì)原則來(lái)講,微服務(wù)架構(gòu)遵循SOAprinciples小的、可重用的服務(wù)并不一定是微服務(wù),微服務(wù)架構(gòu)強(qiáng)調(diào)敏捷、獨(dú)立開(kāi)發(fā)、獨(dú)立部署、獨(dú)立擴(kuò)展,重用在某種程度上范圍影響敏捷性微服務(wù)架構(gòu)為了實(shí)現(xiàn)其敏捷特性,在SOA約束的基礎(chǔ)之上又添加了新的約束微服務(wù)之間不能互相依賴,因此要求微服務(wù)能夠獨(dú)立部署,獨(dú)立擴(kuò)展,微服務(wù)之間的依賴越少越好一個(gè)應(yīng)用只做一件事不要為外部應(yīng)用發(fā)布API,依賴通過(guò)service或者事件搞定最好通過(guò)異步事件交互每個(gè)應(yīng)用擁有自己獨(dú)立的數(shù)據(jù)微服務(wù)與SOA的異同從設(shè)計(jì)原則來(lái)講,微服務(wù)架構(gòu)遵循SOAp53微服務(wù)與SOA的異同從設(shè)計(jì)原則來(lái)講,微服務(wù)架構(gòu)遵循SOAp采用微服務(wù)需要的一些前提條件沒(méi)有銀彈!微服務(wù)將單體應(yīng)用中的復(fù)雜性轉(zhuǎn)移到了應(yīng)用組件之間微服務(wù)粒度問(wèn)題:如果粒度太細(xì),就需要一個(gè)編排服務(wù),其實(shí)退回到了小型的SOA架構(gòu)如果服務(wù)粒度過(guò)粗,就不利于獨(dú)立部署采用微服務(wù)之前,需要考慮如下幾點(diǎn)微服務(wù)架構(gòu)基礎(chǔ)組件:服務(wù)路由服務(wù)注冊(cè)和發(fā)現(xiàn)配置服務(wù)監(jiān)控事件溯源(event
sourcing)框架團(tuán)隊(duì)的敏捷成熟的如何,是否有足夠的DevOps經(jīng)驗(yàn)團(tuán)隊(duì)的數(shù)據(jù)管理方式是否滿足微服務(wù)的要求團(tuán)隊(duì)是否有非常強(qiáng)的架構(gòu)實(shí)踐能力采用微服務(wù)需要的一些前提條件沒(méi)有銀彈!微服務(wù)將單體應(yīng)用中的復(fù)54采用微服務(wù)需要的一些前提條件沒(méi)有銀彈!微服務(wù)將單體應(yīng)用中的復(fù)Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)融數(shù)微服務(wù)架構(gòu)的核心概念和實(shí)現(xiàn)融數(shù)DevOps平臺(tái)對(duì)微服務(wù)的支撐技術(shù)團(tuán)隊(duì)的組織OperationExcellentAgenda談?wù)勎⒎?wù)55Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)55微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)技術(shù)選型的考慮點(diǎn)社區(qū)熱度文檔多坑少比較容易找到人架構(gòu)成熟度方便開(kāi)發(fā)方便遷移多協(xié)議支持多語(yǔ)言支持學(xué)習(xí)曲線基于成熟技術(shù)現(xiàn)有知識(shí)傳承可維護(hù)性監(jiān)控能力運(yùn)維能力微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)技術(shù)選型的考慮點(diǎn)社區(qū)熱度文檔多架56微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)技術(shù)選型的考慮點(diǎn)社區(qū)熱度文檔多架微服務(wù)技術(shù)選型過(guò)程功能點(diǎn)/服務(wù)框架備選方案Netflix/Spring
cloudMotangRPCThriftDubbo/DubboX功能定位完整的微服務(wù)框架RPC框架,但整合了ZK或Consul,實(shí)現(xiàn)集群環(huán)境的基本的服務(wù)注冊(cè)/發(fā)現(xiàn)RPC框架RPC框架服務(wù)框架支持Rest是Ribbon支持多種可插拔的序列化選擇否否否否支持RPC否是(Hession2)是是是支持多語(yǔ)言是(Rest形式)?否是是否服務(wù)注冊(cè)/發(fā)現(xiàn)是(Eureka)Eureka服務(wù)注冊(cè)表,Karyon服務(wù)端框架支持服務(wù)自注冊(cè)和健康檢查是(zookeeper/consul)否否是負(fù)載均衡是(服務(wù)端zuul+客戶端Ribbon)Zuul-服務(wù),動(dòng)態(tài)路由云端負(fù)載均衡
Eureka(針對(duì)中間層服務(wù)器)是(客戶端)否否是(客戶端)配置服務(wù)Netflix
ArchaiusSpring
cloud
Config
Server
集中配置是(zookeeper提供)否否否服務(wù)調(diào)用鏈監(jiān)控是(zuul)Zuul提供邊緣服務(wù),API網(wǎng)關(guān)否否否否高可用/容錯(cuò)是(服務(wù)端Hystrix+客戶端Ribbon)是(客戶端)否否是(客戶端)典型應(yīng)用案例NetflixSinaGoogleFacebook社區(qū)活躍程度高一般高一般已經(jīng)不維護(hù)了學(xué)習(xí)難度中等低高高低文檔豐富度高一般一般一般高其他Spring
Cloud
Bus為我們的應(yīng)用程支持降級(jí)Netflix內(nèi)部在開(kāi)發(fā)集成gRPCIDL定義實(shí)踐的公司比較多微服務(wù)技術(shù)選型過(guò)程功能點(diǎn)/服務(wù)框架備選方案Netflix/S57微服務(wù)技術(shù)選型過(guò)程功能點(diǎn)/服務(wù)框架備選方案Netflix/S微服務(wù)技術(shù)選型過(guò)程目前團(tuán)隊(duì)主要采用Spring
Boot
+
RestEasy的方式實(shí)現(xiàn)服務(wù)化首先支持rest現(xiàn)有業(yè)務(wù)代碼的遷移不希望改動(dòng)太大小團(tuán)隊(duì),希望能夠有一個(gè)比較全面的解決方案結(jié)論Netflix提供了比較全面的解決方案Spring
Cloud對(duì)于Netflix的封裝比較全面Spring
Cloud基于Spring
Boot,團(tuán)隊(duì)有基礎(chǔ)Spring
Cloud提供了Control
Bus能夠幫助實(shí)現(xiàn)監(jiān)控埋點(diǎn)業(yè)務(wù)應(yīng)用部署在阿里云,Spring
Cloud對(duì)12factors以及Cloud-Native的支持,有利于在云環(huán)境下使用微服務(wù)技術(shù)選型過(guò)程目前團(tuán)隊(duì)主要采用SpringBoot+58微服務(wù)技術(shù)選型過(guò)程目前團(tuán)隊(duì)主要采用SpringBoot+Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)融數(shù)微服務(wù)架構(gòu)的核心概念和實(shí)現(xiàn)融數(shù)DevOps平臺(tái)對(duì)微服務(wù)的支撐技術(shù)團(tuán)隊(duì)的組織OperationExcellentAgenda談?wù)勎⒎?wù)59Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)59微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)簡(jiǎn)化開(kāi)發(fā)調(diào)用方便高性能可用性和安全方便使用,節(jié)約時(shí)間代碼生成Migration
tools膠水方便測(cè)試clientsexplorer文檔柔性設(shè)計(jì)多協(xié)議支持,方便新協(xié)議添加CachingContinuationsmetricsthrottlingload
sheddingauthentication微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)簡(jiǎn)化開(kāi)發(fā)調(diào)用方便高性能可用性和安60微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)簡(jiǎn)化開(kāi)發(fā)調(diào)用方便高性能可用性和安Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過(guò)程微服務(wù)架構(gòu)設(shè)計(jì)的一些思考點(diǎn)融數(shù)微服務(wù)架構(gòu)的核心概念和實(shí)現(xiàn)融數(shù)DevOps平臺(tái)對(duì)微服務(wù)的支撐技術(shù)團(tuán)隊(duì)的組織OperationExcellentAgenda談?wù)勎⒎?wù)61Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)61核心模型Envelopeconsum
erp
rod
ucer核心模型Envelopeconsumerproduce62核心模型Envelopeconsumerproduce核心模型}Envelopee=
…;//OpenEnvelopeCustomercustomer=
e.get(Customer.class);ProducerCustomercustomer=
…;//Sealin
envelopeEnvelopee=factory.newEnvelope();e.set(Customer.class,customer);ConsumerEnvelopeAPIpublicinterfaceEnvelopeextendsSerializable{public<T>voidset(Class<T>clazz,To);public<T>voidset(T
o);public<T>Tget(Class<T>clazz);public<T>T
get();…核心模型}Envelopee=…;//OpenEn63核心模型}Envelopee=…;//OpenEn核心模型Shapes
(定義數(shù)據(jù)類型)SimpleListMapStructure核心模型Shapes(定義數(shù)據(jù)類型)64核心模型Shapes(定義數(shù)據(jù)類型)核心模型Shapes核心模型Traits
(定義Shaps的行為)<pattern
target=“l(fā)ocation”><regex
value=“[0-9]{5}(?:\-[0-9]{4})?”/></pattern><string
name=“l(fā)ocation”/>核心模型Traits(定義Shaps的行為)<patter65核心模型Traits(定義Shaps的行為)<patter核心模型S
h
ap
eTraits/E
n
velo
p
e1**1**1S
h
ap
eS
im
p
leC
o
m
p
lexS
erviceTraitsId
em
p
o
ten
tTraitsE
xcep
tio
nTraitsF
au
ltTraitsJavaTraitsE
n
u
mTraitsS
erviceO
p
eratio
n1*In
p
u
tO
u
tp
u
tE
rro
rs1*0..10..1核心模型/Envelope1**1**1Idem66核心模型/Envelope1**1**1Idem服務(wù)處理實(shí)現(xiàn)HandlersOrchestratorActivityEndpointClientActivityTransportProtocol服務(wù)處理實(shí)現(xiàn)HandlersOrchestratorActi67服務(wù)處理實(shí)現(xiàn)HandlersOrchestratorActi插件式EndPointNettyJettyAMPOrchestratorTomcatActivityEndpointClientHTTP/RPCONE
WAY插件式EndPointNettyJettyAMPOrches68插件式EndPointNettyJettyAMPOrchesOrchestrator重用HandlersOrchestratorTransportProtocolHandlersOrchestratorEndpointINTERNETProtocolTransportOrchestrator重用HandlersOrchestr69Orchestrator重用HandlersOrchestr集成測(cè)試HandlersOrchestratorClientInterfaceMock
TransportProtocolHandlersOrchestratorMockEndpointActivityProtocolTransport集成測(cè)試HandlersOrchestratorClient70集成測(cè)試HandlersOrchestratorClient服務(wù)處理責(zé)任鏈Business
Logic服務(wù)處理責(zé)任鏈BusinessLogic71服務(wù)處理責(zé)任鏈BusinessLogic服務(wù)處理責(zé)任鏈Bu編寫(xiě)并配置服務(wù)<beanid="ochestrator"
class="cn.rongcapital.msp.service.helper.OchestratorHelper"><constructor-arg><ref
bean="handlerChain"/></constructor-arg></bean><beanid="handlerChain"
class="cn.rongcapital.msp.service.helper.ChainHelper"><properties><list><bean
class="cn.rongcapital.msp.service.HttpHandler"/><bean
class="cn.rongcapital.msp.service.PintHandler"/><bean
class="cn.rongcapital.msp.service.ThrottlingHandler"/></list></properties></bean><beanid="server"
class="cn.rongcapital.msp.service.server.UndertowServer"><constructor-arg><beanclass="cn.rongcapital.msp.service.EndpoingConfig"><propertyname="metricsFactory"
ref="metricsFactory"/><propertyname="ochestrator"
ref="ochestrator"/><propertyname="uri"
ref=":8080"/></bean></constructor-arg></bean>編寫(xiě)并配置服務(wù)<beanid="ochestrator"72編寫(xiě)并配置服務(wù)<beanid="ochestrator"Spring
Cloud遵循12
Factors模式Configuration
ManagementService
discoveryCircuitbreakersIntelligent
routingControlbusOne-timetokensGloballocksLeadership
electionDistributed
sessionsSpringCloud遵循12Factors73SpringCloud遵循12FactorsSpring配置管理配置信息統(tǒng)一管理提供RESTfulAPI配置信息允許動(dòng)態(tài)變更支持多種數(shù)據(jù)類型的配置內(nèi)容分級(jí)配置將配置分為多個(gè)層級(jí):全局、系統(tǒng)、應(yīng)用、階段最終的配置集合,是所有層級(jí)的配置的并集同名的配置,末端會(huì)覆蓋上層的配置(可配置)版本控制配置項(xiàng)和配置集合具有版本信息,發(fā)生變更后會(huì)保留歷史記錄配置集合可以隨時(shí)回退到歷史版本配置變更主動(dòng)通知客戶端訂閱配置變更信息,在配置發(fā)生變更后會(huì)立即收到通知和新的配置集合客戶端與應(yīng)用程序集成集成spring-boot提供接口,允許在運(yùn)行期間動(dòng)態(tài)獲取配置本地存儲(chǔ)在客戶端本地保存當(dāng)前配置,保證應(yīng)用程序在不能訪問(wèn)Repository下也可以運(yùn)行充分抽象,允許多實(shí)現(xiàn)配置信息可以保存在數(shù)據(jù)庫(kù)里,也可以保存在NoSQL里Repository可以使用Zookeeper或Redis等,也可以自行編寫(xiě)允許自定義配置信息的序列化方式,默認(rèn)使用
JDK
的序列化方式配置管理配置信息統(tǒng)一管理74配置管理配置信息統(tǒng)一管理配置管理配置信息統(tǒng)一管理74ZuulLoad
balancerLoad
balancerLoad
balancerZuulZuulZuulA
uth
S
erviceZuulLoadbalancerLoadbalancer75ZuulLoadbalancerLoadbalancer服務(wù)發(fā)現(xiàn):
Eureka
ServerEureka
client會(huì)緩存服Eureka
server的注冊(cè)信Eureka的注冊(cè)只針對(duì)ap服務(wù)每隔30秒向Eureka如果在15分鐘內(nèi)有85%Eureka
Server之間的數(shù)務(wù)注冊(cè)信息;息只存儲(chǔ)在內(nèi)存中;plication級(jí)別,不支持更細(xì)粒度的服務(wù)注冊(cè),比如單個(gè)rest;Server發(fā)送心跳,不建議修改心跳時(shí)間,Eureka用這個(gè)時(shí)間來(lái)判斷集群內(nèi)是否出現(xiàn)大范圍通信異常;的服務(wù)沒(méi)有被續(xù)約,則Eureka
Server停止移除已注冊(cè)的服務(wù),以保護(hù)已經(jīng)注冊(cè)的服務(wù)信息不丟失;據(jù)同步,采用全量拉取,增量同步的方式? Zookeeper–
CP? Etcd–
CP,DNS? Eureka-
AP服務(wù)發(fā)現(xiàn):EurekaServerEurekaclie76服務(wù)發(fā)現(xiàn):EurekaServerEurekaclieRibbonLoad
B
alancerLoad
balancerLoad
balancerLoad
balancer,策略名策略描述實(shí)現(xiàn)說(shuō)明BestAvailableRule選擇一個(gè)最小的并發(fā)請(qǐng)求的server逐個(gè)考察Server,如果Server被tripped了,則忽略,在選擇其中ActiveRequestsCount最小的server。AvailabilityFilteringRule過(guò)濾掉那些因?yàn)橐恢边B接失敗的被標(biāo)記為circuit
tripped的后端server,并過(guò)濾掉那些高并發(fā)的的后端server(active
connections
超過(guò)配置的閾值)使用一個(gè)AvailabilityPredicate來(lái)包含過(guò)濾server的邏輯,其實(shí)就就是檢查status里記錄的各個(gè)server的運(yùn)行狀態(tài)WeightedResponseTimeRule根據(jù)響應(yīng)時(shí)間分配一個(gè)weight,響應(yīng)時(shí)間越長(zhǎng),weight越小,被選中的可能性越低。一個(gè)后臺(tái)線程定期的從status里面讀取評(píng)價(jià)響應(yīng)時(shí)間為每個(gè)server計(jì)算一個(gè)weight。當(dāng)剛開(kāi)始運(yùn)行,沒(méi)有形成statas時(shí),使用roubine策略選擇server。RetryRule對(duì)選定的負(fù)載均衡策略機(jī)上重試機(jī)制。在一個(gè)配置時(shí)間段內(nèi)當(dāng)選擇server不成功,則一直嘗試使用subRule的方式選擇一個(gè)可用的server使用舉例:IRulerule=newRetryRule(newRoundRobinRule(),
200);
200表示retry的時(shí)間間隔RoundRobinRuleroundRobin方式輪詢選擇server輪詢index,選擇index對(duì)應(yīng)位置的serverRandomRule隨機(jī)選擇一個(gè)server在index上隨機(jī),選擇index對(duì)應(yīng)位置的serverZoneAvoidanceRule復(fù)合判斷server所在區(qū)域的性能和server的可用性選擇server使用ZoneAvoidancePredicate和AvailabilityPredicate來(lái)判斷是否選擇某個(gè)server,前一個(gè)判斷判定一個(gè)zone的運(yùn)行性能是否可用,剔除不可用的zone(的所有server),AvailabilityPredicate用于過(guò)濾掉連接數(shù)過(guò)多的Server。擴(kuò)展點(diǎn):自定義負(fù)載均衡策略:=myclientmyclient.ribbon.NFLoadBalancerClassName=均衡器類名myclient.ribbon.NFLoadBalancerRuleClassName=均衡策略類名RibbonLoadBalancerLoadbalan77RibbonLoadBalancerLoadbalan熔斷器:HystrixHystrix核心由RxJava驅(qū)動(dòng),是一個(gè)基于觀察者模式的事件回調(diào)庫(kù);Hyxtrix的核心處理邏輯是將調(diào)用包裝成Command,將對(duì)依賴的調(diào)用轉(zhuǎn)換成Command
API調(diào)用;circuitBreaker.allowRequest()判定熔斷是否開(kāi)啟;Hystrix熔斷器本質(zhì)是一組狀態(tài)機(jī),是fast-fail設(shè)計(jì)思想的體現(xiàn);處理請(qǐng)求時(shí)判定熔斷器是否開(kāi)啟,開(kāi)啟使用備選方案(如定義的fallback方法)往下執(zhí)行,未開(kāi)啟按正常邏輯執(zhí)行;熔斷器依賴metrics收集的health指標(biāo),對(duì)錯(cuò)誤請(qǐng)求數(shù)及錯(cuò)誤百分比進(jìn)行條件判定。circuit-b
reaker
op
en?room
in
thread
p
ool?run()
successshort-circuitedthread
p
oolrejectedsuccessfailuretim
eoutfalb
ack
im
p
lem
ented
?falb
ack
sem
ap
horeat
cap
acity?getFalb
ack()succeed
s?short-circuitedthread
p
oolrejectedsuccessfailureNNNNNNYYYYYY熔斷器:HystrixHystrix核心由RxJava驅(qū)動(dòng),78熔斷器:HystrixHystrix核心由RxJava驅(qū)動(dòng),HystrixUI&TurbineNetflix通過(guò)turbine聚合Hystrix的監(jiān)控流信息Hystirx的dashboard監(jiān)控信息只支持實(shí)時(shí)監(jiān)控Netflix內(nèi)部會(huì)把收集到的數(shù)據(jù)寫(xiě)入到Atlas系統(tǒng),我們通過(guò)Kafka
+
ELK收集和存儲(chǔ)HystrixUI&TurbineNetflix通過(guò)t79HystrixUI&TurbineNetflix通過(guò)t服務(wù)端治理LBZuulA
uth
S
erviceAAuuthth
S
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度北京市養(yǎng)老機(jī)構(gòu)租賃合同電子版3篇
- 關(guān)于2025年度水利工程監(jiān)理合同范例3篇
- 2025農(nóng)村房屋未登記產(chǎn)權(quán)過(guò)戶合同
- 2024年中國(guó)白鐵風(fēng)管市場(chǎng)調(diào)查研究報(bào)告
- 2025年度農(nóng)村戶口分家協(xié)議書(shū)及財(cái)產(chǎn)分割執(zhí)行保障合同
- 二零二五年度高端建筑材料供應(yīng)合同3篇
- 2025年度金融資產(chǎn)清算及轉(zhuǎn)讓協(xié)議合同3篇
- 2025年度農(nóng)家樂(lè)房屋租賃及鄉(xiāng)村旅游開(kāi)發(fā)合同3篇
- 2024年中國(guó)激光切紙快速成型系統(tǒng)市場(chǎng)調(diào)查研究報(bào)告
- 2025年度棉花企業(yè)棉花銷(xiāo)售代理及運(yùn)輸服務(wù)合同3篇
- 高考英語(yǔ)一輪復(fù)習(xí)知識(shí)清單(全國(guó)版)專題06 語(yǔ)法填空倒裝句100題(精練) 含答案及解析
- 侵入性器械(操作)相關(guān)感染防控制度的落實(shí)
- 土方開(kāi)挖及周邊環(huán)境保護(hù)方案
- 2024年安徽省公務(wù)員錄用考試《行測(cè)》試題及答案解析
- 2024年度危廢培訓(xùn)完整課件
- 福建師范大學(xué)《教育學(xué)(含教師職業(yè)道德)》2023-2024學(xué)年第一學(xué)期期末試卷
- 蘋(píng)果三星專利之爭(zhēng)
- 人教版2024-2025學(xué)年六年級(jí)數(shù)學(xué)上冊(cè)5.4 扇形的面積 同步練習(xí)(附答案解析)
- 《Java程序設(shè)計(jì)應(yīng)用開(kāi)發(fā)》全套教學(xué)課件
- 學(xué)校食堂菜譜及定價(jià)方案
- 高考英語(yǔ)一輪復(fù)習(xí)英語(yǔ)語(yǔ)法專題復(fù)習(xí):時(shí)態(tài)和語(yǔ)態(tài)課件(共45張)
評(píng)論
0/150
提交評(píng)論