spring cloud
spring cloud五大组件是:
注册中心的作用
记录每个微服务所在的地方。
微服务A从注册中心得到微服务B的所有地址,微服务A内部负载均衡后就可以远程调用微服务B
注册中心怎么发现微服务?是微服务定期向注册中心发送心跳续约,没有发送心跳就挂机,注册那就从服务列表中删除该微服务的信息
nacos和eureka区别
不同点1
nacos临时实例采用心跳监测,主动发送心跳给注册中心
非临时实例是nacos主动来询问,你活着吗?心跳不正常不会被剔除
不同点2
主动推送变更信息
负载均衡怎么实现
ribbon负载均衡流程
ribbon负载均衡策略有:
retryRule:首先还是轮询,如果这个服务宕机失效,按照指定时间重试来获取服务
zoneAvoidanceRule:ribbon默认策略
自定义负载均衡怎么实现
在服务的发起方添加一个配置类(全局生效)、在yml配置文件里配置(指定了哪一个服务,所以局部生效)
服务雪崩
什么是服务雪崩??
一个微服务挂了,导致调用链后面的微服务全挂。
A调用B,B宕机了,A处理的速度变慢甚至无了,然后后面有更多的调用打到A,A服务的连接数是有限的,调用A失败的连接也不会断,导致后面更多的调用中不到服务,所以也宕机了
解决方法:
熔断降级(解决方法)
Hystix服务熔断降级
什么是服务降级?

利用feign接口发起远程调用时来降级。当接口访问正常,走正常逻辑,失败走下面的逻辑。抛出异常
太多请求都失败,导致降级大量
降级太多,触发熔断。
什么是熔断
10s内失败率到了50%,那就触发熔断
断路器有三个状态,关闭、打开、半开。
当访问全都成功,断路器就是关闭状态
10s内失败率到了50%,那就触发熔断,断路器打开,请求全部失败,某个微服务整体都不能用了,访问正常的接口也不能用了
熔断时间默认为5秒,每5s结束,就去尝试半开状态,尝试放行一次请求,如果失败,继续打开断路器,5s后再试。尝试请求成功,那就关闭断路器。所有请求就可以访问该服务
服务降级针对的是接口,而不是服务,部分服务不可用
服务熔断针对的整个服务不可用
限流(预防方法,不能解决)
微服务监控
为什么要微服务监控?
- 问题定位:当服务链路中一个微服务挂了,到底哪个微服务挂了,不好找,不好问题定位
- 性能分析:服务链路里,只要有一个服务响应慢了,整个链路都会慢。那怎么找那个慢的服务呢,怎么定位
- 服务关系:服务之间的调用复杂,难以清楚哪个服务调用了哪个服务,人工维护服务关系,不现实
- 服务告警:某一个服务出现问题,如何快速定位哪个服务出现问题
监控就能解决这四个问题
常见服务监控的工具
- Springboot-admin:监控普通微服务状态信息。功能单一,不采用
- prometheus+Grafana:功能强大,全面。用的多,但是搭建复杂
- zipkin:链路追踪工具。与代码有耦合,不用
- skywalking:链路追踪工具。相对优秀
skywalking
端点就是对外暴露的接口
每一个微服务就是一个服务,网关也是一个服务
实例:服务器实例、MySQL等