基于Spring-Cloud和Netflix的微課件_第1頁(yè)
基于Spring-Cloud和Netflix的微課件_第2頁(yè)
基于Spring-Cloud和Netflix的微課件_第3頁(yè)
基于Spring-Cloud和Netflix的微課件_第4頁(yè)
基于Spring-Cloud和Netflix的微課件_第5頁(yè)
已閱讀5頁(yè),還剩91頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論