分布式应⽤用核⼼心CAP知识:
CAP定理理: 指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不不可同时获得。
一致性(C):所有节点都可以访问到最新的数据
可用性(A):每个请求都是可以得到响应的,不不管请求是成功还是失败
分区容错性(P):除了全部整体⽹网络故障,其他故障都不不能导致整个系统不不可⽤用
CAP理理论就是说在分布式存储系统中,最多只能实现上⾯面的两点。⽽而由于当前的⽹网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。所以我们只能在一致性和可用性之间进⾏行行权衡。
各种注册中心支持的协议:
结论:
分布式系统中P,肯定要满⾜足,所以只能在CA中二选⼀没有最好的选择,最好的选择是根据业务场景来进⾏行行架构设计;
如果要求一致性,则选择zookeeper/Nacos,如⾦金金融⾏行业 CP;
如果要求可⽤用性,则Eureka/Nacos,如电商系统 AP
CP : 适合⽀支付、交易易类,要求数据强一致性,宁可业务不可⽤用,也不能出现脏数据
AP: 互联网业务,比如信息流架构,不要求数据强一致,更更想要服务可用。
base理论:
CAP 中的一致性和可用性进⾏行行一个权衡的结果,核心思想就是:我们无法做到强⼀一致,但每个应用都可以根据自身的业务特点,用适当的⽅方式来使系统达到最终一致性,
微服务中的面向失败编程:
限流、隔离、降级、熔断;
流量防卫兵sentinal
以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性
丰富的应⽤用场景:消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
完备的实时监控:Sentinel 同时提供实时的监控功能。
利用docker安装sentinel
1、导入依赖
<!--流量防卫兵Sentinal-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2、配置sentinel
sentinel:
transport:
dashboard: 10.229.34.58:8858
# port 是这个模块与sentinel进行交互的端口,不能被占用因此选择较大的
port: 9999
3、运行之后,可以在sentinel的控制台设置流量控制等信息。
sentinel的流控配置是在控制台直接设置
流量控制(flow control):原理是监控应⽤用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。
openfeign负载均衡整合sentinel流量控制
1、导入sentinel流量控制依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2、开启feign对sentinel的支持
feign:
sentinel:
enabled: true
3、创建容错类兜底数据,并实现service层中类的接口
@Service
public class VideoServiceFallBack implements VideoService {
@Override
public Video findById(int videoId) {
// 兜底数据执行
return null;
}
@Override
public int save(Video video) {
return 0;
}
}
service层中的VideoService接口需要配置fallback
@FeignClient(value = "xdclass-video-service",fallback = VideoServiceFallBack.class)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)