ServiceComb Pack 0.5.0 版本开始我们尝试使用状态机模型解决分布式事务中复杂的事件和状态关系,我们将 Alpha 看作一个可以记录每个全局事务不同状态的的盒子,Alpha 收到 Omega 发送的事务消息(全局事务启动、全局事务停止,全局事务失败,子事务启动,子事务停止,子事务失败等等)后完成一些动作(等待、补偿、超时)和状态切换。
分布式事务的事件使我们面临很复杂的情况,我们希望可以通过一种DSL来清晰的定义状态机,并且能够解决状态机本身的持久化和分布式问题,再经过尝试后我们觉得 Akka 是一个不错的选择。下面请跟我一起体验一下这个新功能。
ServiceComb Pack 0.5.0 开始支持 Saga 状态机模式,你只需要在启动 Alpha 和 Omega 端程序时增加 alpha.feature.akka.enabled=true
参数。你可以在 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 --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.6.2
启动 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.feature.akka.enabled=true \ --alpha.feature.akka.transaction.repository.type=elasticsearch \ --spring.data.elasticsearch.cluster-name=docker-cluster \ --spring.data.elasticsearch.cluster-nodes=localhost:9300 \ --spring.profiles.active=prd
Alpha WEB 管理界面
浏览器中打开 http://localhost:8090/admin
状态机模式开启后,我们还提供了一个简单的管理界面,你可以在这个界面上看到 Alpha 的性能指标、全局事务统计和事务明细
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 中的指标值重启后自动归零