Skip to content

lyw2015/micro

Repository files navigation

Micro 微服务集成测试

微服务版本

  • spring-boot: 2.6.3
  • spring-cloud: 2021.0.1
  • spring-cloud-alibaba: 2021.0.1.0

相关组件:

  • 网关:Gateway
  • 配置中心&服务注册与发现:Nacos
  • RPC:OpenFeign
  • 熔断限流:Sentinel
    • 修改部分sentinel-dashboard源码,将规则配置保存到Nacos中
  • 连接池:Druid
  • 数据库:MySql
  • 缓存:Redis
  • 分布式事务:Seata
    • 使用AT模式
  • 分布式锁:Redisson
  • 分布式ID:uid-generator
    • 使用Spring Boot重写百度的uid-generator
    • 使用Feign以及HTTP方式暴露ID获取API
    • 提取参数配置至yaml
# UID Generator
uid-generator:
  # 对于并发数要求不高、期望长期使用的应用, 可增加timeBits位数, 减少seqBits位数.
  # 例如节点采取用完即弃的WorkerIdAssigner策略, 重启频率为12次/天, 那么配置成{"workerBits":23,"timeBits":31,"seqBits":9}时,
  # 可支持28个节点以整体并发量14400 UID/s的速度持续运行68年.

  # 对于节点重启频率频繁、期望长期使用的应用, 可增加workerBits和timeBits位数, 减少seqBits位数.
  # 例如节点采取用完即弃的WorkerIdAssigner策略, 重启频率为24*12次/天, 那么配置成{"workerBits":27,"timeBits":30,"seqBits":6}时,
  # 可支持37个节点以整体并发量2400 UID/s的速度持续运行34年.
  timeBits: 29
  workerBits: 21
  seqBits: 13
  epochStr: 2016-09-20
  # RingBuffer size扩容参数, 可提高UID生成的吞吐量.
  # 默认:3, 原bufferSize=8192, 扩容后bufferSize= 8192 << 3 = 65536
  boostPower: 3
  # 指定何时向RingBuffer中填充UID, 取值为百分比(0, 100), 默认为50
  # 举例: bufferSize=1024, paddingFactor=50 -> threshold=1024 * 50 / 100 = 512.
  # 当环上可用UID数量 < 512时, 将自动对RingBuffer进行填充补全
  paddingFactor: 30
  # 另外一种RingBuffer填充时机, 在Schedule线程中, 周期性检查填充
  # 默认:不配置此项, 即不实用Schedule线程. 如需使用, 请指定Schedule线程时间间隔, 单位:秒
  scheduleInterval: 60
  • 读写分离:AbstractRoutingDataSource + Mybatis Interceptor
    • 实现一主多从
    • 实现多Slave下的获取方式配置;loop(轮询)、random(随机)
    • 可动态配置数据源,无需重启
    • 当有事务时默认使用Master库
    • master库必须配置,slave库按需配置(key可随意配置但不能重复;eg: slave, slave02, 112_ms)
spring:
  datasource:
    druid:
      # 获取slave数据源方式:轮询:loop、随机:random,slave数据源只有一个时不生效
      slave-change-strategy: loop
      data-sources:
        master:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3306/micro-stock?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
          username: root
          password: root
        slave:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://192.168.47.112:3306/micro-stock?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
          username: root
          password: root
        micro-mysql:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://192.168.47.113:3306/micro-stock?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
          username: root
          password: root

快速开始

步骤1:环境准备

步骤2:建库

在数据库中分别创建如下Schema,文件在Sql目录:

步骤3:修改配置

当前项目以Nacos的namespace区分环境;在各服务的bootstrap.yaml文件中指定spring.profiles.active的值,并在bootstrap-环境字符.yaml文件中指定Nacos中namespace ID

根据自身环境修改如下配置文件或者在Nacos的dev环境中修改,Nacos的配置会覆盖本地配置。

步骤4:中间件配置&启动

步骤5:启动服务

步骤6:简单示例

  • nacos nacos-config.png nacos-service.png

  • sentinel-dashboard sentinel-gateway.png

  • 模仿下单,该操作涉及如下技术点

    • RPC: OpenFeign(调用库存、通知及分布式ID服务)
    • 分布式ID: uid-generator(用于生成订单编号;仅作测试使用,实际应用中不建议用来生成订单编号)
    • 分布式锁: Redisson(扣除库存)
    • 分布式事务: Seata AT模式(多服务下保证数据一致性)
    • 消息队列:Rabbit
      • 消息通知
      • 订单支付倒计时
        • TTL + 死信队列
        • 插件rabbitmq_delayed_message_exchange
    GET http://localhost:8081/order/order/buy

    order-buy

分布式部署v1

本次部署暂未接入CI/CD,全部在本地虚拟机上采用docker-compose实现组件和服务的安装部署; 集成nginx + keepalived实现服务的高可用;

系统架构

Micro系统架构V1

About

微服务中各组件集成测试;包含Gateway、Nacos、OpenFeign、Seata、Sentinel、Redis、Redisson、分布式ID和读写分离等组件

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published