同步操作将从 Java精选/Ebooks 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这种分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务。
举例:用户注册送积分事务、创建订单减库存事务,银行转账事务等都是分布式事务。
简单来说就是分布式事务用于在分布式系统中保证不同节点之间的数据一致性。
Nginx是服务器负载均衡,客户端所有请求都会交给NGINX,然后又NGINX实现转发请求。即负载均衡是有服务端实现的。
Ribbon本地负载均衡,在调用微服务接口时候,会在注册中心获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。
简单的说就是讲用户的请求平摊分配到多个服务上,从而达到系统的HA(高可用)。
常见的负载均衡软件有Nginx、LVS,硬件有F5等。
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。
简单的说,Ribbon是Netflixf发布的开源项目,主要功能是提供醍醐的的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如:连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询、随机连接等)去连接这些机器。我们很容易的使用Ribbon实现自定义的负载均衡算法。
Close:关闭状态,所有的请求都能正常的访问。
Open:打开状态,所有的请求都会被降级。Hystrix会对请求情况进行计数,当一定时间内请求次数达到20次以上并且失败次数的阈值达到了50%,则触发熔断,断路器会被打开;所有的请求都不能正常的访问。
Half-Open:半打开状态;Open的状态不是永远的,当休眠5秒后会自动进去半打开状态;会释放部分请求通过,如果这些请求是成功的,那么就是完全关闭断路器;如果不成功,那么继续进行休眠5秒,重复流程。
Ribbon添加maven依赖spring-starter-ribbon使用@RibbonClient(value="服务名称") 使用RestTemplate调用远程服务对应的方法。
Feign添加maven依赖 spring-starter-feign服务提供方提供对外接口 调用方使用在接口上使用@FeignClient("指定服务名")。
Ribbon和Feign的区别:
Ribbon和Feign都是用于调用其他服务的,不过方式不同。
1、启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。
2、服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
3、调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。
Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。
针对不同场景分别有不同的解决方案,如下所示:
1、硬件故障:多机房容灾,跨机房路由,异地多活等。
2、流量激增:采用自动扩缩容以应对突发流量,或在负载均衡器上安装限流模块。
3、缓存穿透:缓存预加载、缓存异步加载等。
4、程序BUG:修改程序bug、及时释放资源等。
5、同步等待:资源隔离、MQ解耦、不可用服务调用快速失败等。资源隔离通常指不同服务调用采用不同的线程池;不可用服务调用快速失败一般通过超时机制,熔断器以及熔断后降级方法等方案实现。
流量控制的具体措施包括:
1)网关限流。
2)用户交互限流,采用加载动画,提高用户的忍耐等待时间;提交按钮添加强制等待时间机制。
3)关闭重试。
服务调用者降级服务的措施包括:
1)资源隔离,主要是对调用服务的线程池进行隔离。
2)对依赖服务进行分类。
3)不可用服务的调用快速失败。
1、硬件故障:如服务器宕机,机房断电,光纤被挖断等。
2、流量激增:如异常流量,重试加大流量等。
3、缓存穿透:一般发生在应用重启,所有缓存失效时,以及短时间内大量缓存失效时。大量的缓存不命中,使请求直击后端服务,造成服务提供者超负荷运行,引起服务不可用。
4、程序BUG:如程序逻辑导致内存泄漏,JVM 长时间 FullGC 等。
5、同步等待:服务间采用同步调用模式,同步等待造成的资源耗尽。
分布式系统架构中多个系统之间通常是通过远程RPC调用进行通信,也就是A系统调用B系统服务,B系统调用C系统服务等,实现方式有 Spring Boot+Dubbo实现微服务调用,以及各个公司自研的一些RPC框架等。当下游应用 C发生故障,而系统B没有服务降级的时候就可能会导致B,甚至系统A瘫痪,这种现象被称为雪崩效应。
Feign简化了RestTemplate代码,实现了Ribbon负载均衡,使代码变得更加简洁,也少了客户端调用的代码,所以Feign负载均衡是首选的。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。