Spring Cloud架构的各个组件的原理分析.docx

上传人:p** 文档编号:1033202 上传时间:2024-06-15 格式:DOCX 页数:14 大小:167.70KB
下载 相关 举报
Spring Cloud架构的各个组件的原理分析.docx_第1页
第1页 / 共14页
Spring Cloud架构的各个组件的原理分析.docx_第2页
第2页 / 共14页
Spring Cloud架构的各个组件的原理分析.docx_第3页
第3页 / 共14页
Spring Cloud架构的各个组件的原理分析.docx_第4页
第4页 / 共14页
Spring Cloud架构的各个组件的原理分析.docx_第5页
第5页 / 共14页
Spring Cloud架构的各个组件的原理分析.docx_第6页
第6页 / 共14页
Spring Cloud架构的各个组件的原理分析.docx_第7页
第7页 / 共14页
Spring Cloud架构的各个组件的原理分析.docx_第8页
第8页 / 共14页
Spring Cloud架构的各个组件的原理分析.docx_第9页
第9页 / 共14页
Spring Cloud架构的各个组件的原理分析.docx_第10页
第10页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Spring Cloud架构的各个组件的原理分析.docx》由会员分享,可在线阅读,更多相关《Spring Cloud架构的各个组件的原理分析.docx(14页珍藏版)》请在第壹文秘上搜索。

1、我们先认识一下SpringCloud的各个组件,然后知其所以然。SPringCloud(一)ConfigspringSpringCloudBusSpringCk)udConfigSPnnOEVW9Afi.UfKBjuemaHiMtBftB.BCVV*e,RXm*M.0UASub*r*0A.SpringCloudBusSpmg件.用于(伪n.肥宝化件)WMM*.N与SPrtOeGouOConMI台实SMBV.EurekaNMxCMIftXS,一个于RESTM.RTrtt三M.UmnVH务双。Qm”.HystrixFtetftxE9WV9XA口遢注机第EM三万ImY或Mn为adIaaM供更修大WN

2、ETF1.IXo三三ZuulZuulNetnaZtM任云翠8上仅秋NM&.务住.安全边身的ZmU于0IONvmXH用的V0RMMWflnM11.4ArchaiusjCONSU1.PtvotelCloudFoundryArchaiusMttmxEVVVAR包含一事别配APi.供aan梨化n住.tt三wEian.险AMW、SflnnvwConsulHMhCorpNMTConutfH.COniUI一个ftXBEVXII.与OOCMr司U无鼻皮.SpringCloudforCloudFoundryPMHalAilQauth21frA三rflRQoudFAndry.GoudFcMy*VMEM出的开普PM

3、S五E原理讲解前,先看一个最经典的业务场景,如开发一个电商网站,要实现支付订单的功能,流程如下:创建一个订单之后,如果用户立刻支付了这个订单,我们需要将订单状态更新为“已支付”扣减相应的商品库存通知仓储中心,进行发货给用户的这次购物增加相应的积分如上,微服务的应用场景和核心竞争力:降低耦合:每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率。独立部署:由于微服务具备独立的运行进程,所以每个微服务也可以独立部署。当某个微服务发生变更时无需编译、部署整个应用。由微服务组成的应用相当于具备一系

4、列可并行的发布流程,使得发布更加高效,同时降低对生产环境所造成的风险,最终缩短应用交付周期。选型灵活:微服务架构下,技术选型是去中心化的。每个团队可以根据自身服务的需求和行业发展的现状,自由选择最适合的技术栈。由于每个微服务相对简单,故需要对技术栈进行升级时所面临的风险就较低,甚至完全重构一个微服务也是可行的。容错机制:当某一组建发生故障时,在单一进程的传统架构下,故障很有可能在进程内扩散,形成应用全局性的不可用。在微服务架构下,故障会被隔离在单个服务中。若设计良好,其他服务可通过重试、平稳退化等机制实现应用层面的容错。sefvicbreakerbord灵活扩展:单块架构应用也可以实现横向扩展

5、,就是将整个应用完整的复制到不同的节点。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。mesgetxoev0留出-S争Dubbo对标SpringCloud微服务:背景分析:Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司;SPringCknId是知名的SPring家族的产品。阿里巴巴是一个商业公司,虽然也开源了很多的顶级的项目,但从整体战略上来讲,仍然是服务于自身的业务为主。SPring专注于企业级开源框架的研发,不论是在中国还是在世界上使用都非常广泛,开发出通用、开源、稳健的开源框架就是他们的主业。活跃

6、度对比:DUbbO是一个非常优秀的服务治理框架,并且在服务治理、灰度发布、流量分发这方面做的比SPringCloUd还好,除过当当网在基础上增加了rest支持外,已有两年多的时间几乎都没有任何更新了。在使用过程中出现问题,提交到GitHub的ISSUe也少有回复。相反SpringCloud自从发展到现在,仍然在不断的高速发展,从GitHub上提交代码的频度和发布版本的时间间隔就可以看出,现在SPringClOUd即将发布2.0版本,到了后期会更加完善和稳定。平台架构:DUbbo框架只是专注于服务之间的治理,如果我们需要使用配置中心、分布式跟踪这些内容都需要自己去集成,这样无形中使用Dubbo的

