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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

基于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ù)選型過程微服務(wù)架構(gòu)設(shè)計的一些思考點融數(shù)微服務(wù)架構(gòu)的核心概念和實現(xiàn)融數(shù)DevOps平臺對微服務(wù)的支撐技術(shù)團隊的組織OperationExcellentAgenda談?wù)勎⒎?wù)2Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)2Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過程微服務(wù)架構(gòu)設(shè)計的一些思考點融數(shù)微服務(wù)架構(gòu)的核心概念和實現(xiàn)融數(shù)DevOps平臺對微服務(wù)的支撐技術(shù)團隊的組織OperationExcellentAgenda談?wù)勎⒎?wù)3Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)3從微服務(wù)的概念談起高度封裝松耦合獨立部署獨立擴展應(yīng)用組件從微服務(wù)的概念談起高度封裝松耦合獨立部署獨立擴展應(yīng)用組件4從微服務(wù)的概念談起高度封裝松耦合獨立部署獨立擴展應(yīng)用組件從微微服務(wù)與SOA的異同從設(shè)計原則來講,微服務(wù)架構(gòu)遵循SOAprinciples小的、可重用的服務(wù)并不一定是微服務(wù),微服務(wù)架構(gòu)強調(diào)敏捷、獨立開發(fā)、獨立部署、獨立擴展,重用在某種程度上范圍影響敏捷性微服務(wù)架構(gòu)為了實現(xiàn)其敏捷特性,在SOA約束的基礎(chǔ)之上又添加了新的約束微服務(wù)之間不能互相依賴,因此要求微服務(wù)能夠獨立部署,獨立擴展,微服務(wù)之間的依賴越少越好一個應(yīng)用只做一件事不要為外部應(yīng)用發(fā)布API,依賴通過service或者事件搞定最好通過異步事件交互每個應(yīng)用擁有自己獨立的數(shù)據(jù)微服務(wù)與SOA的異同從設(shè)計原則來講,微服務(wù)架構(gòu)遵循SOAp5微服務(wù)與SOA的異同從設(shè)計原則來講,微服務(wù)架構(gòu)遵循SOAp采用微服務(wù)需要的一些前提條件沒有銀彈!微服務(wù)將單體應(yīng)用中的復(fù)雜性轉(zhuǎn)移到了應(yīng)用組件之間微服務(wù)粒度問題:如果粒度太細,就需要一個編排服務(wù),其實退回到了小型的SOA架構(gòu)如果服務(wù)粒度過粗,就不利于獨立部署采用微服務(wù)之前,需要考慮如下幾點微服務(wù)架構(gòu)基礎(chǔ)組件:服務(wù)路由服務(wù)注冊和發(fā)現(xiàn)配置服務(wù)監(jiān)控事件溯源(event

sourcing)框架團隊的敏捷成熟的如何,是否有足夠的DevOps經(jīng)驗團隊的數(shù)據(jù)管理方式是否滿足微服務(wù)的要求團隊是否有非常強的架構(gòu)實踐能力采用微服務(wù)需要的一些前提條件沒有銀彈!微服務(wù)將單體應(yīng)用中的復(fù)6采用微服務(wù)需要的一些前提條件沒有銀彈!微服務(wù)將單體應(yīng)用中的復(fù)Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過程微服務(wù)架構(gòu)設(shè)計的一些思考點融數(shù)微服務(wù)架構(gòu)的核心概念和實現(xiàn)融數(shù)DevOps平臺對微服務(wù)的支撐技術(shù)團隊的組織OperationExcellentAgenda談?wù)勎⒎?wù)7Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)7微服務(wù)技術(shù)選型過程微服務(wù)架構(gòu)技術(shù)選型的考慮點社區(qū)熱度文檔多坑少比較容易找到人架構(gòu)成熟度方便開發(fā)方便遷移多協(xié)議支持多語言支持學(xué)習(xí)曲線基于成熟技術(shù)現(xiàn)有知識傳承可維護性監(jiān)控能力運維能力微服務(wù)技術(shù)選型過程微服務(wù)架構(gòu)技術(shù)選型的考慮點社區(qū)熱度文檔多架8微服務(wù)技術(shù)選型過程微服務(wù)架構(gòu)技術(shù)選型的考慮點社區(qū)熱度文檔多架微服務(wù)技術(shù)選型過程功能點/服務(wù)框架備選方案Netflix/Spring

