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 9dca5c1b92b40eccacf8d1ed1800c1117d1098e0 Author: Lei Zhang <[email protected]> AuthorDate: Thu Apr 7 22:17:03 2022 +0800 Update document --- alpha/alpha-benchmark/README.md | 2 +- docs/fsm/eventchannel_zh.md | 56 --------------------- docs/{fsm => spec-saga-akka}/akka_zh.md | 0 docs/{fsm => spec-saga-akka}/apis_zh.md | 0 .../assets/alpha-cluster-architecture.png | Bin .../assets/benchmark-alpha-1.png | Bin .../assets/benchmark-alpha-2.png | Bin .../assets/cmd-0.4.0-1w-100.png | Bin .../assets/cmd-0.4.0-1w-500.png | Bin .../assets/cmd-0.5.0-1w-100.png | Bin .../assets/cmd-0.5.0-1w-1000.png | Bin .../assets/cmd-0.5.0-1w-2000.png | Bin .../assets/cmd-0.5.0-1w-500.png | Bin .../assets/cmd-0.5.0-5w-1000.png | Bin .../assets/cmd-0.5.0-5w-2000.png | Bin .../assets/cmd-0.5.0-5w-3000.png | Bin docs/{fsm => spec-saga-akka}/assets/fsm.png | Bin .../assets/saga_state_diagram.png | Bin .../{fsm => spec-saga-akka}/assets/state_table.png | Bin .../assets/ui-dashboard.png | Bin .../assets/ui-transaction-details-compensated.png | Bin .../ui-transaction-details-failed-timeout.png | Bin ...ui-transaction-details-failed-unpredictable.png | Bin .../assets/ui-transaction-details-failed.png | Bin .../assets/ui-transaction-details-successful.png | Bin .../assets/ui-transactions-list.png | Bin .../assets/vm-0.4.0-1w-100.png | Bin .../assets/vm-0.4.0-1w-500.png | Bin .../assets/vm-0.5.0-1w-100.png | Bin .../assets/vm-0.5.0-1w-1000.png | Bin .../assets/vm-0.5.0-1w-2000.png | Bin .../assets/vm-0.5.0-1w-500.png | Bin .../assets/vm-0.5.0-5w-1000.png | Bin .../assets/vm-0.5.0-5w-2000.png | Bin .../assets/vm-0.5.0-5w-3000.png | Bin docs/{fsm => spec-saga-akka}/benchmark_zh.md | 11 ++-- docs/{fsm => spec-saga-akka}/design_fsm_zh.md | 0 docs/spec-saga-akka/eventchannel_zh.md | 56 +++++++++++++++++++++ docs/{fsm => spec-saga-akka}/fsm_manual.md | 51 +++++++++---------- docs/{fsm => spec-saga-akka}/fsm_manual_zh.md | 35 +++++++------ docs/{fsm => spec-saga-akka}/persistence_zh.md | 12 ++--- .../plantuml/saga-state-diagram.puml | 0 docs/user_guide.md | 28 +++++++++-- docs/user_guide_zh.md | 32 +++++++++--- 44 files changed, 159 insertions(+), 124 deletions(-) diff --git a/alpha/alpha-benchmark/README.md b/alpha/alpha-benchmark/README.md index 32d01e7e..27658475 100644 --- a/alpha/alpha-benchmark/README.md +++ b/alpha/alpha-benchmark/README.md @@ -70,7 +70,7 @@ java \ -Dcom.sun.management.jmxremote.port=9090 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false \ - -jar alpha-server-0.5.0-SNAPSHOT-exec.jar \ + -jar alpha-server-0.7.0-SNAPSHOT-exec.jar \ --spring.datasource.username=saga-user \ --spring.datasource.password=saga-password \ --spring.datasource.url="jdbc:postgresql://0.0.09.0:5432/saga?useSSL=false" \ diff --git a/docs/fsm/eventchannel_zh.md b/docs/fsm/eventchannel_zh.md deleted file mode 100644 index 207eb935..00000000 --- a/docs/fsm/eventchannel_zh.md +++ /dev/null @@ -1,56 +0,0 @@ -# 事件通道 - -Alpha 收到 Omeag 发送的事件后放入事件通道等待 Akka 处理,事件通道有三种实现方式,一种是内存通道另外是 Kafka,Rabbit 通道 - -| 通道类型 | 模式 | 说明 | -| -------- | ---- | ------------------------------------------------------------ | -| memory | 单例 | 使用内存作为数据通道,不建议在生产环境使用 | -| kafka | 集群 | 使用 Kafka 作为数据通道,使用全局事务ID作为分区策略,集群中的所有节点同时工作,可水平扩展,当配置了 spring.profiles.active=prd,cluster 参数后默认就使用 kafka 通道 | -| rabbit | 集群 | 使用 rabbit 作为数据通道,使用全局事务ID作为分区策略, 由于rabbit 原生不支持分区,所以引用了 [spring-cloud-stream](https://github.com/spring-cloud/spring-cloud-stream-binder-rabbit) | - - 可以使用参数 `alpha.feature.akka.channel.type` 配置通道类型 - -- Memory 通道参数 - -| 参数名 | 参数值 | 说明 | -| -------------------------------------- | ------ | ------------------------------------------- | -| alpha.feature.akka.channel.type | memory | | -| alpha.feature.akka.channel.memory.size | -1 | momory类型时内存队列大小,-1表示Integer.MAX | - -- Kafka 通道参数 - -| 参数名 | 参数值 | 说明 | -| --------------------------------------- | -------- | ------------------------------------------- | -| alpha.feature.akka.channel.type | kafka | | -| spring.kafka.bootstrap-servers | -1 | momory类型时内存队列大小,-1表示Integer.MAX | -| spring.kafka.producer.batch-size | 16384 | | -| spring.kafka.producer.retries | 0 | | -| spring.kafka.producer.buffer.memory | 33554432 | | -| spring.kafka.consumer.auto.offset.reset | earliest | | -| spring.kafka.listener.pollTimeout | 1500 | | -| kafka.numPartitions | 6 | | -| kafka.replicationFactor | 1 | | - -- Rabbit 通道参数 - -| 参数名 | 参数值 | 说明 | -| --------------------------------------- | -------- | ------------------------------------------- | -| alpha.feature.akka.channel.type | rabbit | | -| spring.cloud.stream.instance-index | 0 | 分区索引| -| spring.cloud.stream.instance-count | 1 | | -| spring.cloud.stream.bindings.service-comb-pack-producer.producer.partition-count| 1|分区数量,分区数量需要与alpha-server保持一致| -| spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.virtual-host| servicecomb-pack | | -| spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.host | rabbitmq.servicecomb.io | | -| spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.username | servicecomb-pack | | -| spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.password | H123213PWD || -|spring.cloud.stream.binders.defaultRabbit.type|rabbit| -|spring.cloud.stream.bindings.service-comb-pack-producer.destination|exchange-service-comb-pack|| -|spring.cloud.stream.bindings.service-comb-pack-producer.content-type|application/json| -|spring.cloud.stream.bindings.service-comb-pack-producer.producer.partition-key-expression|headers['partitionKey'] | 分区表达式 -|spring.cloud.stream.bindings.service-comb-pack-consumer.group|group-pack| -|spring.cloud.stream.bindings.service-comb-pack-consumer.content-type|application/json| -|spring.cloud.stream.bindings.service-comb-pack-consumer.destination|exchange-service-comb-pack| -spring.cloud.stream.bindings.service-comb-pack-consumer.consumer.partitioned|true| - - - diff --git a/docs/fsm/akka_zh.md b/docs/spec-saga-akka/akka_zh.md similarity index 100% rename from docs/fsm/akka_zh.md rename to docs/spec-saga-akka/akka_zh.md diff --git a/docs/fsm/apis_zh.md b/docs/spec-saga-akka/apis_zh.md similarity index 100% rename from docs/fsm/apis_zh.md rename to docs/spec-saga-akka/apis_zh.md diff --git a/docs/fsm/assets/alpha-cluster-architecture.png b/docs/spec-saga-akka/assets/alpha-cluster-architecture.png similarity index 100% rename from docs/fsm/assets/alpha-cluster-architecture.png rename to docs/spec-saga-akka/assets/alpha-cluster-architecture.png diff --git a/docs/fsm/assets/benchmark-alpha-1.png b/docs/spec-saga-akka/assets/benchmark-alpha-1.png similarity index 100% rename from docs/fsm/assets/benchmark-alpha-1.png rename to docs/spec-saga-akka/assets/benchmark-alpha-1.png diff --git a/docs/fsm/assets/benchmark-alpha-2.png b/docs/spec-saga-akka/assets/benchmark-alpha-2.png similarity index 100% rename from docs/fsm/assets/benchmark-alpha-2.png rename to docs/spec-saga-akka/assets/benchmark-alpha-2.png diff --git a/docs/fsm/assets/cmd-0.4.0-1w-100.png b/docs/spec-saga-akka/assets/cmd-0.4.0-1w-100.png similarity index 100% rename from docs/fsm/assets/cmd-0.4.0-1w-100.png rename to docs/spec-saga-akka/assets/cmd-0.4.0-1w-100.png diff --git a/docs/fsm/assets/cmd-0.4.0-1w-500.png b/docs/spec-saga-akka/assets/cmd-0.4.0-1w-500.png similarity index 100% rename from docs/fsm/assets/cmd-0.4.0-1w-500.png rename to docs/spec-saga-akka/assets/cmd-0.4.0-1w-500.png diff --git a/docs/fsm/assets/cmd-0.5.0-1w-100.png b/docs/spec-saga-akka/assets/cmd-0.5.0-1w-100.png similarity index 100% rename from docs/fsm/assets/cmd-0.5.0-1w-100.png rename to docs/spec-saga-akka/assets/cmd-0.5.0-1w-100.png diff --git a/docs/fsm/assets/cmd-0.5.0-1w-1000.png b/docs/spec-saga-akka/assets/cmd-0.5.0-1w-1000.png similarity index 100% rename from docs/fsm/assets/cmd-0.5.0-1w-1000.png rename to docs/spec-saga-akka/assets/cmd-0.5.0-1w-1000.png diff --git a/docs/fsm/assets/cmd-0.5.0-1w-2000.png b/docs/spec-saga-akka/assets/cmd-0.5.0-1w-2000.png similarity index 100% rename from docs/fsm/assets/cmd-0.5.0-1w-2000.png rename to docs/spec-saga-akka/assets/cmd-0.5.0-1w-2000.png diff --git a/docs/fsm/assets/cmd-0.5.0-1w-500.png b/docs/spec-saga-akka/assets/cmd-0.5.0-1w-500.png similarity index 100% rename from docs/fsm/assets/cmd-0.5.0-1w-500.png rename to docs/spec-saga-akka/assets/cmd-0.5.0-1w-500.png diff --git a/docs/fsm/assets/cmd-0.5.0-5w-1000.png b/docs/spec-saga-akka/assets/cmd-0.5.0-5w-1000.png similarity index 100% rename from docs/fsm/assets/cmd-0.5.0-5w-1000.png rename to docs/spec-saga-akka/assets/cmd-0.5.0-5w-1000.png diff --git a/docs/fsm/assets/cmd-0.5.0-5w-2000.png b/docs/spec-saga-akka/assets/cmd-0.5.0-5w-2000.png similarity index 100% rename from docs/fsm/assets/cmd-0.5.0-5w-2000.png rename to docs/spec-saga-akka/assets/cmd-0.5.0-5w-2000.png diff --git a/docs/fsm/assets/cmd-0.5.0-5w-3000.png b/docs/spec-saga-akka/assets/cmd-0.5.0-5w-3000.png similarity index 100% rename from docs/fsm/assets/cmd-0.5.0-5w-3000.png rename to docs/spec-saga-akka/assets/cmd-0.5.0-5w-3000.png diff --git a/docs/fsm/assets/fsm.png b/docs/spec-saga-akka/assets/fsm.png similarity index 100% rename from docs/fsm/assets/fsm.png rename to docs/spec-saga-akka/assets/fsm.png diff --git a/docs/fsm/assets/saga_state_diagram.png b/docs/spec-saga-akka/assets/saga_state_diagram.png similarity index 100% rename from docs/fsm/assets/saga_state_diagram.png rename to docs/spec-saga-akka/assets/saga_state_diagram.png diff --git a/docs/fsm/assets/state_table.png b/docs/spec-saga-akka/assets/state_table.png similarity index 100% rename from docs/fsm/assets/state_table.png rename to docs/spec-saga-akka/assets/state_table.png diff --git a/docs/fsm/assets/ui-dashboard.png b/docs/spec-saga-akka/assets/ui-dashboard.png similarity index 100% rename from docs/fsm/assets/ui-dashboard.png rename to docs/spec-saga-akka/assets/ui-dashboard.png diff --git a/docs/fsm/assets/ui-transaction-details-compensated.png b/docs/spec-saga-akka/assets/ui-transaction-details-compensated.png similarity index 100% rename from docs/fsm/assets/ui-transaction-details-compensated.png rename to docs/spec-saga-akka/assets/ui-transaction-details-compensated.png diff --git a/docs/fsm/assets/ui-transaction-details-failed-timeout.png b/docs/spec-saga-akka/assets/ui-transaction-details-failed-timeout.png similarity index 100% rename from docs/fsm/assets/ui-transaction-details-failed-timeout.png rename to docs/spec-saga-akka/assets/ui-transaction-details-failed-timeout.png diff --git a/docs/fsm/assets/ui-transaction-details-failed-unpredictable.png b/docs/spec-saga-akka/assets/ui-transaction-details-failed-unpredictable.png similarity index 100% rename from docs/fsm/assets/ui-transaction-details-failed-unpredictable.png rename to docs/spec-saga-akka/assets/ui-transaction-details-failed-unpredictable.png diff --git a/docs/fsm/assets/ui-transaction-details-failed.png b/docs/spec-saga-akka/assets/ui-transaction-details-failed.png similarity index 100% rename from docs/fsm/assets/ui-transaction-details-failed.png rename to docs/spec-saga-akka/assets/ui-transaction-details-failed.png diff --git a/docs/fsm/assets/ui-transaction-details-successful.png b/docs/spec-saga-akka/assets/ui-transaction-details-successful.png similarity index 100% rename from docs/fsm/assets/ui-transaction-details-successful.png rename to docs/spec-saga-akka/assets/ui-transaction-details-successful.png diff --git a/docs/fsm/assets/ui-transactions-list.png b/docs/spec-saga-akka/assets/ui-transactions-list.png similarity index 100% rename from docs/fsm/assets/ui-transactions-list.png rename to docs/spec-saga-akka/assets/ui-transactions-list.png diff --git a/docs/fsm/assets/vm-0.4.0-1w-100.png b/docs/spec-saga-akka/assets/vm-0.4.0-1w-100.png similarity index 100% rename from docs/fsm/assets/vm-0.4.0-1w-100.png rename to docs/spec-saga-akka/assets/vm-0.4.0-1w-100.png diff --git a/docs/fsm/assets/vm-0.4.0-1w-500.png b/docs/spec-saga-akka/assets/vm-0.4.0-1w-500.png similarity index 100% rename from docs/fsm/assets/vm-0.4.0-1w-500.png rename to docs/spec-saga-akka/assets/vm-0.4.0-1w-500.png diff --git a/docs/fsm/assets/vm-0.5.0-1w-100.png b/docs/spec-saga-akka/assets/vm-0.5.0-1w-100.png similarity index 100% rename from docs/fsm/assets/vm-0.5.0-1w-100.png rename to docs/spec-saga-akka/assets/vm-0.5.0-1w-100.png diff --git a/docs/fsm/assets/vm-0.5.0-1w-1000.png b/docs/spec-saga-akka/assets/vm-0.5.0-1w-1000.png similarity index 100% rename from docs/fsm/assets/vm-0.5.0-1w-1000.png rename to docs/spec-saga-akka/assets/vm-0.5.0-1w-1000.png diff --git a/docs/fsm/assets/vm-0.5.0-1w-2000.png b/docs/spec-saga-akka/assets/vm-0.5.0-1w-2000.png similarity index 100% rename from docs/fsm/assets/vm-0.5.0-1w-2000.png rename to docs/spec-saga-akka/assets/vm-0.5.0-1w-2000.png diff --git a/docs/fsm/assets/vm-0.5.0-1w-500.png b/docs/spec-saga-akka/assets/vm-0.5.0-1w-500.png similarity index 100% rename from docs/fsm/assets/vm-0.5.0-1w-500.png rename to docs/spec-saga-akka/assets/vm-0.5.0-1w-500.png diff --git a/docs/fsm/assets/vm-0.5.0-5w-1000.png b/docs/spec-saga-akka/assets/vm-0.5.0-5w-1000.png similarity index 100% rename from docs/fsm/assets/vm-0.5.0-5w-1000.png rename to docs/spec-saga-akka/assets/vm-0.5.0-5w-1000.png diff --git a/docs/fsm/assets/vm-0.5.0-5w-2000.png b/docs/spec-saga-akka/assets/vm-0.5.0-5w-2000.png similarity index 100% rename from docs/fsm/assets/vm-0.5.0-5w-2000.png rename to docs/spec-saga-akka/assets/vm-0.5.0-5w-2000.png diff --git a/docs/fsm/assets/vm-0.5.0-5w-3000.png b/docs/spec-saga-akka/assets/vm-0.5.0-5w-3000.png similarity index 100% rename from docs/fsm/assets/vm-0.5.0-5w-3000.png rename to docs/spec-saga-akka/assets/vm-0.5.0-5w-3000.png diff --git a/docs/fsm/benchmark_zh.md b/docs/spec-saga-akka/benchmark_zh.md similarity index 95% rename from docs/fsm/benchmark_zh.md rename to docs/spec-saga-akka/benchmark_zh.md index 256f4c0f..44432d15 100644 --- a/docs/fsm/benchmark_zh.md +++ b/docs/spec-saga-akka/benchmark_zh.md @@ -67,13 +67,12 @@ java \ -Dcom.sun.management.jmxremote.port=9090 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false \ - -jar alpha-server-0.5.0-SNAPSHOT-exec.jar \ - --spring.datasource.username=saga-user \ - --spring.datasource.password=saga-password \ - --spring.datasource.url="jdbc:postgresql://10.22.1.234:5432/saga?useSSL=false" \ + -jar alpha-server-0.7.0-SNAPSHOT-exec.jar \ + --alpha.spec.names=saga-akka \ + --alpha.spec.saga.akka.repository.name=elasticsearch \ + --alpha.spec.saga.akka.repository.elasticsearch.uris=http://127.0.0.1:9200 \ --spring.profile.active=prd \ - --alpha.feature.nativetransport=true \ - --alpha.feature.akka.enabled=true + --alpha.feature.nativetransport=true ``` ## 测试报告 diff --git a/docs/fsm/design_fsm_zh.md b/docs/spec-saga-akka/design_fsm_zh.md similarity index 100% rename from docs/fsm/design_fsm_zh.md rename to docs/spec-saga-akka/design_fsm_zh.md diff --git a/docs/spec-saga-akka/eventchannel_zh.md b/docs/spec-saga-akka/eventchannel_zh.md new file mode 100644 index 00000000..34cdc487 --- /dev/null +++ b/docs/spec-saga-akka/eventchannel_zh.md @@ -0,0 +1,56 @@ +# 事件通道 + +Alpha 收到 Omeag 发送的事件后放入事件通道等待 Akka 处理,事件通道有三种实现方式,一种是内存通道另外是 Kafka,Rabbit 通道 + +| 通道类型 | 模式 | 说明 | +| -------- | ---- | ------------------------------------------------------------ | +| memory | 单例 | 使用内存作为数据通道,不建议在生产环境使用 | +| kafka | 集群 | 使用 Kafka 作为数据通道,使用全局事务ID作为分区策略,集群中的所有节点同时工作,可水平扩展,当配置了 spring.profiles.active=prd,cluster 参数后默认就使用 kafka 通道 | +| rabbit | 集群 | 使用 rabbit 作为数据通道,使用全局事务ID作为分区策略, 由于rabbit 原生不支持分区,所以引用了 [spring-cloud-stream](https://github.com/spring-cloud/spring-cloud-stream-binder-rabbit) | + + 可以使用参数 `alpha.spec.saga.akka.channel.name` 配置通道类型 + +- Memory 通道参数 + +| 参数名 | 参数值 | 说明 | +| -------------------------------------- | ------ | ------------------------------------------- | +| alpha.spec.saga.akka.channel.name | memory | | +| alpha.spec.saga.akka.channel.max-length | -1 | momory类型时内存队列大小,-1表示Integer.MAX | + +- Kafka 通道参数 + +| 参数名 | 参数值 | 说明 | +|---------------------------------------------------------------| -------- | ------------------------------------------- | +| alpha.spec.saga.akka.channel.name | kafka | | +| alpha.spec.saga.akka.channel.kafka.bootstrap-servers | -1 | momory类型时内存队列大小,-1表示Integer.MAX | +| alpha.spec.saga.akka.channel.kafka.producer.batch-size | 16384 | | +| alpha.spec.saga.akka.channel.kafka.producer.retries | 0 | | +| alpha.spec.saga.akka.channel.kafka.producer.buffer.memory | 33554432 | | +| alpha.spec.saga.akka.channel.kafka.consumer.auto.offset.reset | earliest | | +| alpha.spec.saga.akka.channel.kafka.listener.pollTimeout | 1500 | | +| alpha.spec.saga.akka.channel.kafka.numPartitions | 6 | | +| alpha.spec.saga.akka.channel.kafka.replicationFactor | 1 | | + +- Rabbit 通道参数 + +| 参数名 | 参数值 | 说明 | +|-------------------------------------------------------------------------------------------|----------------------------|------------------------------| +| alpha.spec.saga.akka.channel.name | rabbit | | +| spring.cloud.stream.instance-index | 0 | 分区索引 | +| spring.cloud.stream.instance-count | 1 | | +| spring.cloud.stream.bindings.service-comb-pack-producer.producer.partition-count | 1 | 分区数量,分区数量需要与alpha-server保持一致 | +| spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.virtual-host | servicecomb-pack | | +| spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.host | rabbitmq.servicecomb.io | | +| spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.username | servicecomb-pack | | +| spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.password | H123213PWD | | +| spring.cloud.stream.binders.defaultRabbit.type | rabbit | | +| spring.cloud.stream.bindings.service-comb-pack-producer.destination | exchange-service-comb-pack | | +| spring.cloud.stream.bindings.service-comb-pack-producer.content-type | application/json | | +| spring.cloud.stream.bindings.service-comb-pack-producer.producer.partition-key-expression | headers['partitionKey'] | 分区表达式 | +| spring.cloud.stream.bindings.service-comb-pack-consumer.group | group-pack | | +| spring.cloud.stream.bindings.service-comb-pack-consumer.content-type | application/json | | +| spring.cloud.stream.bindings.service-comb-pack-consumer.destination | exchange-service-comb-pack | | +| spring.cloud.stream.bindings.service-comb-pack-consumer.consumer.partitioned | true | | + + + diff --git a/docs/fsm/fsm_manual.md b/docs/spec-saga-akka/fsm_manual.md similarity index 85% rename from docs/fsm/fsm_manual.md rename to docs/spec-saga-akka/fsm_manual.md index da8327cf..3626e034 100755 --- a/docs/fsm/fsm_manual.md +++ b/docs/spec-saga-akka/fsm_manual.md @@ -16,7 +16,7 @@ ServiceComb Pack 0.5.0 版本开始我们尝试使用状态机模型解决分布 ## 快速开始 -ServiceComb Pack 0.5.0 开始支持 Saga 状态机模式,你只需要在启动 Alpha 和 Omega 端程序时增加 `alpha.feature.akka.enabled=true` 参数。你可以在 [docker hub](https://hub.docker.com/r/coolbeevip/servicecomb-pack) 找到一个 docker-compose 文件,也可以按照以下方式部署。 +ServiceComb Pack 0.5.0 开始支持 Saga 状态机模式,你只需要在启动 Alpha 时增加 `alpha.spec.names=saga-akka` 参数 和 Omega 端程序时增加 `omega.spce.names=saga` 参数。你可以在 [docker hub](https://hub.docker.com/r/coolbeevip/servicecomb-pack) 找到一个 docker-compose 文件,也可以按照以下方式部署。 **注意:** 启用状态机模式后,Saga事务会工作在状态机模式,TCC依然采用数据库方式 **注意:** 0.6.0+ 版本 Omega 端程序不需要配置 `alpha.feature.akka.enabled=true` 参数 @@ -30,7 +30,7 @@ ServiceComb Pack 0.5.0 开始支持 Saga 状态机模式,你只需要在启动 * 启动 Elasticsearch ```bash - docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.17.1 + docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.17.1 ``` * 启动 Alpha @@ -40,9 +40,10 @@ ServiceComb Pack 0.5.0 开始支持 Saga 状态机模式,你只需要在启动 --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.elasticsearch.rest.uris=http://127.0.0.1:9200 \ + --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 ``` @@ -95,7 +96,7 @@ ServiceComb Pack 0.5.0 开始支持 Saga 状态机模式,你只需要在启动 * System Info - 显示了当前 Alpha 服务的系统,JVM,线程等信息 + 显示了当前 Alpha 服务的系统,JVM,线程等信息 **注意:**Active Transactions 中的指标值重启后自动归零 @@ -145,7 +146,7 @@ Sub Transactions 面板:本事务包含的子事务ID,子事务状态,子  -上边是 Alpha 集群的工作架构图,表示部署了两个 Alpha 节点,分别是 8070 和 8071(这两编号是 [Gossip](https://en.wikipedia.org/wiki/Gossip_protocol) 协议的通信端口)。Omega 消息被发送到 Kafka ,并使用 globalTxId 作为分区策略,这保证了同一个全局事务下的子事务可以被有序的消费。KafkaConsumer 负责从 Kafak 中读取事件并发送给集群分片器 ShardingCoordinator,ShardingCoordinator 负责在 Alpha 集群中创建 SagaActor 并发送这个消息。运行中的 SagaActor 接收到消息后会持久化到 Redis 中,当这个集群中的节点奔溃后可以在集群其他节点恢复 SagaActor 以及它的状态。当 SagaActor 结束后就会将这一笔全局事务的数据存储到 ES。 +上边是 Alpha 集群的工作架构图,表示部署了两个 Alpha 节点,分别是 8070 和 8071(这两编号是 [Gossip](https://en.wikipedia.org/wiki/Gossip_protocol) 协议的通信端口)。Omega 消息被发送到 Kafka ,并使用 globalTxId 作为分区策略,这保证了同一个全局事务下的子事务可以被有序的消费。KafkaConsumer 负责从 Kafka 中读取事件并发送给集群分片器 ShardingCoordinator,ShardingCoordinator 负责在 Alpha 集群中创建 SagaActor 并发送这个消息。运行中的 SagaActor 接收到消息后会持久化到 Redis 中,当这个集群中的节点奔溃后可以在集群其他节点恢复 SagaActor 以及它的状态。当 SagaActor 结束后就会将这一笔全局事务的数据存储到 ES。 启动 Alpha 集群非常容易,首先启动集群需要用到的中间件 Kafka Redis PostgreSQL/MySQL ElasticSearch,你使用 Docker 启动他们(在生产环境建议使用一个更可靠的部署方式),下边提供了一个 docker compose 文件 servicecomb-pack-middleware.yml,你可以直接使用命令 `docker-compose -f servicecomb-pack-middleware.yml up -d` 启动它。 @@ -215,14 +216,14 @@ services: * 端口规划 | 节点 | gRPC 端口 | REST 端口 | Gossip 端口 | - | ------- | --------- | --------- | ----------- | + | ------- | --------- | --------- | ----------- | | Alpha 1 | 8080 | 8090 | 8070 | | Alpha 2 | 8081 | 8091 | 8071 | * 集群参数 | 参数名 | 说明 | - | ------------------------------------------------ | ------------------------------------------------------------ | + | ------------------------------------------------ | ------------------------------------------------------------ | | server.port | REST 端口,默认值 8090 | | alpha.server.port | gRPC 端口,默认值 8080 | | akkaConfig.akka.remote.artery.canonical.port | Gossip 端口,默认值 8070 | @@ -236,16 +237,15 @@ services: * 启动 Alpha 1 ```bash - java -jar alpha-server-0.6.0-SNAPSHOT-exec.jar \ + java -jar alpha-server-0.7.0-SNAPSHOT-exec.jar \ --server.port=8090 \ --server.host=127.0.0.1 \ --alpha.server.port=8080 \ - --alpha.feature.akka.enabled=true \ - --spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/saga?useSSL=false \ - --spring.datasource.username=saga \ - --spring.datasource.password=password \ - --spring.kafka.bootstrap-servers=127.0.0.1:9092 \ - --spring.elasticsearch.rest.uris=http://127.0.0.1:9200 \ + --alpha.spec.names=saga-akka \ + --alpha.spec.saga.akka.repository.name=elasticsearch \ + --alpha.spec.saga.akka.repository.elasticsearch.uris=http://127.0.0.1:9200 \ + --alpha.spec.saga.akka.channel.name=kafka \ + --alpha.spec.saga.akka.channel.kafka.bootstrap-servers=127.0.0.1:9092 \ --akkaConfig.akka.remote.artery.canonical.port=8070 \ --akkaConfig.akka.cluster.seed-nodes[0]="akka://[email protected]:8070" \ --akkaConfig.akka-persistence-redis.redis.host=127.0.0.1 \ @@ -256,16 +256,15 @@ services: * 启动 Alpha 2 ```bash - java -jar alpha-server-0.6.0-SNAPSHOT-exec.jar \ + java -jar alpha-server-0.7.0-SNAPSHOT-exec.jar \ --server.port=8091 \ --server.host=127.0.0.1 \ --alpha.server.port=8081 \ - --alpha.feature.akka.enabled=true \ - --spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/saga?useSSL=false \ - --spring.datasource.username=saga \ - --spring.datasource.password=password \ - --spring.kafka.bootstrap-servers=127.0.0.1:9092 \ - --spring.elasticsearch.rest.uris=http://127.0.0.1:9200 \ + --alpha.spec.names=saga-akka \ + --alpha.spec.saga.akka.repository.name=elasticsearch \ + --alpha.spec.saga.akka.repository.elasticsearch.uris=http://127.0.0.1:9200 \ + --alpha.spec.saga.akka.channel.name=kafka \ + --alpha.spec.saga.akka.channel.kafka.bootstrap-servers=127.0.0.1:9092 \ --akkaConfig.akka.remote.artery.canonical.port=8071 \ --akkaConfig.akka.cluster.seed-nodes[0]="akka://[email protected]:8070" \ --akkaConfig.akka-persistence-redis.redis.host=127.0.0.1 \ @@ -275,14 +274,14 @@ services: ## 动态扩容 -- Alpha 支持通过动态增加节点的的方式实现在线处理能力扩容 -- Alpha 默认创建的 Kafka Topic 分区数量是 6,也就是说 Alpha 集群节点大于6个时将不能再提升处理性能,你可以根据规划在初次启动的时候使用 `kafka.numPartitions` 参数修改自动创建的 Topic 分区数 +* Alpha 支持通过动态增加节点的的方式实现在线处理能力扩容 +* Alpha 默认创建的 Kafka Topic 分区数量是 6,也就是说 Alpha 集群节点大于6个时将不能再提升处理性能,你可以根据规划在初次启动的时候使用 `kafka.numPartitions` 参数修改自动创建的 Topic 分区数 ## 附件 [事件通道](eventchannel_zh.md) -[持久化](persistence_zh.md) +[事务数据持久化](persistence_zh.md) [Akka 配置](akka_zh.md) diff --git a/docs/fsm/fsm_manual_zh.md b/docs/spec-saga-akka/fsm_manual_zh.md similarity index 90% rename from docs/fsm/fsm_manual_zh.md rename to docs/spec-saga-akka/fsm_manual_zh.md index 31a03670..2a4323d2 100755 --- a/docs/fsm/fsm_manual_zh.md +++ b/docs/spec-saga-akka/fsm_manual_zh.md @@ -16,7 +16,7 @@ ServiceComb Pack 0.5.0 版本开始我们尝试使用状态机模型解决分布 ## 快速开始 -ServiceComb Pack 0.5.0 开始支持 Saga 状态机模式,你只需要在启动 Alpha 和 Omega 端程序时增加 `alpha.feature.akka.enabled=true` 参数。你可以在 [docker hub](https://hub.docker.com/r/coolbeevip/servicecomb-pack) 找到一个 docker-compose 文件,也可以按照以下方式部署。 +ServiceComb Pack 0.5.0 开始支持 Saga 状态机模式,你只需要在启动 Alpha 时增加 `alpha.spec.names=saga-akka` 参数 和 Omega 端程序时增加 `omega.spce.names=saga` 参数。你可以在 [docker hub](https://hub.docker.com/r/coolbeevip/servicecomb-pack) 找到一个 docker-compose 文件,也可以按照以下方式部署。 **注意:** 启用状态机模式后,Saga事务会工作在状态机模式,TCC依然采用数据库方式 **注意:** 0.6.0+ 版本 Omega 端程序不需要配置 `alpha.feature.akka.enabled=true` 参数 @@ -40,9 +40,10 @@ ServiceComb Pack 0.5.0 开始支持 Saga 状态机模式,你只需要在启动 --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.elasticsearch.rest.uris=http://127.0.0.1:9200 \ + --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 ``` @@ -236,16 +237,15 @@ services: * 启动 Alpha 1 ```bash - java -jar alpha-server-0.6.0-SNAPSHOT-exec.jar \ + java -jar alpha-server-0.7.0-SNAPSHOT-exec.jar \ --server.port=8090 \ --server.host=127.0.0.1 \ --alpha.server.port=8080 \ - --alpha.feature.akka.enabled=true \ - --spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/saga?useSSL=false \ - --spring.datasource.username=saga \ - --spring.datasource.password=password \ - --spring.kafka.bootstrap-servers=127.0.0.1:9092 \ - --spring.elasticsearch.rest.uris=http://127.0.0.1:9200 \ + --alpha.spec.names=saga-akka \ + --alpha.spec.saga.akka.repository.name=elasticsearch \ + --alpha.spec.saga.akka.repository.elasticsearch.uris=http://127.0.0.1:9200 \ + --alpha.spec.saga.akka.channel.name=kafka \ + --alpha.spec.saga.akka.channel.kafka.bootstrap-servers=127.0.0.1:9092 \ --akkaConfig.akka.remote.artery.canonical.port=8070 \ --akkaConfig.akka.cluster.seed-nodes[0]="akka://[email protected]:8070" \ --akkaConfig.akka-persistence-redis.redis.host=127.0.0.1 \ @@ -256,16 +256,15 @@ services: * 启动 Alpha 2 ```bash - java -jar alpha-server-0.6.0-SNAPSHOT-exec.jar \ + java -jar alpha-server-0.7.0-SNAPSHOT-exec.jar \ --server.port=8091 \ --server.host=127.0.0.1 \ --alpha.server.port=8081 \ - --alpha.feature.akka.enabled=true \ - --spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/saga?useSSL=false \ - --spring.datasource.username=saga \ - --spring.datasource.password=password \ - --spring.kafka.bootstrap-servers=127.0.0.1:9092 \ - --spring.elasticsearch.rest.uris=http://127.0.0.1:9200 \ + --alpha.spec.names=saga-akka \ + --alpha.spec.saga.akka.repository.name=elasticsearch \ + --alpha.spec.saga.akka.repository.elasticsearch.uris=http://127.0.0.1:9200 \ + --alpha.spec.saga.akka.channel.name=kafka \ + --alpha.spec.saga.akka.channel.kafka.bootstrap-servers=127.0.0.1:9092 \ --akkaConfig.akka.remote.artery.canonical.port=8071 \ --akkaConfig.akka.cluster.seed-nodes[0]="akka://[email protected]:8070" \ --akkaConfig.akka-persistence-redis.redis.host=127.0.0.1 \ diff --git a/docs/fsm/persistence_zh.md b/docs/spec-saga-akka/persistence_zh.md similarity index 90% rename from docs/fsm/persistence_zh.md rename to docs/spec-saga-akka/persistence_zh.md index c49eed96..225fb20c 100644 --- a/docs/fsm/persistence_zh.md +++ b/docs/spec-saga-akka/persistence_zh.md @@ -15,12 +15,12 @@ ### 持久化参数 -| 参数名 | 默认值 | 说明 | -| ------------------------------------------------------------ | ------ |------------------------------------------| -| alpha.feature.akka.transaction.repository.type | | 持久化类型,目前可选值 elasticsearch,如果不设置则不存储 | -| alpha.feature.akka.transaction.repository.elasticsearch.batchSize | 100 | elasticsearch 批量入库数量 | -| alpha.feature.akka.transaction.repository.elasticsearch.refreshTime | 5000 | elasticsearch 定时同步到ES时间 | -| spring.elasticsearch.rest.uris | | ES节点地址,格式:http://localhost:9200,多个地址逗号分隔 | +| 参数名 | 默认值 | 说明 | +|---------------------------------------------------------------|-------|-------------------------| +| alpha.spec.saga.akka.repository.name | | 持久化类型,目前可选值 elasticsearch,如果不设置则不存储 | +| alpha.spec.saga.akka.repository.elasticsearch.batch-size | 100 | elasticsearch 批量入库数量 | +| alpha.spec.saga.akka.repository.elasticsearch.refresh-time | 5000 | elasticsearch 定时同步到ES时间 | +| alpha.spec.saga.akka.repository.elasticsearch.uris | | ES节点地址,格式:http://localhost:9200,多个地址逗号分隔 | ### Elasticsearch 索引 diff --git a/docs/fsm/plantuml/saga-state-diagram.puml b/docs/spec-saga-akka/plantuml/saga-state-diagram.puml similarity index 100% rename from docs/fsm/plantuml/saga-state-diagram.puml rename to docs/spec-saga-akka/plantuml/saga-state-diagram.puml diff --git a/docs/user_guide.md b/docs/user_guide.md index bfca281f..f7b2f9b4 100644 --- a/docs/user_guide.md +++ b/docs/user_guide.md @@ -106,11 +106,19 @@ Take a transfer money application as an example: cluster: address: alpha-server.servicecomb.io:8080 ``` +4. Add omega.spec.names parameters -4. Repeat step 2 for the `transferIn` service. + ```yaml + omega: + spec: + names: saga + ``` + +5. Repeat step 2 for the `transferIn` service. -5. Since pack-0.3.0, you can access the [OmegaContext](https://github.com/apache/servicecomb-pack/blob/master/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/OmegaContext.java) for the gloableTxId and localTxId in the @Compensable annotated method or the cancel method. +6. Since pack-0.3.0, you can access the [OmegaContext](https://github.com/apache/servicecomb-pack/blob/master/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/OmegaContext.java) for the gloableTxId and localTxId in the @Compensable annotated method or the cancel method. +7. Sinc pack-0.7.0, You can change the distributed transaction specification through the alpha.spec.names parameter, currently supported modes are saga-db (default), tcc-db, saga-akka #### <a name="explicit-tx-context-passing"></a>Passing transaction context explicitly In most cases, Omega passing the transaction context for you transparently (see [Inter-Service Communication](design.md#comm) for details). Transaction context passing is implemented in a way of injecting transaction context information on the sender side and extracting it on the receiver side. Below is an example to illustrate this process: @@ -286,8 +294,15 @@ Add TCC annotations and corresponding confirm and cancel methods cluster: address: alpha-server.servicecomb.io:8080 ``` + 4. Add omega.spec.names parameters - 4. Repeat step 2 for the `transferIn` service. + ```yaml + omega: + spec: + names: tcc + ``` + + 5. Repeat step 2 for the `transferIn` service. #### Passing transaction context explicitly @@ -323,6 +338,9 @@ Just like Saga's `@Compensable`,`@Participate` also supports explicit transact alpha: cluster: address: {alpha.cluster.addresses} + omega: + spec: + names: saga ``` Then you can start your micro-services and access all saga events via http://${alpha-server:port}/saga/events. @@ -821,9 +839,9 @@ Alpha can be highly available by deploying multiple instances, enable cluster su Alpha enabled JNI transports support with `alpha.feature.nativetransport=true`, These JNI transports add features specific to a particular platform, generate less garbage, and generally improve performance when compared to the NIO based transport. -## Experiment +## Pack Distributed Transaction Specifications -[State Machine Mode](fsm/fsm_manual.md) +[Saga-Akka Specifications](spec-saga-akka/fsm_manual.md) ## Upgrade Guide diff --git a/docs/user_guide_zh.md b/docs/user_guide_zh.md index a8265dfe..61e8ae02 100644 --- a/docs/user_guide_zh.md +++ b/docs/user_guide_zh.md @@ -106,10 +106,19 @@ Saga可通过以下任一方式进行构建: cluster: address: alpha-server.servicecomb.io:8080 ``` +4. 增加 omega.spec.names 参数 -4. 对转入服务重复第二步即可。 + ```yaml + omega: + spec: + names: saga + ``` + +5. 对转入服务重复第二步即可。 + +6. 从 pack-0.3.0 开始, 你可以在服务函数或者取消函数中通过访问 [OmegaContext](https://github.com/apache/servicecomb-pack/blob/master/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/OmegaContext.java) 来获取 gloableTxId 以及 localTxId 信息。 -5. 从pack-0.3.0开始, 你可以在服务函数或者取消函数中通过访问 [OmegaContext](https://github.com/apache/servicecomb-pack/blob/master/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/OmegaContext.java) 来获取 gloableTxId 以及 localTxId 信息。 +7. 从 pack-0.7.0 开始, 你可以通过 alpha.spec.names 参数改变分布式事务规格, 目前支持的模式有 saga-db(默认), tcc-db, saga-akka #### <a name="explicit-tx-context-passing"></a>显式传递事务上下文 @@ -285,9 +294,17 @@ public void bar() { address: alpha-server.servicecomb.io:8080 ``` -4. 对转入服务重复第二步即可。 +4. 增加 omega.spec.names 参数 + + ```yaml + omega: + spec: + names: tcc + ``` + +5. 对转入服务重复第二步即可。 -5. 从pack-0.3.0开始, 你可以在服务函数或者取消函数中通过访问 [OmegaContext](https://github.com/apache/servicecomb-pack/blob/master/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/OmegaContext.java) 来获取 gloableTxId 以及 localTxId 信息。 +6. 从pack-0.3.0开始, 你可以在服务函数或者取消函数中通过访问 [OmegaContext](https://github.com/apache/servicecomb-pack/blob/master/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/OmegaContext.java) 来获取 gloableTxId 以及 localTxId 信息。 #### 显式传递事务上下文 @@ -326,6 +343,9 @@ public void bar() { alpha: cluster: address: {alpha.cluster.addresses} + omega: + spec: + names: saga ``` 然后就可以运行相关的微服务了,可通过访问http://${alpha-server:port}/saga/events 来获取所有的saga事件信息。 @@ -808,9 +828,9 @@ Alpha 使用 `alpha.feature.nativetransport=true` 开启JNI调用Socket Transpor [src-TransactionClientHttpRequestInterceptor]: ../omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/pack/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java [src-TransactionHandlerInterceptor]: ../omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/pack/omega/transport/resttemplate/TransactionHandlerInterceptor.java -## 实验 +## Pack 分布式事务规则 -[状态机模式](fsm/fsm_manual_zh.md) +[Saga-Akka 分布式状态机规格](spec-saga-akka/fsm_manual_zh.md) ## 升级指南
