版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于SpringCloud和Netflix的微服务技术架构基于Spring
Cloud和Netflix打造基于SpringCloud和Netflix的微服务技术架构1Agenda谈谈微服务微服务技术选型过程微服务架构设计的一些思考点融数微服务架构的核心概念和实现融数DevOps平台对微服务的支撑技术团队的组织OperationExcellentAgenda谈谈微服务2Agenda谈谈微服务微服务技术选型过程微服务架构设计的一些思考点融数微服务架构的核心概念和实现融数DevOps平台对微服务的支撑技术团队的组织OperationExcellentAgenda谈谈微服务3从微服务的概念谈起高度封装松耦合独立部署独立扩展应用组件从微服务的概念谈起高度封装松耦合独立部署独立扩展应用组件4微服务与SOA的异同从设计原则来讲,微服务架构遵循SOAprinciples小的、可重用的服务并不一定是微服务,微服务架构强调敏捷、独立开发、独立部署、独立扩展,重用在某种程度上范围影响敏捷性微服务架构为了实现其敏捷特性,在SOA约束的基础之上又添加了新的约束微服务之间不能互相依赖,因此要求微服务能够独立部署,独立扩展,微服务之间的依赖越少越好一个应用只做一件事不要为外部应用发布API,依赖通过service或者事件搞定最好通过异步事件交互每个应用拥有自己独立的数据微服务与SOA的异同从设计原则来讲,微服务架构遵循SOAp5采用微服务需要的一些前提条件没有银弹!微服务将单体应用中的复杂性转移到了应用组件之间微服务粒度问题:如果粒度太细,就需要一个编排服务,其实退回到了小型的SOA架构如果服务粒度过粗,就不利于独立部署采用微服务之前,需要考虑如下几点微服务架构基础组件:服务路由服务注册和发现配置服务监控事件溯源(event
sourcing)框架团队的敏捷成熟的如何,是否有足够的DevOps经验团队的数据管理方式是否满足微服务的要求团队是否有非常强的架构实践能力采用微服务需要的一些前提条件没有银弹!微服务将单体应用中的复6Agenda谈谈微服务微服务技术选型过程微服务架构设计的一些思考点融数微服务架构的核心概念和实现融数DevOps平台对微服务的支撑技术团队的组织OperationExcellentAgenda谈谈微服务7微服务技术选型过程微服务架构技术选型的考虑点社区热度文档多坑少比较容易找到人架构成熟度方便开发方便迁移多协议支持多语言支持学习曲线基于成熟技术现有知识传承可维护性监控能力运维能力微服务技术选型过程微服务架构技术选型的考虑点社区热度文档多架8微服务技术选型过程功能点/服务框架备选方案Netflix/Spring
cloudMotangRPCThriftDubbo/DubboX功能定位完整的微服务框架RPC框架,但整合了ZK或Consul,实现集群环境的基本的服务注册/发现RPC框架RPC框架服务框架支持Rest是Ribbon支持多种可插拔的序列化选择否否否否支持RPC否是(Hession2)是是是支持多语言是(Rest形式)?否是是否服务注册/发现是(Eureka)Eureka服务注册表,Karyon服务端框架支持服务自注册和健康检查是(zookeeper/consul)否否是负载均衡是(服务端zuul+客户端Ribbon)Zuul-服务,动态路由云端负载均衡
Eureka(针对中间层服务器)是(客户端)否否是(客户端)配置服务Netflix
ArchaiusSpring
cloud
Config
Server
集中配置是(zookeeper提供)否否否服务调用链监控是(zuul)Zuul提供边缘服务,API网关否否否否高可用/容错是(服务端Hystrix+客户端Ribbon)是(客户端)否否是(客户端)典型应用案例NetflixSinaGoogleFacebook社区活跃程度高一般高一般已经不维护了学习难度中等低高高低文档丰富度高一般一般一般高其他Spring
Cloud
Bus为我们的应用程支持降级Netflix内部在开发集成gRPCIDL定义实践的公司比较多微服务技术选型过程功能点/服务框架备选方案Netflix/S9微服务技术选型过程目前团队主要采用Spring
Boot
+
RestEasy的方式实现服务化首先支持rest现有业务代码的迁移不希望改动太大小团队,希望能够有一个比较全面的解决方案结论Netflix提供了比较全面的解决方案Spring
Cloud对于Netflix的封装比较全面Spring
Cloud基于Spring
Boot,团队有基础Spring
Cloud提供了Control
Bus能够帮助实现监控埋点业务应用部署在阿里云,Spring
Cloud对12factors以及Cloud-Native的支持,有利于在云环境下使用微服务技术选型过程目前团队主要采用SpringBoot+10Agenda谈谈微服务微服务技术选型过程微服务架构设计的一些思考点融数微服务架构的核心概念和实现融数DevOps平台对微服务的支撑技术团队的组织OperationExcellentAgenda谈谈微服务11微服务架构设计的一些思考点简化开发调用方便高性能可用性和安全方便使用,节约时间代码生成Migration
tools胶水方便测试clientsexplorer文档柔性设计多协议支持,方便新协议添加CachingContinuationsmetricsthrottlingload
sheddingauthentication微服务架构设计的一些思考点简化开发调用方便高性能可用性和安12Agenda谈谈微服务微服务技术选型过程微服务架构设计的一些思考点融数微服务架构的核心概念和实现融数DevOps平台对微服务的支撑技术团队的组织OperationExcellentAgenda谈谈微服务13核心模型Envelopeconsum
erp
rod
ucer核心模型Envelopeconsumerproduce14核心模型}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核心模型Shapes
(定义数据类型)SimpleListMapStructure核心模型Shapes(定义数据类型)16核心模型Traits
(定义Shaps的行为)<pattern
target=“location”><regex
value=“[0-9]{5}(?:\-[0-9]{4})?”/></pattern><string
name=“location”/>核心模型Traits(定义Shaps的行为)<patter17核心模型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服务处理实现HandlersOrchestratorActivityEndpointClientActivityTransportProtocol服务处理实现HandlersOrchestratorActi19插件式EndPointNettyJettyAMPOrchestratorTomcatActivityEndpointClientHTTP/RPCONE
WAY插件式EndPointNettyJettyAMPOrches20Orchestrator重用HandlersOrchestratorTransportProtocolHandlersOrchestratorEndpointINTERNETProtocolTransportOrchestrator重用HandlersOrchestr21集成测试HandlersOrchestratorClientInterfaceMock
TransportProtocolHandlersOrchestratorMockEndpointActivityProtocolTransport集成测试HandlersOrchestratorClient22服务处理责任链Business
Logic服务处理责任链BusinessLogic23编写并配置服务<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>编写并配置服务<beanid="ochestrator"24Spring
Cloud遵循12
Factors模式Configuration
ManagementService
discoveryCircuitbreakersIntelligent
routingControlbusOne-timetokensGloballocksLeadership
electionDistributed
sessionsSpringCloud遵循12Factors25配置管理配置信息统一管理提供RESTfulAPI配置信息允许动态变更支持多种数据类型的配置内容分级配置将配置分为多个层级:全局、系统、应用、阶段最终的配置集合,是所有层级的配置的并集同名的配置,末端会覆盖上层的配置(可配置)版本控制配置项和配置集合具有版本信息,发生变更后会保留历史记录配置集合可以随时回退到历史版本配置变更主动通知客户端订阅配置变更信息,在配置发生变更后会立即收到通知和新的配置集合客户端与应用程序集成集成spring-boot提供接口,允许在运行期间动态获取配置本地存储在客户端本地保存当前配置,保证应用程序在不能访问Repository下也可以运行充分抽象,允许多实现配置信息可以保存在数据库里,也可以保存在NoSQL里Repository可以使用Zookeeper或Redis等,也可以自行编写允许自定义配置信息的序列化方式,默认使用
JDK
的序列化方式配置管理配置信息统一管理26ZuulLoad
balancerLoad
balancerLoad
balancerZuulZuulZuulA
uth
S
erviceZuulLoadbalancerLoadbalancer27服务发现:
Eureka
ServerEureka
client会缓存服Eureka
server的注册信Eureka的注册只针对ap服务每隔30秒向Eureka如果在15分钟内有85%Eureka
Server之间的数务注册信息;息只存储在内存中;plication级别,不支持更细粒度的服务注册,比如单个rest;Server发送心跳,不建议修改心跳时间,Eureka用这个时间来判断集群内是否出现大范围通信异常;的服务没有被续约,则Eureka
Server停止移除已注册的服务,以保护已经注册的服务信息不丢失;据同步,采用全量拉取,增量同步的方式• Zookeeper–
CP• Etcd–
CP,DNS• Eureka-
AP服务发现:EurekaServerEurekaclie28RibbonLoad
B
alancerLoad
balancerLoad
balancerLoad
balancer,策略名策略描述实现说明BestAvailableRule选择一个最小的并发请求的server逐个考察Server,如果Server被tripped了,则忽略,在选择其中ActiveRequestsCount最小的server。AvailabilityFilteringRule过滤掉那些因为一直连接失败的被标记为circuit
tripped的后端server,并过滤掉那些高并发的的后端server(active
connections
超过配置的阈值)使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就就是检查status里记录的各个server的运行状态WeightedResponseTimeRule根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低。一个后台线程定期的从status里面读取评价响应时间为每个server计算一个weight。当刚开始运行,没有形成statas时,使用roubine策略选择server。RetryRule对选定的负载均衡策略机上重试机制。在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server使用举例:IRulerule=newRetryRule(newRoundRobinRule(),
200);
200表示retry的时间间隔RoundRobinRuleroundRobin方式轮询选择server轮询index,选择index对应位置的serverRandomRule随机选择一个server在index上随机,选择index对应位置的serverZoneAvoidanceRule复合判断server所在区域的性能和server的可用性选择server使用ZoneAvoidancePredicate和AvailabilityPredicate来判断是否选择某个server,前一个判断判定一个zone的运行性能是否可用,剔除不可用的zone(的所有server),AvailabilityPredicate用于过滤掉连接数过多的Server。扩展点:自定义负载均衡策略:=myclientmyclient.ribbon.NFLoadBalancerClassName=均衡器类名myclient.ribbon.NFLoadBalancerRuleClassName=均衡策略类名RibbonLoadBalancerLoadbalan29熔断器:HystrixHystrix核心由RxJava驱动,是一个基于观察者模式的事件回调库;Hyxtrix的核心处理逻辑是将调用包装成Command,将对依赖的调用转换成Command
API调用;circuitBreaker.allowRequest()判定熔断是否开启;Hystrix熔断器本质是一组状态机,是fast-fail设计思想的体现;处理请求时判定熔断器是否开启,开启使用备选方案(如定义的fallback方法)往下执行,未开启按正常逻辑执行;熔断器依赖metrics收集的health指标,对错误请求数及错误百分比进行条件判定。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驱动,30HystrixUI&TurbineNetflix通过turbine聚合Hystrix的监控流信息Hystirx的dashboard监控信息只支持实时监控Netflix内部会把收集到的数据写入到Atlas系统,我们通过Kafka
+
ELK收集和存储HystrixUI&TurbineNetflix通过t31服务端治理LBZuulA
uth
S
erviceAAuuthth
S
SeervrviciceeA
uth
S
erviceQ
Aueurtyh
S
erviceCommandAAuSutehthr
vS
SiecerevrviciceeEureka
ServerClientsVirtual
IP
/H
ostnam
eb
indLBZuulb
ind服务端治理LBZuulAuthServiceAAuut32Agenda谈谈微服务微服务技术选型过程微服务架构设计的一些思考点融数微服务架构的核心概念和实现融数DevOps平台对微服务的支撑技术团队的组织OperationExcellentAgenda谈谈微服务33部署概念的抽象S
ervice*******1*1包是部署最小单位服务组件由包、配置组成环境包含服务组件以及运行它所依赖的Host或者Host
Group有版本才能回滚部署概念的抽象Service*******1*1包是部34服务的部署服务组件
=(可运行代码
+
配置)
&(依赖+
配置)&(基础设施+
配置)V
M
/D
ocker)S
ervice*******1*1V
M
/D
ocker)V
M
/D
ocker)服务的部署服务组件=VM/Docker)Servi35基于Spring-Cloud和Netflix的微课件36DevOps总体架构GitLibp
ulingnotifyp
ulingb
ind
vipnotifyDevOps总体架构GitLibpulingnotifyp37Agenda谈谈微服务微服务技术选型过程微服务架构设计的一些思考点融数微服务架构的核心概念和实现融数Dev
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度宁波慈溪编制城市历史文化保护合同4篇
- 二零二五年度农产品质量安全认证合同3篇
- 2025年度打磨设备智能化改造升级合同4篇
- 2025年度电商平台电子书充值卡销售代理合同4篇
- 2025年度煤炭储备基地建设与运营合同4篇
- 二零二五年度苗木种植基地土地流转协议4篇
- 2025版文化产业发展基金投资合作协议范本7篇
- 二零二五年度水电施工安全协议书模板4篇
- 二零二四年工业生产设备安装与智能制造合同2篇
- 2025年度个人合伙艺术品交易公司退伙收益分配合同4篇
- 土地买卖合同参考模板
- 2025高考数学二轮复习-专题一-微专题10-同构函数问题-专项训练【含答案】
- 新能源行业市场分析报告
- 2025年天津市政建设集团招聘笔试参考题库含答案解析
- 岩土工程勘察.课件
- 专升本英语阅读理解50篇
- 中餐烹饪技法大全
- 新型电力系统研究
- 滋补类用药的培训
- 北师大版高三数学选修4-6初等数论初步全册课件【完整版】
- 高职《劳动教育》指导纲要
评论
0/150
提交评论