cloudMotangRPCThriftDubbo/DubboX功能定位完整的微服務(wù)框架RPC框架,但整合了ZK或Consul,實現(xiàn)集群環(huán)境的基本的服務(wù)注冊/發(fā)現(xiàn)RPC框架RPC框架服務(wù)框架支持Rest是Ribbon支持多種可插拔的序列化選擇否否否否支持RPC否是(Hession2)是是是支持多語言是(Rest形式)?否是是否服務(wù)注冊/發(fā)現(xiàn)是(Eureka)Eureka服務(wù)注冊表,Karyon服務(wù)端框架支持服務(wù)自注冊和健康檢查是(zookeeper/consul)否否是負載均衡是(服務(wù)端zuul+客戶端Ribbon)Zuul-服務(wù),動態(tài)路由云端負載均衡

Eureka(針對中間層服務(wù)器)是(客戶端)否否是(客戶端)配置服務(wù)Netflix

ArchaiusSpring

cloud

Config

Server

集中配置是(zookeeper提供)否否否服務(wù)調(diào)用鏈監(jiān)控是(zuul)Zuul提供邊緣服務(wù),API網(wǎng)關(guān)否否否否高可用/容錯是(服務(wù)端Hystrix+客戶端Ribbon)是(客戶端)否否是(客戶端)典型應(yīng)用案例NetflixSinaGoogleFacebook社區(qū)活躍程度高一般高一般已經(jīng)不維護了學(xué)習(xí)難度中等低高高低文檔豐富度高一般一般一般高其他Spring

Cloud

Bus為我們的應(yīng)用程支持降級Netflix內(nèi)部在開發(fā)集成gRPCIDL定義實踐的公司比較多微服務(wù)技術(shù)選型過程功能點/服務(wù)框架備選方案Netflix/S9微服務(wù)技術(shù)選型過程功能點/服務(wù)框架備選方案Netflix/S微服務(wù)技術(shù)選型過程目前團隊主要采用Spring

Boot

+

RestEasy的方式實現(xiàn)服務(wù)化首先支持rest現(xiàn)有業(yè)務(wù)代碼的遷移不希望改動太大小團隊,希望能夠有一個比較全面的解決方案結(jié)論Netflix提供了比較全面的解決方案Spring

Cloud對于Netflix的封裝比較全面Spring

Cloud基于Spring

Boot,團隊有基礎(chǔ)Spring

Cloud提供了Control

Bus能夠幫助實現(xiàn)監(jiān)控埋點業(yè)務(wù)應(yīng)用部署在阿里云,Spring

Cloud對12factors以及Cloud-Native的支持,有利于在云環(huán)境下使用微服務(wù)技術(shù)選型過程目前團隊主要采用SpringBoot+10微服務(wù)技術(shù)選型過程目前團隊主要采用SpringBoot+Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過程微服務(wù)架構(gòu)設(shè)計的一些思考點融數(shù)微服務(wù)架構(gòu)的核心概念和實現(xiàn)融數(shù)DevOps平臺對微服務(wù)的支撐技術(shù)團隊的組織OperationExcellentAgenda談?wù)勎⒎?wù)11Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)11微服務(wù)架構(gòu)設(shè)計的一些思考點簡化開發(fā)調(diào)用方便高性能可用性和安全方便使用,節(jié)約時間代碼生成Migration

tools膠水方便測試clientsexplorer文檔柔性設(shè)計多協(xié)議支持,方便新協(xié)議添加CachingContinuationsmetricsthrottlingload

sheddingauthentication微服務(wù)架構(gòu)設(shè)計的一些思考點簡化開發(fā)調(diào)用方便高性能可用性和安12微服務(wù)架構(gòu)設(shè)計的一些思考點簡化開發(fā)調(diào)用方便高性能可用性和安Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過程微服務(wù)架構(gòu)設(shè)計的一些思考點融數(shù)微服務(wù)架構(gòu)的核心概念和實現(xiàn)融數(shù)DevOps平臺對微服務(wù)的支撐技術(shù)團隊的組織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ù)處理實現(xiàn)HandlersOrchestratorActivityEndpointClientActivityTransportProtocol服務(wù)處理實現(xiàn)HandlersOrchestratorActi19服務(wù)處理實現(xiàn)HandlersOrchestratorActi插件式EndPointNettyJettyAMPOrchestratorTomcatActivityEndpointClientHTTP/RPCONE

WAY插件式EndPointNettyJettyAMPOrches20插件式EndPointNettyJettyAMPOrchesOrchestrator重用HandlersOrchestratorTransportProtocolHandlersOrchestratorEndpointINTERNETProtocolTransportOrchestrator重用HandlersOrchestr21Orchestrator重用HandlersOrchestr集成測試HandlersOrchestratorClientInterfaceMock

