This is an automated email from the ASF dual-hosted git repository. ningjiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/servicecomb-pack.git
commit 235032b7b3c35c5d2d75d7388f11dea773901074 Author: Lei Zhang <coolbee...@gmail.com> AuthorDate: Sat Sep 21 02:18:00 2019 +0800 SCB-1368 Modify ES default batchSize 100 --- .../pack/alpha/fsm/FsmAutoConfiguration.java | 2 +- docs/fsm/fsm_manual_zh.md | 73 ++++++++-------------- 2 files changed, 26 insertions(+), 49 deletions(-) diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/FsmAutoConfiguration.java b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/FsmAutoConfiguration.java index 777ae3f..97430ba 100644 --- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/FsmAutoConfiguration.java +++ b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/FsmAutoConfiguration.java @@ -55,7 +55,7 @@ import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; @ConditionalOnProperty(value = {"alpha.feature.akka.enabled"}) public class FsmAutoConfiguration { - @Value("${alpha.feature.akka.transaction.repository.elasticsearch.batchSize:1000}") + @Value("${alpha.feature.akka.transaction.repository.elasticsearch.batchSize:100}") int repositoryElasticsearchBatchSize; @Value("${alpha.feature.akka.transaction.repository.elasticsearch.refreshTime:5000}") diff --git a/docs/fsm/fsm_manual_zh.md b/docs/fsm/fsm_manual_zh.md index 6368e0e..7e81473 100755 --- a/docs/fsm/fsm_manual_zh.md +++ b/docs/fsm/fsm_manual_zh.md @@ -139,43 +139,7 @@ Sub Transactions 面板:本事务包含的子事务ID,子事务状态,子 ## 集群 -参数 - -| 参数名 | 参数值 | 说明 | -| -------------------------- | ------ | ---- | -| server.port | 8090 | | -| alpha.server.port | 8080 | | -| alpha.feature.akka.enabled | true | | - -参数 - -| 参数名 | 参数值 | 说明 | -| ------------------------------- | ----------------- | ---- | -| alpha.feature.akka.channel.type | kafka | | -| spring.kafka.bootstrap-servers | 192.168.1.10:9092 | | -| | | | - -持久化参数 - -| 参数名 | 参数值 | 说明 | -| ---------------------------------------------- | -------------- | ---- | -| alpha.feature.akka.transaction.repository.type | elasticsearch | | -| spring.data.elasticsearch.cluster-name | docker-cluster | | -| spring.data.elasticsearch.cluster-nodes | localhost:9300 | | - -Akka - -| 参数名 | 参数值 | 说明 | -| ------------------------------------------------- | ------------------------------- | ---- | -| akkaConfig.akka.persistence.journal.plugin | akka-persistence-redis.journal | | -| akkaConfig.akka.persistence.snapshot-store.plugin | akka-persistence-redis.snapshot | | -| akkaConfig.akka-persistence-redis.redis.mode | simple | | -| akkaConfig.akka-persistence-redis.redis.host | localhost | | -| akkaConfig.akka-persistence-redis.redis.port | 6379 | | -| akkaConfig.akka-persistence-redis.redis.database | 0 | | -| | | | - -可以通过部署多个 Alpha 实现处理能力的水平扩展,集群依赖 Kafka 服务。 +可以通过部署多个 Alpha 实现处理能力的水平扩展和高可用,集群依赖 Kafka 服务。 * 启动 Kafka,可以使用 docker compose 方式启动,以下是一个 compose 文件样例 @@ -208,6 +172,7 @@ Akka --server.port=8090 \ --server.host=127.0.0.1 \ --alpha.server.port=8080 \ + --alpha.feature.akka.enabled=true \ --spring.datasource.url=jdbc:postgresql://0.0.0.0:5432/saga?useSSL=false \ --spring.datasource.username=saga \ --spring.datasource.password=password \ @@ -216,10 +181,8 @@ Akka --spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300 \ --akkaConfig.akka.remote.artery.canonical.port=8070 \ --akkaConfig.akka.cluster.seed-nodes[0]="akka://alpha-cluster@127.0.0.1:8070" \ - --akkaConfig.akka-persistence-redis.redis.mode=simple \ --akkaConfig.akka-persistence-redis.redis.host=127.0.0.1 \ --akkaConfig.akka-persistence-redis.redis.port=6379 \ - --akkaConfig.akka-persistence-redis.redis.database=0 \ --spring.profiles.active=prd,cluster ``` @@ -230,6 +193,7 @@ Akka --server.port=8091 \ --server.host=127.0.0.1 \ --alpha.server.port=8081 \ + --alpha.feature.akka.enabled=true \ --spring.datasource.url=jdbc:postgresql://0.0.0.0:5432/saga?useSSL=false \ --spring.datasource.username=saga \ --spring.datasource.password=password \ @@ -238,30 +202,43 @@ Akka --spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300 \ --akkaConfig.akka.remote.artery.canonical.port=8071 \ --akkaConfig.akka.cluster.seed-nodes[0]="akka://alpha-cluster@127.0.0.1:8070" \ - --akkaConfig.akka-persistence-redis.redis.mode=simple \ --akkaConfig.akka-persistence-redis.redis.host=127.0.0.1 \ --akkaConfig.akka-persistence-redis.redis.port=6379 \ - --akkaConfig.akka-persistence-redis.redis.database=0 \ --spring.profiles.active=prd,cluster ``` 集群参数说明 - server.port: REST 端口 + | 参数名 | 默认值 | 说明 | + | ------------------------------------------------------------ | ------ | ------------------------------------------ | + | server.port | 8090 | REST 端口,每个节点唯一 | + | alpha.server.port | 8080 | GRPC 端口,每个节点唯一 | + | spring.kafka.bootstrap-servers | | Kafka 访问地址 | +| kafka.numPartitions | 6 | Kafka 访问地址 | + | akkaConfig.akka.remote.artery.canonical.port | | Akka集群 端口,每个节点唯一 | + | akkaConfig.akka.cluster.seed-nodes[x] | | Akka集群种子节点地址,每个种子节点配置一行 | + | akkaConfig.akka-persistence-redis.redis.host | | Redis 服务地址 | + | akkaConfig.akka-persistence-redis.redis.port | | Redis 服务端口 | + | akkaConfig.akka-persistence-redis.redis.database | 0 | Redis 库名 | + | alpha.feature.akka.transaction.repository.elasticsearch.batchSize | 100 | ES批量提交大小 | + | alpha.feature.akka.transaction.repository.elasticsearch.refreshTime | 5000 | ES定时提交间隔 | + | spring.profiles.active | | 激活配置,必须填写 prd,cluster | - alpha.server.port: gRPC 端口 +## 高可用 - alpha.feature.akka.channel.type: 数据通道类型配置成 kafka +集群部署时当一个节点宕机,那么另外一个节点会自动接管宕机节点未结束的 Actor - spring.kafka.bootstrap-servers: kafka 地址,多个地址逗号分隔 +**注意:** Alpha 采用"至少一次"的方式从 Kafka 接收事物事件,所以请确保 Kafka 服务的可靠性 - +**注意:** Alpha 状态机采用 Redis 存储当前状态,并在节点宕机后通过 Redis 在集群其他节点上恢复状态机,所以请确保 Redis 服务的可靠性 +**注意:** `alpha.feature.akka.transaction.repository.elasticsearch.batchSize` 设置的批量提交ES参数默认是100,在数据可靠性要求较高的场景请将此参数设置为 0 +## 动态扩容 -## 后续计划 +Alpha 收到事件消息后会放入 Kafka,Alpha 集群中的所有节点从 Kafka 中消费数据并发送给状态机处理,默认创建的 Topic 分区数量是 6,当你部署的集群节点数大于 6 时,你可以通过 `kafka.numPartitions` 参数修改默认分区数 -Akka集群支持 +## 后续计划 APIs 集成 Swagger