Spring cloud
Springcloude五大组件
1.服务注册发现中心 ncaos
2.负载均衡 熔断 Sentinel
3.网关 getway
4.服务调用 feign
服务注册和服务发现是什么
服务注册者,服务发现者,注册中心 三者关系
Nacos与eureka

0.Nacos支持服务端主动检测服务提供者状态,而Eureka依赖客户端心跳。
-
Nacos区分临时实例和非临时实例,采用不同的健康检查策略。
-
Nacos支持服务列表变更的消息推送,使服务更新更及时。
-
Nacos集群默认采用AP模式,但在存在非临时实例时,会采用CP模式;而Eureka始终采用AP模式。
项目的负载均衡
在服务调用过程中,我们使用Spring Cloud的Ribbon组件来实现客户端负载均衡。Feign客户端在底层已经集成了Ribbon,使得使用非常简便。
当发起远程调用时,Ribbon首先从注册中心获取服务地址列表,然后根据预设的路由策略选择一个服务实例进行调用,常用的策略是轮询。


naocs写入了地址,openfeiogn,按照这样来拿
- 你在项目中引入
spring-cloud-starter-alibaba-nacos-discovery(Nacos 发现适配包);- Ribbon 会通过这个适配包,向 Nacos 发起请求,获取目标服务的地址列表;
- Ribbon 选好实例后,把地址交给 OpenFeign 发起调用;
- 整个过程中,Nacos 只是 Ribbon 的 "地址数据源",而非 Ribbon 的 "宿主"。
Nacos 提供地址,Ribbon 做负载均衡,Feign 负责发起调用。Feign 内置 Ribbon,Nacos 不内置 Ribbon。

Ribbon负载均衡策略有哪些?

如果想自定义负载均衡策略如何实现?
当 target-service 有多个实例(如 8080、8081 端口),OpenFeign 会通过内置的 Ribbon 以轮询策略自动选择实例调用,实现负载均衡。
OpenFeign
什么是服务雪崩



微服务健康

链路追踪工具

我们项目中采用的skywalking进行监控的 1,skywalking主要可以监控接口、服务、物理实例的一些状态。特别是在压测的时候可以看到众多服务中哪些服务和接口比较慢,我们可以针对性的分析和优化。 2,我们还在skywalking设置了告警规则,特别是在项目上线以后,如果报错,我们分别设置了可以给相关负责人发短信和发邮件,第一时间知道项目的bug情况,第一时间修复
业务相关
限流
业务层方面
tomcat限流
nginx限流
Sentinel限流
系统机器方面
采用k8s资源限制,或者动态调控
算法显卡
令牌桶
适配大型的请求,最大请求

漏斗
匀速请求

Cap

C 一致性 用户访问分布式系统中的任意节点,得到的数据必须一致
vailability (可用性):用户访问集群中的任意健康节点,必须能得到响应,而不是超时或拒绝
Partition(分区):因为网络故障或其它原因导致分布式系统中的部分节点与其它节点失去连接,形成独立分区。 Tolerance(容错):在集群出现分区时,整个系统也要持续对外提供服务
分布式系统节点之间肯定是需要网络连接的,分区(P)是必然存在的
如果保证访问的高可用性(A),可以持续对外提供服务,但不能保证数据的强一致性--> AP
如果保证访问的数据强一致性(C),就要放弃高可用性 --> CP
Base理论
BASE理论是对CAP的一种解决思路,包含三个思想:
Basically Available (基本可用):分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。
Soft State(软状态):在一定时间内,允许出现中间状态,比如临时的不一致状态。
Eventually Consistent(最终一致性):虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致。
分布式事务
MQ
Seata

Xa

AT模式

TCC

分布式事务
MQ模式实现分布式事务,在A服务写数据的时候,需要在同一个事务内发送消息到另外一个事务,异步,性能最好
需要保证MQ的可靠性
接口幂等

Redis解决

分布式锁

分布式任务调度



xxl-job任务执行失败怎么解决?
故障转移+失败重试,查看日志分析----> 邮件告警
如果有大数据量的任务同时都需要执行,怎么解决?