TransportProtocolHandlersOrchestratorMockEndpointActivityProtocolTransport集成測試HandlersOrchestratorClient22集成測試HandlersOrchestratorClient服務(wù)處理責(zé)任鏈Business

Logic服務(wù)處理責(zé)任鏈BusinessLogic23服務(wù)處理責(zé)任鏈BusinessLogic服務(wù)處理責(zé)任鏈Bu編寫并配置服務(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>編寫并配置服務(wù)<beanid="ochestrator"24編寫并配置服務(wù)<beanid="ochestrator"Spring

Cloud遵循12

Factors模式Configuration

ManagementService

discoveryCircuitbreakersIntelligent

routingControlbusOne-timetokensGloballocksLeadership

electionDistributed

sessionsSpringCloud遵循12Factors25SpringCloud遵循12FactorsSpring配置管理配置信息統(tǒng)一管理提供RESTfulAPI配置信息允許動態(tài)變更支持多種數(shù)據(jù)類型的配置內(nèi)容分級配置將配置分為多個層級:全局、系統(tǒng)、應(yīng)用、階段最終的配置集合,是所有層級的配置的并集同名的配置,末端會覆蓋上層的配置(可配置)版本控制配置項和配置集合具有版本信息,發(fā)生變更后會保留歷史記錄配置集合可以隨時回退到歷史版本配置變更主動通知客戶端訂閱配置變更信息,在配置發(fā)生變更后會立即收到通知和新的配置集合客戶端與應(yīng)用程序集成集成spring-boot提供接口,允許在運行期間動態(tài)獲取配置本地存儲在客戶端本地保存當(dāng)前配置,保證應(yīng)用程序在不能訪問Repository下也可以運行充分抽象,允許多實現(xiàn)配置信息可以保存在數(shù)據(jù)庫里,也可以保存在NoSQL里Repository可以使用Zookeeper或Redis等,也可以自行編寫允許自定義配置信息的序列化方式,默認使用

JDK

的序列化方式配置管理配置信息統(tǒng)一管理26配置管理配置信息統(tǒng)一管理配置管理配置信息統(tǒng)一管理26ZuulLoad

balancerLoad

balancerLoad

balancerZuulZuulZuulA

uth

S

erviceZuulLoadbalancerLoadbalancer27ZuulLoadbalancerLoadbalancer服務(wù)發(fā)現(xiàn):

Eureka

ServerEureka

client會緩存服Eureka

server的注冊信Eureka的注冊只針對ap服務(wù)每隔30秒向Eureka如果在15分鐘內(nèi)有85%Eureka

Server之間的數(shù)務(wù)注冊信息;息只存儲在內(nèi)存中;plication級別,不支持更細粒度的服務(wù)注冊,比如單個rest;Server發(fā)送心跳,不建議修改心跳時間,Eureka用這個時間來判斷集群內(nèi)是否出現(xiàn)大范圍通信異常;的服務(wù)沒有被續(xù)約,則Eureka

Server停止移除已注冊的服務(wù),以保護已經(jīng)注冊的服務(wù)信息不丟失;據(jù)同步,采用全量拉取,增量同步的方式? Zookeeper–

CP? Etcd–

CP,DNS? Eureka-

AP服務(wù)發(fā)現(xiàn):EurekaServerEurekaclie28服務(wù)發(fā)現(xiàn):EurekaServerEurekaclieRibbonLoad

B

alancerLoad

balancerLoad

balancerLoad

balancer,策略名策略描述實現(xiàn)說明BestAvailableRule選擇一個最小的并發(fā)請求的server逐個考察Server,如果Server被tripped了,則忽略,在選擇其中ActiveRequestsCount最小的server。AvailabilityFilteringRule過濾掉那些因為一直連接失敗的被標(biāo)記為circuit

tripped的后端server,并過濾掉那些高并發(fā)的的后端server(active

connections

超過配置的閾值)使用一個AvailabilityPredicate來包含過濾server的邏輯,其實就就是檢查status里記錄的各個server的運行狀態(tài)WeightedResponseTimeRule根據(jù)響應(yīng)時間分配一個weight,響應(yīng)時間越長,weight越小,被選中的可能性越低。一個后臺線程定期的從status里面讀取評價響應(yīng)時間為每個server計算一個weight。當(dāng)剛開始運行,沒有形成statas時,使用roubine策略選擇server。RetryRule對選定的負載均衡策略機上重試機制。在一個配置時間段內(nèi)當(dāng)選擇server不成功,則一直嘗試使用subRule的方式選擇一個可用的server使用舉例:IRulerule=newRetryRule(newRoundRobinRule(),

200);

200表示retry的時間間隔RoundRobinRuleroundRobin方式輪詢選擇server輪詢index,選擇index對應(yīng)位置的serverRandomRule隨機選擇一個server在index上隨機,選擇index對應(yīng)位置的serverZoneAvoidanceRule復(fù)合判斷server所在區(qū)域的性能和server的可用性選擇server使用ZoneAvoidancePredicate和AvailabilityPredicate來判斷是否選擇某個server,前一個判斷判定一個zone的運行性能是否可用,剔除不可用的zone(的所有server),AvailabilityPredicate用于過濾掉連接數(shù)過多的Server。擴展點:自定義負載均衡策略:=myclientmyclient.ribbon.NFLoadBalancerClassName=均衡器類名myclient.ribbon.NFLoadBalancerRuleClassName=均衡策略類名RibbonLoadBalancerLoadbalan29RibbonLoadBalancerLoadbalan熔斷器:HystrixHystrix核心由RxJava驅(qū)動,是一個基于觀察者模式的事件回調(diào)庫;Hyxtrix的核心處理邏輯是將調(diào)用包裝成Command,將對依賴的調(diào)用轉(zhuǎn)換成Command

API調(diào)用;circuitBreaker.allowRequest()判定熔斷是否開啟;Hystrix熔斷器本質(zhì)是一組狀態(tài)機,是fast-fail設(shè)計思想的體現(xiàn);處理請求時判定熔斷器是否開啟,開啟使用備選方案(如定義的fallback方法)往下執(zhí)行,未開啟按正常邏輯執(zhí)行;熔斷器依賴metrics收集的health指標(biāo),對錯誤請求數(shù)及錯誤百分比進行條件判定。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ū)動,30熔斷器:HystrixHystrix核心由RxJava驅(qū)動,HystrixUI&TurbineNetflix通過turbine聚合Hystrix的監(jiān)控流信息Hystirx的dashboard監(jiān)控信息只支持實時監(jiān)控Netflix內(nèi)部會把收集到的數(shù)據(jù)寫入到Atlas系統(tǒng),我們通過Kafka

