状态机模式

ServiceComb Pack 0.5.0 版本开始我们尝试使用状态机模型解决分布式事务中复杂的事件和状态关系,我们将 Alpha 看作一个可以记录每个全局事务不同状态的的盒子,Alpha 收到 Omega 发送的事务消息(全局事务启动、全局事务停止,全局事务失败,子事务启动,子事务停止,子事务失败等等)后完成一些动作(等待、补偿、超时)和状态切换。

分布式事务的事件使我们面临很复杂的情况,我们希望可以通过一种DSL来清晰的定义状态机,并且能够解决状态机本身的持久化和分布式问题,再经过尝试后我们觉得 Akka 是一个不错的选择。下面请跟我一起体验一下这个新功能。

重大更新

  • 使用 Akka 状态机代替基于表扫描的状态判断
  • 性能提升一个数量级,事件吞吐量每秒1.8w+,全局事务处理量每秒1.2k+
  • 内置健康指标采集器,可清晰了解系统瓶颈
  • 支持分布式集群
  • 向前兼容原有 gRPC 协议
  • 全新的可视化监控界面
  • 开放全新的 API

快速开始

ServiceComb Pack 0.5.0 开始支持 Saga 状态机模式,你只需要在启动 Alpha 时增加 alpha.spec.names=saga-akka 参数 和 Omega 端程序时增加 omega.spce.names=saga 参数。你可以在 docker hub 找到一个 docker-compose 文件,也可以按照以下方式部署。

注意: 启用状态机模式后,Saga事务会工作在状态机模式,TCC依然采用数据库方式 注意: 0.6.0+ 版本 Omega 端程序不需要配置 alpha.feature.akka.enabled=true 参数

  • 启动 PostgresSQL

    docker run -d -e "POSTGRES_DB=saga" -e "POSTGRES_USER=saga" -e "POSTGRES_PASSWORD=password" -p 5432:5432 postgres
    
  • 启动 Elasticsearch

    docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.17.1
    
  • 启动 Alpha

    java -jar alpha-server-${version}-exec.jar \
      --spring.datasource.url=jdbc:postgresql://0.0.0.0:5432/saga?useSSL=false \
      --spring.datasource.username=saga \
      --spring.datasource.password=password \
      --alpha.spec.names=saga-akka \
      --alpha.spec.saga.akka.channel.name=memory \
      --alpha.spec.saga.akka.repository.name=elasticsearch \
      --alpha.spec.saga.akka.repository.elasticsearch.uris=http://127.0.0.1:9200 \
      --spring.profiles.active=prd  
    
  • Alpha WEB 管理界面

    浏览器中打开 http://localhost:8090/admin

WEB 管理界面

状态机模式开启后,我们还提供了一个简单的管理界面,你可以在这个界面上看到 Alpha 的性能指标、全局事务统计和事务明细

仪表盘

ui-dashboard

  • Dashboard 仪表盘上方显示已经结束的全局事务数量

    TOTAL:总事务数

    SUCCESSFUL:成功结束事务数

    COMPENSATED:成功补偿结束事务数

    FAILED:失败(挂起)事务数

  • Active Transactions 活动事务计数器

    COMMITTED:从启动到现在累计成功结束的事务数

    COMPENSATED:从启动到现在累计补偿的事务数

    SUSPENDED:从启动到现在累计挂起的事务数

  • Active Transactions 组件计数器

    Events、Actors、Sagas、DB是一组计数器,分别显示Alpha系统中每个处理组件的处理前、处理后计数器以及平均处理事件,通过跟踪这些指标可以了解系统当前的性能以及瓶颈

    Events:显示 Alpha 收到的事件数量、受理的事件数量、拒绝的事件数量、平均每个事件的处理时间

    Actors:显示状态机收到的事件数量、受理的事件数量、拒绝的事件数量、平均每个事件的处理时间

    Sagas:显示开始的全局事务数量、结束的全局事务数量、平均每个全局事务的处理时间

    DB:显示持久化ES组件收到的已结束全局事务数量、持久化到ES中的全局事务数量

  • Top 10 Slow Transactions

    显示最慢的前十个事务,点击后可以看到这个慢事务的明细信息

  • System Info

    显示了当前 Alpha 服务的系统,JVM,线程等信息

**注意:**Active Transactions 中的指标值重启后自动归零

Saga 事务查询列表