7、难度就会增加。SPringCknId几乎考虑了服务治理的方方面面,更有SPringBOOt这个大将的支持,开发起来非常的便利和简单。技术前景:DUbbo在各中小公司也从中受益不少。经过了这么多年的发展,互联网行业也是涌现了更多先进的技术和理念,Dubbo有点可惜。Spring推出SPringBOOt/Cloud也是因为自身的很多原因。SPring最初推崇的轻量级框架,随着不断的发展也越来越庞大,随着集成项目越来越多,配置文件也越来越混乱,慢慢的背离最初的理念。随着这么多年的发展,微服务、分布式链路跟踪等更多新的技术理念的出现,SPring急需一款框架来改善以前的开发模式,因此才会出现Sprin

8、gBoot/Cloud项目,我们现在访问Spring官网,会发现SpringBoot和SpringCloud已经放到首页最重点突出的三个项目中的前两个,可见SPring对这两个框架的重视程度。DUbbO实现如下:SpringCloud实现思路:Eureka原理:主管服务注册与发现,也就是微服务的名称注册到EUreka,就可以通过Eureka找到微服务,而不需要修改服务调用的配置文件。分析:SPringCloUd封装了NetfliX公司开发的EUreka模块来实现服务的注册与发现,采用的C-S的设计架构,EUrekaSerVer作为服务注册功能的服务器,他是服务注册中心。而系统的其他微服务,使用

9、Eureka的客户端连接到EurekaServer并维持心跳。这样系统的维护人员可以通过EurekaServer来监控系统中的各个微服务是否正常运行。SPringCloUd的一些其他模块(比如ZUUI)就可以通过EurekaServer来发现系统其他的微服务,并执行相关逻辑。EurekaServerEurekaServer提供服务注册服务,各个节点启动后,会在EUrekaSerVer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。EurekaClientEurekaClient是一个Java客户端,用于简化Eurek

10、aServer的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向EUrekaSeNer发送心跳(默认周期为30秒),以证明当前服务是可用状态。如果EUrekaSerVer在一定的时间(默认90秒)未收到客户端的心跳,EurekaSerVer将会从服务注册表中把这个服务节点移除。EurekaServer的自我保护机制如果在15分钟内超过85%的节点都没有正常的心跳,那么EUreka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务Eureka仍然能够接受新

11、服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)当网络稳定时,当前实例新的注册信息会被同步到其它节点中因此,Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像ZooKeeper那样使整个注册服务瘫痪。Eureka和ZooKeeper著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。ZooKeeper保证CP当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是

12、说,服务注册功能对可用性的要求要高于一致性。但是ZooKeeper会出现这样一种情况,当Master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行Ieader选举。问题在于,选举Ieader的时间太长,30120s,且选举期间整个ZoOKeePer集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得ZooKeeper集群失去Master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。Eureka保证APEUrek在设计时就优先保证可用性。EUreka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作

13、,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台EUreka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。除此之外,EUreka还有一种自我保护机制,见上。总结EUreka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像ZooKeeper那样使整个注册服务瘫痪。Eureka作为单纯的服务注册中心来说要比ZooKeeper更加“专业”,因为注册服务更重要的是可用性,我们可以接受短期内达不到一致性的状况。SPringCk)Ud组件架构Ribbon和

14、Feign在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于HTTPRESTful的。SpringCloud有两种服务调用方式,一种是RibbOn+RestTemplate,另一种是FeignO概念基于NetflixRibbon用过轮询策略实现的一套客户端负载均衡的工具。客户端负载均衡:负载均衡Zuul网关将一个请求发送给某一个服务的应用的时候,如果一个服务启动了多个实例,就会通过Ribbon来通过一定的负载均衡策略来发送给某一一个服务实例。SPringClOUd中的RibbOn,客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法(如简单轮询,随机连接等)选择一个服

15、务器,然后进行访问。负载均衡负载均衡:用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。使用负载均衡带来的好处很明显:当集群里的1台或者多台服务器down的时候,剩余的没有down的服务器可以保证服务的继续使用;将访问压力分配到各个服务器,不会由于某一高峰时刻导致系统CPU急剧上升。负载均衡有好几种实现策略,常见的有:随机(RandOm),轮询(ROUndRobin),一致性哈希(ConsistentHash),哈希(Hash),加权(Weighted)Ribbon的默认策略是轮询RestTemplate传统情况下在JaVa代码里访问RESTful服务,一般使用APaChe的HttPClien3不过此种方法使用起来太过繁琐。Spring提供了一种简单便捷的模板类来进行操作,这就是ReStTemPlate。Feign是一个声明式http客户端。使用Feign能让编写http客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解,避免了调用目标微服务时.,需要不断的解析/封装json数据的繁琐。SPringCloud中Feign默认集成了Ribbon

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > Java

copyright@ 2008-2023 1wenmi网站版权所有

经营许可证编号:宁ICP备2022001189号-1

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第壹文秘网,我们立即给予删除!