+

ELK收集和存儲HystrixUI&TurbineNetflix通過t31HystrixUI&TurbineNetflix通過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ù)選型過程微服務(wù)架構(gòu)設(shè)計的一些思考點融數(shù)微服務(wù)架構(gòu)的核心概念和實現(xiàn)融數(shù)DevOps平臺對微服務(wù)的支撐技術(shù)團隊的組織OperationExcellentAgenda談?wù)勎⒎?wù)33Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)33部署概念的抽象S

ervice*******1*1包是部署最小單位服務(wù)組件由包、配置組成環(huán)境包含服務(wù)組件以及運行它所依賴的Host或者Host

Group有版本才能回滾部署概念的抽象Service*******1*1包是部34部署概念的抽象Service*******1*1包是部服務(wù)的部署服務(wù)組件

=(可運行代碼

+

配置)

&(依賴+

配置)&(基礎(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ù)選型過程微服務(wù)架構(gòu)設(shè)計的一些思考點融數(shù)微服務(wù)架構(gòu)的核心概念和實現(xiàn)融數(shù)DevOps平臺對微服務(wù)的支撐技術(shù)團隊的組織OperationExcellentAgenda談?wù)勎⒎?wù)38Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)38技術(shù)團隊組織

小團隊康威定律Two-Pizza

Team團隊成員以7+/-2人為最佳,團隊成員水平相當(dāng)保持團隊規(guī)模在個位數(shù),如果超過,拆分團隊魔數(shù)團隊成員能夠近距離的溝通,增進彼此的了解干杯規(guī)則團隊成員能夠非常清楚的了解團隊的目標(biāo)以及其他團隊成員的工作團隊信息透明化鼓勵創(chuàng)新和自治,團隊自己決定使用的技術(shù),鼓勵團隊間的技術(shù)競爭勝出的團隊的方案會被基礎(chǔ)架構(gòu)部門采納并全公司推廣去中心化技術(shù)團隊組織–小團隊康威定律團隊成員以7+/-2人為最佳39技術(shù)團隊組織–小團隊康威定律團隊成員以7+/-2人為最佳技術(shù)團隊組織

團隊劃分技術(shù)團隊組織–團隊劃分40技術(shù)團隊組織–團隊劃分技術(shù)團隊組織–團隊劃分40技術(shù)團隊組織

團隊間合作技術(shù)團隊組織–團隊間合作41技術(shù)團隊組織–團隊間合作技術(shù)團隊組織–團隊間合作41技術(shù)團隊組織

