1 Star 1 Fork 0

LiYu / springcloud2020

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

服务注册组件

组件名 语言 CAP 健康检查 对外接口 Springcloud集成
Eureka Java AP 可支持配置 HTTP 已集成
Consul Go CP 支持 HTTP/DNS 已集成
Zookeeper Java CP 支持 TCP 已集成
Nacos Java AP/CP 支持 HTTP/DNS/UDP 已集成
 CAP理论: Consistency 强一致性,Availability 可用性,Partition tolerance 分区容错性一个分布式系统最多只能同时满足两个。
 CAP理论核心:一个分布式系统不可能同时很好的满足一致性、可用性和分区容错性的三个要求。
 因此,根据CAP理论将NoSQL数据库分成满足CA原则、满足CP原则和满足AP原则三大类:
 CA:单点集群,满足一致性,可用性的系统,在扩展性上不太强大
 CP:满足一致性,分区容忍性的系统,通常性能不高
 AP:满足可用性,分区容忍性的系统,通常对一致性要求较低

负载均衡组件

  1. Ribbon本地负载均衡和Nginx服务负载均衡区别
Nginx是服务器端负载均衡,客户端所有请求都会发到Ngin,然后由Ngnix实现请求转发,即负载均衡。

Ribbon本地负载均衡,在调用微服务接口时,会在注册中心上获取注册信息服务列表之后缓存到本地,从而在本地实现RPC远程服务调用

2.Ribbon负载均衡算法(7大):轮询、随机、重试(轮询)、响应越快越被选择 3.Ribbon轮询负载均衡算法原理:

轮询算法:rest接口第几次请求数 % 服务器集群总数量=实际调用服务器位置下标,每次服务重启后rest接口计数从1开始。
  1. 手动实现轮询算法(在Eureka项目中):主要技术采用(CAS+自旋锁)

OpenFeign

Feign中包含了Ribbon,在此基础上进行改进,采用接口的方式来提供更加方便的HTTP请求

Hystrix服务降级

资料:Hystrix的Github

  1. 解决服务雪崩
  2. Hystrix的作用: 2.1 服务降级
服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的fallback(退路)错误处理信息。这样,虽然提供的是一个有损的服务,但却保证了整个系统的稳定性和可用性。

在客户端和服务服务端都可以使用服务熔断技术。在该项目中,对客户端和服务器端采用不同的降级处理方法,推荐使用客户端的降级处理方法。 2.1.1 服降级常见情况如下:

- 程序运行异常
- 服务请求超时
- 服务熔断会触发服务降级
- 线程池/信号量打满则会导致服务降级

2.2 服务熔断 在cloud-hystrix-provider-payment8002中进行服务熔断设计,常用配置如下:

@HystrixCommand(fallbackMethod = "paymentTimeOutFallbackMethod",
             commandProperties = {
                     @HystrixProperty(name = "circuitBreaker.enabled", value = "true"), // 是否开启熔断
                     @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"), // 请求次数
                     @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "1000"), // 时间窗口
                     @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "60") // 失败率到达多少进行熔断跳闸
             })
     public String paymentCircuitBreaker(@PathVariable("id") Integer id) {
         if (id < 0) {
             throw new RuntimeException("******id 不能为负数");
         }
         String serialNumber = IdUtil.simpleUUID();  //UUID.randomUUID();
         return Thread.currentThread().getName() + "\t" + "调用成功,流水号:" + serialNumber;
     }
 
     public String paymentTimeOutFallbackMethod(@PathVariable("id") Integer id){
         return "id 不能负数,请稍后再试,o(╥﹏╥)o  id:"+id;
     }

服务熔断的作用:

服务熔断的作用类似于我们家用的保险丝,当某服务出现访问量最大情况、不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。

2.3 服务限流

2.4 DashBoard熔断监控

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

在DashBoard和服务提供给模块中添加以上依赖,修改服务模块中的主函数.

avatar

空文件

简介

Spring cloud 微服务实战以及阿里Nacos 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/wukong-yu/springcloud2020.git
git@gitee.com:wukong-yu/springcloud2020.git
wukong-yu
springcloud2020
springcloud2020
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891