Appearance
1.SpringCloudAlibaba体系有哪些组件构成?分别用来干什么?
- Nacos:分布式注册与配置中心
- Sentinel:限流降级与熔断
- GateWay:网关
- Seata:分布式事务Seata
- OpenFeign:远程调用框架
- 特殊说明:分库分表环境下Seata无法正常工作,使用TX-LCN框架代替
2.Sentinel是如何实现流控的?
- 控制台指定流控规则,设置对指定微服务的指定路径,根据QPS达到阈值进入流控规则
- 到达阈值可设置三种流控规则:快速失败、预热模式和排队等待
- 流控模式:直接、关联和链路
- 关联:当关联的资源达到限流条件时,开启限流
- 链路:当从某个接口过来的资源达到限流条件时,开启限流
- 降级规则:当异常占比或异常数达到阈值,会返回特定数据,这个数据可以自定义
- 热点Key限流:可以根据方法的参数进行限流,比如限制单个商品QPS不超过10
3.单体架构与微服务如何抉择?
- 单体架构:适合只有一台服务器,但也能进行扩展,例如一个SpringBoot工程跑在多个服务器,使用Nginx进行负载均衡;
- 微服务:对服务进行拆分,方便水平扩展,负载均衡;例如订单服务流量高,那就多跑几个订单微服务即可,不需要多跑一整个项目。
- 但是系统更加复杂,会有很多重复开发
- 接口访问时间可能会增减,使用OpenFeign调用会产生网络延迟
- 如果只有一台服务器使用单体架构更好
4.什么是CAP,为什么不能都满足?那一项必须满足?
- 一致性:每次读取都会收到最新的写入数据或错误信息。
- 可用性:每个请求都会收到(非错误的)响应,但不能保证响应包含最新的写入数据。
- 分区容忍性:尽管网络节点之间会丢弃(或延迟)任意数量的消息,系统仍然能够继续运行。
- 一般必须保证分区容错性,即CP或AP
5.聊聊CP、AP、CA。
- CP:保障一致性舍弃可用性,会导致一定的延迟。
- AP:保证可用性的话,读操作不会收到写操作锁的影响,保障最终一致性,不会加长响应时间。
- CA:一般不会这么做,因为一旦出现网络分区,系统会无法工作,也就构不成一个分布式系统。
6.Redis是AP还是CP的?
AP的,数据采用异步复制,保障最终一致性。
7.分库分表会带来哪些问题?
所有的读和写操作,都需要带着分表字段,否则会进行全表扫描。
8.什么是分布式BASE理论?
- 基本可用BA:允许损失部分可用性(降级),即保证核心可用。
- 软状态S:允许系统存在中间状态,而该中间状态不会影响系统整体可用性,即主从复制时,复制的节点有短暂时间不是最新数据。
- 最终一致性E:副本经过一定时间后,最终能够达到一致的状态。