結(jié)果導(dǎo)向主人翁意識(Ownership)行動力(BiasforAction)吃自己的狗糧(Eatyourdog

food)工程師負責(zé)從需求調(diào)研、設(shè)計、開發(fā)、測試、部署、維護、監(jiān)控、功能升級等一系列的工作,也就是說軟件工程師負責(zé)應(yīng)用或者服務(wù)的全生命周期的所有工作運維是團隊成員的第一要務(wù),在強大的自動化運維工具的支撐下,軟件工程師必須負責(zé)服務(wù)或者應(yīng)用的SLA讓開發(fā)人員參與架構(gòu)設(shè)計,而不是架構(gòu)師參與開發(fā)技術(shù)團隊組織–結(jié)果導(dǎo)向主人翁意識(Ownership)42技術(shù)團隊組織–結(jié)果導(dǎo)向主人翁意識(Ownership)技Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過程微服務(wù)架構(gòu)設(shè)計的一些思考點融數(shù)微服務(wù)架構(gòu)的核心概念和實現(xiàn)融數(shù)DevOps平臺對微服務(wù)的支撐技術(shù)團隊的組織OperationExcellentAgenda談?wù)勎⒎?wù)43Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)43傳統(tǒng)的運維流程傳統(tǒng)的運維流程44傳統(tǒng)的運維流程傳統(tǒng)的運維流程44傳統(tǒng)的運維流程如何定位問題如何定位人員時效性監(jiān)控自動化問題反饋一旦發(fā)現(xiàn)問題,我們希望能夠迅速定位并安排相應(yīng)的業(yè)務(wù)和開發(fā)人員及時跟進,直到問題解決傳統(tǒng)的運維流程如何定位問題一旦發(fā)現(xiàn)問題,我們希望能夠迅速定位45傳統(tǒng)的運維流程如何定位問題一旦發(fā)現(xiàn)問題,我們希望能夠迅速定位新的運維機制C

TIC

TIR

esolve

G

roupO

nC

al***1新的運維機制CTICTIResolveGroupO46新的運維機制CTICTIResolveGroupOOperation

Excellent/業(yè)務(wù)驅(qū)動改進研發(fā)經(jīng)理監(jiān)控Sev1&

Sev2每周分析COEOperationExcellent/業(yè)務(wù)驅(qū)動改進47OperationExcellent/業(yè)務(wù)驅(qū)動改進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ù)選型過程微服務(wù)架構(gòu)設(shè)計的一些思考點融數(shù)微服務(wù)架構(gòu)的核心概念和實現(xiàn)融數(shù)DevOps平臺對微服務(wù)的支撐技術(shù)團隊的組織OperationExcellentAgenda談?wù)勎⒎?wù)50Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)50Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過程微服務(wù)架構(gòu)設(shè)計的一些思考點融數(shù)微服務(wù)架構(gòu)的核心概念和實現(xiàn)融數(shù)DevOps平臺對微服務(wù)的支撐技術(shù)團隊的組織OperationExcellentAgenda談?wù)勎⒎?wù)51Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)51從微服務(wù)的概念談起高度封裝松耦合獨立部署獨立擴展應(yīng)用組件從微服務(wù)的概念談起高度封裝松耦合獨立部署獨立擴展應(yīng)用組件52從微服務(wù)的概念談起高度封裝松耦合獨立部署獨立擴展應(yīng)用組件從微微服務(wù)與SOA的異同從設(shè)計原則來講,微服務(wù)架構(gòu)遵循SOAprinciples小的、可重用的服務(wù)并不一定是微服務(wù),微服務(wù)架構(gòu)強調(diào)敏捷、獨立開發(fā)、獨立部署、獨立擴展,重用在某種程度上范圍影響敏捷性微服務(wù)架構(gòu)為了實現(xiàn)其敏捷特性,在SOA約束的基礎(chǔ)之上又添加了新的約束微服務(wù)之間不能互相依賴,因此要求微服務(wù)能夠獨立部署,獨立擴展,微服務(wù)之間的依賴越少越好一個應(yīng)用只做一件事不要為外部應(yīng)用發(fā)布API,依賴通過service或者事件搞定最好通過異步事件交互每個應(yīng)用擁有自己獨立的數(shù)據(jù)微服務(wù)與SOA的異同從設(shè)計原則來講,微服務(wù)架構(gòu)遵循SOAp53微服務(wù)與SOA的異同從設(shè)計原則來講,微服務(wù)架構(gòu)遵循SOAp采用微服務(wù)需要的一些前提條件沒有銀彈!微服務(wù)將單體應(yīng)用中的復(fù)雜性轉(zhuǎn)移到了應(yīng)用組件之間微服務(wù)粒度問題:如果粒度太細,就需要一個編排服務(wù),其實退回到了小型的SOA架構(gòu)如果服務(wù)粒度過粗,就不利于獨立部署采用微服務(wù)之前,需要考慮如下幾點微服務(wù)架構(gòu)基礎(chǔ)組件:服務(wù)路由服務(wù)注冊和發(fā)現(xiàn)配置服務(wù)監(jiān)控事件溯源(event

sourcing)框架團隊的敏捷成熟的如何,是否有足夠的DevOps經(jīng)驗團隊的數(shù)據(jù)管理方式是否滿足微服務(wù)的要求團隊是否有非常強的架構(gòu)實踐能力采用微服務(wù)需要的一些前提條件沒有銀彈!微服務(wù)將單體應(yīng)用中的復(fù)54采用微服務(wù)需要的一些前提條件沒有銀彈!微服務(wù)將單體應(yīng)用中的復(fù)Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過程微服務(wù)架構(gòu)設(shè)計的一些思考點融數(shù)微服務(wù)架構(gòu)的核心概念和實現(xiàn)融數(shù)DevOps平臺對微服務(wù)的支撐技術(shù)團隊的組織OperationExcellentAgenda談?wù)勎⒎?wù)55Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)55微服務(wù)技術(shù)選型過程微服務(wù)架構(gòu)技術(shù)選型的考慮點社區(qū)熱度文檔多坑少比較容易找到人架構(gòu)成熟度方便開發(fā)方便遷移多協(xié)議支持多語言支持學(xué)習(xí)曲線基于成熟技術(shù)現(xiàn)有知識傳承可維護性監(jiān)控能力運維能力微服務(wù)技術(shù)選型過程微服務(wù)架構(gòu)技術(shù)選型的考慮點社區(qū)熱度文檔多架56微服務(wù)技術(shù)選型過程微服務(wù)架構(gòu)技術(shù)選型的考慮點社區(qū)熱度文檔多架微服務(wù)技術(shù)選型過程功能點/服務(wù)框架備選方案Netflix/Spring

cloudMotangRPCThriftDubbo/DubboX功能定位完整的微服務(wù)框架RPC框架,但整合了ZK或Consul,實現(xiàn)集群環(huán)境的基本的服務(wù)注冊/發(fā)現(xiàn)RPC框架RPC框架服務(wù)框架支持Rest是Ribbon支持多種可插拔的序列化選擇否否否否支持RPC否是(Hession2)是是是支持多語言是(Rest形式)?否是是否服務(wù)注冊/發(fā)現(xiàn)是(Eureka)Eureka服務(wù)注冊表,Karyon服務(wù)端框架支持服務(wù)自注冊和健康檢查是(zookeeper/consul)否否是負載均衡是(服務(wù)端zuul+客戶端Ribbon)Zuul-服務(wù),動態(tài)路由云端負載均衡

Eureka(針對中間層服務(wù)器)是(客戶端)否否是(客戶端)配置服務(wù)Netflix

ArchaiusSpring

cloud

Config

Server

集中配置是(zookeeper提供)否否否服務(wù)調(diào)用鏈監(jiān)控是(zuul)Zuul提供邊緣服務(wù),API網(wǎng)關(guān)否否否否高可用/容錯是(服務(wù)端Hystrix+客戶端Ribbon)是(客戶端)否否是(客戶端)典型應(yīng)用案例NetflixSinaGoogleFacebook社區(qū)活躍程度高一般高一般已經(jīng)不維護了學(xué)習(xí)難度中等低高高低文檔豐富度高一般一般一般高其他Spring

Cloud

Bus為我們的應(yīng)用程支持降級Netflix內(nèi)部在開發(fā)集成gRPCIDL定義實踐的公司比較多微服務(wù)技術(shù)選型過程功能點/服務(wù)框架備選方案Netflix/S57微服務(wù)技術(shù)選型過程功能點/服務(wù)框架備選方案Netflix/S微服務(wù)技術(shù)選型過程目前團隊主要采用Spring

Boot

+

RestEasy的方式實現(xiàn)服務(wù)化首先支持rest現(xiàn)有業(yè)務(wù)代碼的遷移不希望改動太大小團隊,希望能夠有一個比較全面的解決方案結(jié)論Netflix提供了比較全面的解決方案Spring

Cloud對于Netflix的封裝比較全面Spring

Cloud基于Spring

Boot,團隊有基礎(chǔ)Spring

Cloud提供了Control

Bus能夠幫助實現(xiàn)監(jiān)控埋點業(yè)務(wù)應(yīng)用部署在阿里云,Spring

