Spring官方介绍 [⚠️Spring官方对Spring Cloud Alibaba的更新不及时]
Spring Cloud Alibaba官网
代码记录
Nacos(Dynamic Naming and Configuration Service, Nacos),一个易于构建 Al Agent 应用的动态服务发现、配置管理和AI智能体管理平台。
Nacos = Eureka + Config + Bus = Spring Cloud Consul
Nacos官网
组件名 | 语言 | CAP | 服务健康检查 | 对外暴露接口 | Spring Cloud集成 |
---|---|---|---|---|---|
Eureka | Java | AP | 可配支持 | HTTP | 已集成 |
Consul | Go | CP | 支持 | HTTP/DNS | 已集成 |
Zookeeper | Java | CP | 支持 | 客户端 | 已集成 |
Nacos | Java | AP | 支持 | 客户端 | 已集成 |
Nacos 在阿里巴巴内部有超过 10 万的实例运行,已经过了类似双十一等各种大型流量的考验,Nacos默认是AP模式,
但也可以调整切换为CP,一般用默认AP即可。
下载与安装
主要配合spring-cloud-starter-alibaba-nacos-discovery
服务发现:yml配置nacos相关配置、主启动配置EnableDiscoveryClient注解
调用注册中心中的服务:只需在配置中增加RestTemplate的bean,并增加loadbalancer注解,调用服务的接口时将host写成服务名称即可
主要配合spring-cloud-starter-alibaba-nacos-discovery
nacos端配置文件DataId的命名规则:
p r e f i x − {prefix}- prefix−{spring.profiles.active}.${file-extension}
目的是解决 多环境、多项目、多配置文件的管理
Nacos 数据模型 Key 由三元组(Namespace,Group,DataId)唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP。
面向分布式、多语言异构化服务架构的流量治理组件。
从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性
Sentinel官网/Github
Sentinel后台端口8719,前台端口8080,前台用户名密码都是sentinel
SentinelResource是一个流量防卫组件注解,用于指定防护资源,对配置的资源进行流量控制、熔断降级等功能。
SentinelResource注解配置说明
注意fallback与blockHandler的区别
流控规则说明
Sentinel能够对流量进行控制,主要是监控应用的QPS流量或者并发线程数等指标,如果达到指定的阈值时,就会被流量进行控制,以避免服务被瞬时的高并发流量击垮,保证服务的高可靠性。
流控模式
流控效果
Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。
熔断规则说明
热点即经常访问的数据,很多时候我们希望统计或者限制某个热点数据中访问频次最高的TopN数据,并对其访问进修限流或者其他操作
热点规则说明
简单来说就是对指定入参限流,sentinel还可以有参数例外项,即对特定的参数值不限流,其他的参数值都限流
对请求分黑白名单
来源访问控制说明
⚠️注意要实现RequestOriginParser再配合可视化端
⚠️面试重灾区,Seata分布式三大模式的原理需要仔细了解
背景:一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题;但是关系型数据库提供的能力是单机事务,一但遇到分布式事务场景,就需要通过更多其他技术手段来解决问题。
Seata(Simple Extensible Autonomous Transaction Architecture), 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
Seata官网/Github, Alibaba开发,2023.10.29捐赠给Apache
Seata部署
Seata对分布式事务的协调和控制就是1+3
三个组件相互协作,TC以Seata服务器形式独立部署,TM和RM则是以Seata Client的形式集成在微服务中运行
流程: