1、Nacos
Nacos是阿里巴巴开源的一款支持服务注册与发现,配置管理以及微服务管理的组件。用来取代以前常用的注册中心(zookeeper , eureka等等),以及配置中心(spring cloud config等等)。Nacos是集成了注册中心和配置中心的功能,做到了二合一。
默认访问ip:8848/nacos即可跳到视图管理界面,账号密码都为nacos
注册中心使用nacos:
- 配置nacos注册中心的依赖
- 在某个微服务里的配置文件指定nacos的地址。再指定applicatin.name告诉注册到nacos中以什么命名
- 使用 @EnableDiscoveryClient 注解开启服务注册与发现功能
- 最后application.yml内容,配置了服务中心名和当前模块名字
配置中心使用nacos:
- 配置nacos配置中心的依赖
- 项目中创建bootstrap.properties ,这个文件是springboot里规定的,他优先级别application.properties高
- 在使用到动态取配置文件数据的类上加@RefreshScope来动态的刷新配置
- 在nacos可视化界面配置列表中配置,发布之后即可动态修改配置中心的配置
配置中心的的四种配置方式:
- 命名空间:用作配置隔离。(一般每个微服务一个命名空间)
- 默认public。默认新增的配置都在public空间下
- 开发、测试、开发可以用命名空间分割。properties每个空间有一份。
- 在bootstrap.properties里配置命名空间的ID
- 也可以为每个微服务配置一个命名空间,微服务互相隔离
- 配置集:一组相关或不相关配置项的集合。
- 配置集ID:类似于配置文件名,即Data ID
- 配置分组:默认所有的配置集都属于DEFAULT_GROUP。双十一,618的优惠策略改分组即可
最终方案:每个微服务创建自己的命名空间,然后使用配置分组区分环境(dev/test/prod)
使用多配置集
我们要把原来application.yml里的内容都分文件抽离出去。我们在nacos里创建好后,在coupons里指定要导入的配置即可。
# bootstrap.properties文件
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 可以选择对应的命名空间 # 写上对应环境的命名空间ID
spring.cloud.nacos.config.namespace=b176a68a-6800-4648-833b-be10be8bab00
# 更改配置分组
spring.cloud.nacos.config.group=dev
#新版本不建议用下面的了
#spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
#spring.cloud.nacos.config.ext-config[0].group=dev
#spring.cloud.nacos.config.ext-config[0].refresh=true
#spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
#spring.cloud.nacos.config.ext-config[1].group=dev
#spring.cloud.nacos.config.ext-config[1].refresh=true
#spring.cloud.nacos.config.ext-config[2].data-id=other.yml
#spring.cloud.nacos.config.ext-config[2].group=dev
#spring.cloud.nacos.config.ext-config[2].refresh=true
spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
spring.cloud.nacos.config.extension-configs[0].group=dev
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
spring.cloud.nacos.config.extension-configs[1].group=dev
spring.cloud.nacos.config.extension-configs[1].refresh=true
spring.cloud.nacos.config.extension-configs[2].data-id=other.yml
spring.cloud.nacos.config.extension-configs[2].group=dev
spring.cloud.nacos.config.extension-configs[2].refresh=true
2、Seata
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
- 一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
- 二阶段:
- 提交异步化,非常快速地完成。
- 回滚通过一阶段的回滚日志进行反向补偿。
TC (Transaction Coordinator) - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚。TM (Transaction Manager) - 事务管理器
定义全局事务的范围:开始全局事务、提交或回滚全局事务。RM (Resource Manager) - 资源管理器
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。3、Sentinel
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从熔断、降级、限流、系统负载保护等多个维度保护服务的稳定性。
- 熔断
- A 服务调用 B 服务的某个功能,由于网络不稳定问题,或者 B 服务卡机,导致功能时间超长,如果这样子的次数太多,我们可以直接将 B 断路了,(A 不在请求 B 接口)凡是调用 B 服务的直接返回降级数据,不必等待 B 的 超时执行,这样 B 的故障问题,就不会级联影响到 A。
- 降级
- 整个网站处于流量高峰期服务器压力剧增,根据当前自身业务情况以及流量,对一些服务和页面进行有策略的降级/停止服务,所有的调用直接返回降级数据以此缓解服务器资源的压力,以保证核心业务的正常运行,同时也保持了客户和大部分客户等到正确的响应。
- 相同点
- 为了保证集群大部分服务的可用性和可靠性,防止崩溃,牺牲小我
- 用户最终都是体验到某个功能不可用
- 不同点:
- 熔断是被调用方的故障,触发系统的主动规则
- 降级是基于全局的考虑停止一些正常服务,释放资源
- 限流
- 对打入的服务的请求流量进行控制,使服务能够承担不超过自己能力的流量压力