Cloud對12factors以及Cloud-Native的支持,有利于在云環(huán)境下使用微服務(wù)技術(shù)選型過程目前團隊主要采用SpringBoot+58微服務(wù)技術(shù)選型過程目前團隊主要采用SpringBoot+Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過程微服務(wù)架構(gòu)設(shè)計的一些思考點融數(shù)微服務(wù)架構(gòu)的核心概念和實現(xiàn)融數(shù)DevOps平臺對微服務(wù)的支撐技術(shù)團隊的組織OperationExcellentAgenda談?wù)勎⒎?wù)59Agenda談?wù)勎⒎?wù)Agenda談?wù)勎⒎?wù)59微服務(wù)架構(gòu)設(shè)計的一些思考點簡化開發(fā)調(diào)用方便高性能可用性和安全方便使用,節(jié)約時間代碼生成Migration

tools膠水方便測試clientsexplorer文檔柔性設(shè)計多協(xié)議支持,方便新協(xié)議添加CachingContinuationsmetricsthrottlingload

sheddingauthentication微服務(wù)架構(gòu)設(shè)計的一些思考點簡化開發(fā)調(diào)用方便高性能可用性和安60微服務(wù)架構(gòu)設(shè)計的一些思考點簡化開發(fā)調(diào)用方便高性能可用性和安Agenda談?wù)勎⒎?wù)微服務(wù)技術(shù)選型過程微服務(wù)架構(gòu)設(shè)計的一些思考點融數(shù)微服務(wù)架構(gòu)的核心概念和實現(xiàn)融數(shù)DevOps平臺對微服務(wù)的支撐技術(shù)團隊的組織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ù)處理實現(xiàn)HandlersOrchestratorActivityEndpointClientActivityTransportProtocol服務(wù)處理實現(xiàn)HandlersOrchestratorActi67服務(wù)處理實現(xiàn)HandlersOrchestratorActi插件式EndPointNettyJettyAMPOrchestratorTomcatActivityEndpointClientHTTP/RPCONE

WAY插件式EndPointNettyJettyAMPOrches68插件式EndPointNettyJettyAMPOrchesOrchestrator重用HandlersOrchestratorTransportProtocolHandlersOrchestratorEndpointINTERNETProtocolTransportOrchestrator重用HandlersOrchestr69Orchestrator重用HandlersOrchestr集成測試HandlersOrchestratorClientInterfaceMock

TransportProtocolHandlersOrchestratorMockEndpointActivityProtocolTransport集成測試HandlersOrchestratorClient70集成測試HandlersOrchestratorClient服務(wù)處理責(zé)任鏈Business

