1、Nacos

Nacos是阿里巴巴开源的一款支持服务注册与发现,配置管理以及微服务管理的组件。用来取代以前常用的注册中心(zookeeper , eureka等等),以及配置中心(spring cloud config等等)。Nacos是集成了注册中心和配置中心的功能,做到了二合一。
默认访问ip:8848/nacos即可跳到视图管理界面,账号密码都为nacos
注册中心使用nacos:

  1. 配置nacos注册中心的依赖
  2. 在某个微服务里的配置文件指定nacos的地址。再指定applicatin.name告诉注册到nacos中以什么命名
  3. 使用 @EnableDiscoveryClient 注解开启服务注册与发现功能
  4. 最后application.yml内容,配置了服务中心名和当前模块名字

配置中心使用nacos:

  1. 配置nacos配置中心的依赖
  2. 项目中创建bootstrap.properties ,这个文件是springboot里规定的,他优先级别application.properties高
  3. 在使用到动态取配置文件数据的类上加@RefreshScope来动态的刷新配置
  4. 在nacos可视化界面配置列表中配置,发布之后即可动态修改配置中心的配置

配置中心的的四种配置方式:

  1. 命名空间:用作配置隔离。(一般每个微服务一个命名空间)
    1. 默认public。默认新增的配置都在public空间下
    2. 开发、测试、开发可以用命名空间分割。properties每个空间有一份。
    3. 在bootstrap.properties里配置命名空间的ID
    4. 也可以为每个微服务配置一个命名空间,微服务互相隔离
  2. 配置集:一组相关或不相关配置项的集合。
  3. 配置集ID:类似于配置文件名,即Data ID
  4. 配置分组:默认所有的配置集都属于DEFAULT_GROUP。双十一,618的优惠策略改分组即可

最终方案:每个微服务创建自己的命名空间,然后使用配置分组区分环境(dev/test/prod)
使用多配置集
我们要把原来application.yml里的内容都分文件抽离出去。我们在nacos里创建好后,在coupons里指定要导入的配置即可。

  1. # bootstrap.properties文件
  2. spring.application.name=gulimall-coupon
  3. spring.cloud.nacos.config.server-addr=127.0.0.1:8848
  4. # 可以选择对应的命名空间 # 写上对应环境的命名空间ID
  5. spring.cloud.nacos.config.namespace=b176a68a-6800-4648-833b-be10be8bab00
  6. # 更改配置分组
  7. spring.cloud.nacos.config.group=dev
  8. #新版本不建议用下面的了
  9. #spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
  10. #spring.cloud.nacos.config.ext-config[0].group=dev
  11. #spring.cloud.nacos.config.ext-config[0].refresh=true
  12. #spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
  13. #spring.cloud.nacos.config.ext-config[1].group=dev
  14. #spring.cloud.nacos.config.ext-config[1].refresh=true
  15. #spring.cloud.nacos.config.ext-config[2].data-id=other.yml
  16. #spring.cloud.nacos.config.ext-config[2].group=dev
  17. #spring.cloud.nacos.config.ext-config[2].refresh=true
  18. spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
  19. spring.cloud.nacos.config.extension-configs[0].group=dev
  20. spring.cloud.nacos.config.extension-configs[0].refresh=true
  21. spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
  22. spring.cloud.nacos.config.extension-configs[1].group=dev
  23. spring.cloud.nacos.config.extension-configs[1].refresh=true
  24. spring.cloud.nacos.config.extension-configs[2].data-id=other.yml
  25. spring.cloud.nacos.config.extension-configs[2].group=dev
  26. 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交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
      solution.png
      image.png

      3、Sentinel

      随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从熔断、降级、限流、系统负载保护等多个维度保护服务的稳定性。
  1. 熔断
    1. A 服务调用 B 服务的某个功能,由于网络不稳定问题,或者 B 服务卡机,导致功能时间超长,如果这样子的次数太多,我们可以直接将 B 断路了,(A 不在请求 B 接口)凡是调用 B 服务的直接返回降级数据,不必等待 B 的 超时执行,这样 B 的故障问题,就不会级联影响到 A。
  2. 降级
    1. 整个网站处于流量高峰期服务器压力剧增,根据当前自身业务情况以及流量,对一些服务和页面进行有策略的降级/停止服务,所有的调用直接返回降级数据以此缓解服务器资源的压力,以保证核心业务的正常运行,同时也保持了客户和大部分客户等到正确的响应。
    2. 相同点
      1. 为了保证集群大部分服务的可用性和可靠性,防止崩溃,牺牲小我
      2. 用户最终都是体验到某个功能不可用
    3. 不同点:
      1. 熔断是被调用方的故障,触发系统的主动规则
      2. 降级是基于全局的考虑停止一些正常服务,释放资源
  3. 限流
    1. 对打入的服务的请求流量进行控制,使服务能够承担不超过自己能力的流量压力

image.png

4、Sleuth+Zipkin服务链路追踪

image.pngimage.png
image.png
image.png