同步操作将从 dearHaoGeGe/Ebooks 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。
简单的说,Ribbon是Netflixf发布的开源项目,主要功能是提供醍醐的的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如:连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询、随机连接等)去连接这些机器。我们很容易的使用Ribbon实现自定义的负载均衡算法。
安全工具包,对Zuul代理中的负载均衡OAuth2客户端及登录认证进行支持。
微服务架构是指对微服务进行管理整合应用的。
微服务架构依赖于微服务,是在微服务基础之上的。
举例:医院中每一个科室都是一个独立的微服务,那么这个医院就是一个大型的微服务架构,就类似院长可以对下面的科室进行管理。微服务架构主要就是这种功能。
分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这种分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务。
举例:用户注册送积分事务、创建订单减库存事务,银行转账事务等都是分布式事务。
简单来说就是分布式事务用于在分布式系统中保证不同节点之间的数据一致性。
在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中分布式配置中心组件Spring Cloud Config支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。
Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持,可以方便的对微服务各个环境下的配置进行实时更新、集中式管理。
Spring Cloud Config分为Config Server和Config Client两部分。
Config Server负责读取配置文件,并且暴露Http API接口,Config Client通过调用Config Server的接口来读取配置文件。
使用方式:
1)添加pom依赖
2)配置文件添加相关配置
3)启动类添加注解@EnableConfigServer
Feign简化了RestTemplate代码,实现了Ribbon负载均衡,使代码变得更加简洁,也少了客户端调用的代码,所以Feign负载均衡是首选的。
Spring Cloud是一系列框架的有序集合,它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
Spring Cloud的子项目,大致可分成两大类:
一类是对现有成熟框架“Spring Boot化”的封装和抽象,也是数量最多的项目;
第二类是开发一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的是kafka, ActiveMQ这样的角色。
对于快速实践微服务的开发者来说,第一类子项目已经基本足够使用,如:
1)Spring Cloud Netflix是对Netflix开发的一套分布式服务框架的封装,包括服务的发现和注册,负载均衡、断路器、REST客户端、请求路由等;
2)Spring Cloud Config将配置信息中央化保存, 配置Spring Cloud Bus可以实现动态修改配置文件;
3)Spring Cloud Bus分布式消息队列,是对Kafka, MQ的封装;
4)Spring Cloud Security对Spring Security的封装,并能配合Netflix使用;
5)Spring Cloud Zookeeper对Zookeeper的封装,使之能配置其它Spring Cloud的子项目使用;
6)Spring Cloud Eureka是Spring Cloud Netflix微服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的服务治理功能。注意的是从2.x起,官方不会继续开源,若需要使用2.x,风险还是有的。但是我觉得问题并不大,eureka目前的功能已经非常稳定,就算不升级,服务注册/发现这些功能已经够用。consul是个不错的替代品,还有其他替代组件,后续篇幅会有详细赘述或关注微信公众号“Java精选”,有详细替代方案源码分享。
Spring Cloud优点:
1)服务拆分粒度更细,有利于资源重复利用,有利于提高开发效率,每个模块可以独立开发和部署、代码耦合度低;
2)可以更精准的制定优化服务方案,提高系统的可维护性,每个服务可以单独进行部署,升级某个模块的时候只需要单独部署对应的模块服务即可,效率更高;
3)微服务架构采用去中心化思想,服务之间采用Restful等轻量级通讯,比ESB更轻量,模块专一性提升,每个模块只需要关心自己模块所负责的功能即可,不需要关心其他模块业务,专一性更高,更便于功能模块开发和拓展;
4)技术选型不再单一,由于每个模块是单独开发并且部署,所以每个模块可以有更多的技术选型方案,如模块1数据库选择mysql,模块2选择用oracle也是可以的;
5)适于互联网时代,产品迭代周期更短。系统稳定性以及性能提升,由于微服务是几个服务共同组成的项目或者流程,因此相比传统单一项目的优点就在于某个模块提供的服务宕机过后不至于整个系统瘫痪掉,而且微服务里面的容灾和服务降级机制也能大大提高项目的稳定性;从性能而言,由于每个服务是单独部署,所以每个模块都可以有自己的一套运行环境,当某个服务性能低下的时候可以对单个服务进行配置或者代码上的升级,从而达到提升性能的目的。
Spring Cloud缺点:
1)微服务过多,治理成本高,不利于维护系统,服务之间接口调用成本增加,相比以往单项目的时候调用某个方法或者接口可以直接通过本地方法调用就能够完成,但是当切换成微服务的时候,调用方式就不能用以前的方式进行调试、目前主流采用的技术有http api接口调用、RPC、WebService等方式进行调用,调用成本比单个项目的时候有所增加;
2)分布式系统开发的成本高(容错,分布式事务等)对团队挑战大
2)独立的数据库,微服务产生事务一致性的问题,由于各个模块用的技术都各不相同、而且每个服务都会高并发进行调用,就会存在分布式事务一致性的问题;
3)分布式部署,造成运营的成本增加、相比较单个应用的时候,运营人员只需要对单个项目进行部署、负载均衡等操作,但是微服务的每个模块都需要这样的操作,增加了运行时的成本;
4)由于整个系统是通过各个模块组合而成的,因此当某个服务进行变更时需要对前后涉及的所有功能进行回归测试,测试功能不能仅限于当个模块,增加了测试难度和测试成本;
总体来说优点大过于缺点,目前看来Spring Cloud是一套非常完善的微服务框架,目前很多企业开始用微服务,Spring Cloud的优势是显而易见的。
基于Ribbon和Hystrix的声明式服务调用组件,可以动态创建基于Spring MVC注解的接口实现用于服务调用,在Spring Cloud 2.0中已经取代Feign成为了优选。
1、硬件故障:如服务器宕机,机房断电,光纤被挖断等。
2、流量激增:如异常流量,重试加大流量等。
3、缓存穿透:一般发生在应用重启,所有缓存失效时,以及短时间内大量缓存失效时。大量的缓存不命中,使请求直击后端服务,造成服务提供者超负荷运行,引起服务不可用。
4、程序BUG:如程序逻辑导致内存泄漏,JVM 长时间 FullGC 等。
5、同步等待:服务间采用同步调用模式,同步等待造成的资源耗尽。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。