Logic服務(wù)處理責(zé)任鏈BusinessLogic71服務(wù)處理責(zé)任鏈BusinessLogic服務(wù)處理責(zé)任鏈Bu編寫并配置服務(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>編寫并配置服務(wù)<beanid="ochestrator"72編寫并配置服務(wù)<beanid="ochestrator"Spring

Cloud遵循12

Factors模式Configuration

ManagementService

discoveryCircuitbreakersIntelligent

routingControlbusOne-timetokensGloballocksLeadership

electionDistributed

sessionsSpringCloud遵循12Factors73SpringCloud遵循12FactorsSpring配置管理配置信息統(tǒng)一管理提供RESTfulAPI配置信息允許動態(tài)變更支持多種數(shù)據(jù)類型的配置內(nèi)容分級配置將配置分為多個層級:全局、系統(tǒng)、應(yīng)用、階段最終的配置集合,是所有層級的配置的并集同名的配置,末端會覆蓋上層的配置(可配置)版本控制配置項和配置集合具有版本信息,發(fā)生變更后會保留歷史記錄配置集合可以隨時回退到歷史版本配置變更主動通知客戶端訂閱配置變更信息,在配置發(fā)生變更后會立即收到通知和新的配置集合客戶端與應(yīng)用程序集成集成spring-boot提供接口,允許在運行期間動態(tài)獲取配置本地存儲在客戶端本地保存當(dāng)前配置,保證應(yīng)用程序在不能訪問Repository下也可以運行充分抽象,允許多實現(xiàn)配置信息可以保存在數(shù)據(jù)庫里,也可以保存在NoSQL里Repository可以使用Zookeeper或Redis等,也可以自行編寫允許自定義配置信息的序列化方式,默認使用

JDK

的序列化方式配置管理配置信息統(tǒng)一管理74配置管理配置信息統(tǒng)一管理配置管理配置信息統(tǒng)一管理74ZuulLoad

balancerLoad

balancerLoad

balancerZuulZuulZuulA

uth

S

erviceZuulLoadbalancerLoadbalancer75ZuulLoadbalancerLoadbalancer服務(wù)發(fā)現(xiàn):

Eureka

ServerEureka

client會緩存服Eureka

server的注冊信Eureka的注冊只針對ap服務(wù)每隔30秒向Eureka如果在15分鐘內(nèi)有85%Eureka

Server之間的數(shù)務(wù)注冊信息;息只存儲在內(nèi)存中;plication級別,不支持更細粒度的服務(wù)注冊,比如單個rest;Server發(fā)送心跳,不建議修改心跳時間,Eureka用這個時間來判斷集群內(nèi)是否出現(xiàn)大范圍通信異常;的服務(wù)沒有被續(xù)約,則Eureka

Server停止移除已注冊的服務(wù),以保護已經(jīng)注冊的服務(wù)信息不丟失;據(jù)同步,采用全量拉取,增量同步的方式? Zookeeper–

CP? Etcd–

CP,DNS? Eureka-

AP服務(wù)發(fā)現(xiàn):EurekaServerEurekaclie76服務(wù)發(fā)現(xiàn):EurekaServerEurekaclieRibbonLoad

B

alancerLoad

balancerLoad

balancerLoad

balancer,策略名策略描述實現(xiàn)說明BestAvailableRule選擇一個最小的并發(fā)請求的server逐個考察Server,如果Server被tripped了,則忽略,在選擇其中ActiveRequestsCount最小的server。AvailabilityFilteringRule過濾掉那些因為一直連接失敗的被標(biāo)記為circuit

tripped的后端server,并過濾掉那些高并發(fā)的的后端server(active

connections

超過配置的閾值)使用一個AvailabilityPredicate來包含過濾server的邏輯,其實就就是檢查status里記錄的各個server的運行狀態(tài)WeightedResponseTimeRule根據(jù)響應(yīng)時間分配一個weight,響應(yīng)時間越長,weight越小,被選中的可能性越低。一個后臺線程定期的從status里面讀取評價響應(yīng)時間為每個server計算一個weight。當(dāng)剛開始運行,沒有形成statas時,使用roubine策略選擇server。RetryRule對選定的負載均衡策略機上重試機制。在一個配置時間段內(nèi)當(dāng)選擇server不成功,則一直嘗試使用subRule的方式選擇一個可用的server使用舉例:IRulerule=newRetryRule(newRoundRobinRule(),

200);

200表示retry的時間間隔RoundRobinRuleroundRobin方式輪詢選擇server輪詢index,選擇index對應(yīng)位置的serverRandomRule隨機選擇一個server在index上隨機,選擇index對應(yīng)位置的serverZoneAvoidanceRule復(fù)合判斷server所在區(qū)域的性能和server的可用性選擇server使用ZoneAvoidancePredicate和AvailabilityPredicate來判斷是否選擇某個server,前一個判斷判定一個zone的運行性能是否可用,剔除不可用的zone(的所有server),AvailabilityPredicate用于過濾掉連接數(shù)過多的Server。擴展點:自定義負載均衡策略:=myclientmyclient.ribbon.NFLoadBalancerClassName=均衡器類名myclient.ribbon.NFLoadBalancerRuleClassName=均衡策略類名RibbonLoadBalancerLoadbalan77RibbonLoadBalancerLoadbalan熔斷器:HystrixHystrix核心由RxJava驅(qū)動,是一個基于觀察者模式的事件回調(diào)庫;Hyxtrix的核心處理邏輯是將調(diào)用包裝成Command,將對依賴的調(diào)用轉(zhuǎn)換成Command

API調(diào)用;circuitBreaker.allowRequest()判定熔斷是否開啟;Hystrix熔斷器本質(zhì)是一組狀態(tài)機,是fast-fail設(shè)計思想的體現(xiàn);處理請求時判定熔斷器是否開啟,開啟使用備選方案(如定義的fallback方法)往下執(zhí)行,未開啟按正常邏輯執(zhí)行;熔斷器依賴metrics收集的health指標(biāo),對錯誤請求數(shù)及錯誤百分比進行條件判定。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ū)動,78熔斷器:HystrixHystrix核心由RxJava驅(qū)動,HystrixUI&TurbineNetflix通過turbine聚合Hystrix的監(jiān)控流信息Hystirx的dashboard監(jiān)控信息只支持實時監(jiān)控Netflix內(nèi)部會把收集到的數(shù)據(jù)寫入到Atlas系統(tǒng),我們通過Kafka

+

ELK收集和存儲HystrixUI&TurbineNetflix通過t79HystrixUI&TurbineNetflix通過t服務(wù)端治理LBZuulA

uth

S

erviceAAuuthth

S

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論