You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2022/07/08 07:42:53 UTC

[dubbo-website] branch master updated: docs: Update config-rule.md (#1203)

This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 181be7641a docs: Update config-rule.md (#1203)
181be7641a is described below

commit 181be7641a3c12c884e659aa5277134bc8c1bdde
Author: Trydamere <30...@qq.com>
AuthorDate: Fri Jul 8 15:42:47 2022 +0800

    docs: Update config-rule.md (#1203)
    
    * update config-rule.md
    
    * use markdown style
---
 .../zh/docs3-building/docs/tasks/config-rule.md    | 326 +++++++++++++++++++++
 .../v3/tasks/config-rule/BasicProvider1_check.png  | Bin 0 -> 54564 bytes
 .../v3/tasks/config-rule/BasicProvider2_check.png  | Bin 0 -> 64323 bytes
 .../v3/tasks/config-rule/BasicProvider_run.png     | Bin 0 -> 178743 bytes
 .../v3/tasks/config-rule/demo_architecture.png     | Bin 0 -> 15088 bytes
 static/imgs/v3/tasks/config-rule/dubbo_console.png | Bin 0 -> 20891 bytes
 .../imgs/v3/tasks/config-rule/service_timeout.png  | Bin 0 -> 105959 bytes
 7 files changed, 326 insertions(+)

diff --git a/content/zh/docs3-building/docs/tasks/config-rule.md b/content/zh/docs3-building/docs/tasks/config-rule.md
new file mode 100644
index 0000000000..daa3eb1223
--- /dev/null
+++ b/content/zh/docs3-building/docs/tasks/config-rule.md
@@ -0,0 +1,326 @@
+---
+type: docs
+title: "配置规则"
+linkTitle: "配置规则"
+weight: 34
+description: "在 Dubbo 中配置应用级治理规则和服务级治理规则"
+---
+
+> **提示**
+>
+> 本文描述的是新版本规则配置,而不是[老版本配置规则](https://dubbo.apache.org/zh/docs/advanced/config-rule-deprecated)
+
+# 配置规则
+
+此任务将展示在 Dubbo 中配置应用级治理规则和服务级治理规则
+
+
+覆盖规则是 Dubbo 设计的在无需重启应用的情况下,动态调整 RPC 调用行为的一种能力。2.7.0 版本开始,支持从**服务**和**应用**两个粒度来调整动态配置。
+
+
+
+## 开始之前
+
+- 安装idea
+
+- 克隆[dubbo-samples](https://github.com/apache/dubbo-samples.git)到本地,idea打开
+
+- 拉取dubbo-admin镜像并运行镜像
+
+  
+
+
+> **提示**
+>
+> 可参考如下步骤部署dubbo-admin
+>
+> 1. 创建docker-compose.yml文件,内容如下:
+>
+> ```
+> version: '3'
+> services:
+>   zk:
+>     image: zookeeper
+>     container_name: zk
+>     ports:
+>       - 2181:2181
+>   dubbo-admin:
+>     image: apache/dubbo-admin
+>     container_name: dubbo-admin
+>     # 等待zk启动后再启动
+>     depends_on:
+>       - zk
+>     ports:
+>       - 8080:8080
+>     environment:
+>       - admin.registry.address=zookeeper://zk:2181
+>       - admin.config-center=zookeeper://zk:2181
+>       - admin.metadata-report.address=zookeeper://zk:2181
+> ```
+>
+> 2.运行命令
+>
+> ```
+> docker-compose up
+> ```
+
+
+
+运行成功后,可以看见dubbo-admin界面
+
+![dubbo_console](/imgs/v3/tasks/config-rule/dubbo_console.png)
+
+
+
+## 概览
+
+
+
+dubbo-samples-governance示例包含dubbo-samples-applevel-override和dubbo-samples-servicelevel-override子示例,这2个子示例分别从**服务**和**应用**两个粒度应用覆盖规则动态调整路由。
+
+
+
+此任务的最初目标是应用覆盖规则在无需重启应用的情况下动态调整流量路由。稍后,您将从**服务**和**应用**两个粒度应用规则动态调整路由。
+
+
+
+下图展示本任务的应用端到端架构。
+
+![demo_architecture](/imgs/v3/tasks/config-rule/demo_architecture.png)
+
+
+
+### 应用粒度
+
+
+
+dubbo-samples-applevel-override示例中,BasicConsumer类和BascicProvider类为消费者类和提供者类,现在运行BasicProvider,成功后如图:
+
+![BasicProvider_run](/imgs/v3/tasks/config-rule/BasicProvider_run.png)
+
+
+
+在控制台查询服务,可以看到应用governance-appoverride-provider,如图:
+
+![BasicProvider1_check](/imgs/v3/tasks/config-rule/BasicProvider1_check.png)
+
+
+
+现在再运行一个提供者示例,运行在20881端口,首先修改dubbo-demo-provider.xml,将< dubbo:protocol />标签中端口修改修改为20881,运行BasicProvider,成功后查询控制台,如图:
+
+![BasicProvider2_check](/imgs/v3/tasks/config-rule/BasicProvider2_check.png)
+
+
+
+
+> **提示**
+>
+> 如果运行BasicProvider示例失败,请修改BasicProvider配置,勾选Allow multiple instances
+
+
+
+#### 任务1:临时剔除提供者
+
+目前需要临时剔除在20880端口的提供者,可以使用覆盖规则进行动态配置。
+
+1.打开[服务治理控制台](http://0.0.0.0/#/governance/config),点击”创建“,填入应用名和配置,这个配置将禁用在20880端口上提供(side:provider)的所有服务(scope:application)。
+
+```yaml
+configVersion: v2.7
+scope: application
+key: governance-appoverride-provider
+enabled: true
+configs:
+- addresses: ["0.0.0.0:20880"]
+  side: provider
+  parameters:
+    disabled: true
+```
+
+运行BasicConsumer,此时发现是运行在20881端口的提供者提供服务,说明覆盖规则生效。
+
+
+
+#### 任务2:评估系统容量
+
+目前需要对系统容量进行评估,进行调整权重。
+
+1. 修改刚才的配置,填入配置如下,这个配置将调整20880端口的提供者权重(通常用于容量评估,缺省权重为 200)
+
+   ```yaml
+   configVersion: v2.7
+   scope: application
+   key: governance-appoverride-provider
+   enabled: true
+   configs:
+   - addresses: ["0.0.0.0:20880"]
+     side: provider
+     parameters:
+       weight: 1000
+   ```
+
+多次运行BasicConsumer,发现运行在20880端口的提供者示例提供服务次数多于20881端口的提供者示例。
+
+
+
+#### 任务3:调整负载均衡策略
+
+目前需要调整负载均衡策略。
+
+1. 修改刚才的配置,填入配置如下,这个配置将调整负载均衡策略:(缺省负载均衡策略为 random)
+
+   ```yaml
+   configVersion: v2.7
+   scope: application
+   key: governance-appoverride-provider
+   enabled: true
+   configs:
+   - side: consumer
+     parameters:
+       loadbalance: random
+   ```
+
+Random策略按权重设置随机概率,多次运行BasicConsumer,BasicConsumer访问20880端口的概率大于访问20881端口的概率。
+
+
+
+### 服务粒度
+
+
+
+dubbo-samples-servicelevel-override示例与上面的示例类似,故不赘述。运行BasicProvider类。
+
+
+
+#### 任务1:修改提供者服务的超时时间
+
+目前需要修改提供者服务的超时时间
+
+1.打开[服务治理控制台](http://0.0.0.0/#/governance/config),点击”创建“,填入服务名和配置,这个配置将所有消费(side:consumer)DemoService服务(org.apache.dubbo.samples.governance.api.DemoService)的应用实例(addresses:[0.0.0.0]),超时时间修改为300ms
+
+```yaml
+configVersion: v2.7
+scope: service
+key: org.apache.dubbo.samples.governance.api.DemoService
+enabled: true
+configs:
+- addresses: [0.0.0.0]
+  side: consumer
+  parameters:
+    timeout: 300
+```
+
+运行BasicConsumer类,发现BasicConSumer抛异常无法调用远程方法,如图:
+
+![service_timeout](/imgs/v3/tasks/config-rule/service_timeout.png)
+
+
+
+## 规则详解
+
+#### 配置模板
+
+```yaml
+---
+configVersion: v2.7
+scope: application/service
+key: app-name/group+service+version
+enabled: true
+configs:
+- addresses: ["0.0.0.0"]
+  providerAddresses: ["1.1.1.1:20880", "2.2.2.2:20881"]
+  side: consumer
+  applications/services: []
+  parameters:
+    timeout: 1000
+    loadbalance: random
+- addresses: ["0.0.0.0:20880"]
+  side: provider
+  applications/services: []
+  parameters:
+    threadpool: fixed
+    threads: 200
+    iothreads: 4
+    dispatcher: all
+    weight: 200
+...
+```
+
+其中:
+
+- `configVersion` 表示 dubbo 的版本
+- `scope`表示配置作用范围,分别是应用(application)或服务(service)粒度。**必填**。
+- `key`指定规则体作用在哪个服务或应用。**必填**。
+  - scope=service时,key取值为[{group}:]{service}[:{version}]的组合
+  - scope=application时,key取值为application名称
+
+- `enabled=true` 覆盖规则是否生效,可不填,缺省生效。
+- `configs`定义具体的覆盖规则内容,可以指定n(n>=1)个规则体。**必填**。
+  - side: 消费者端/提供者端
+  - applications: 对应用覆盖规则
+  - services: 对服务覆盖规则
+  - parameters: 参数列表
+  - addresses: 地址值
+  - providerAddresses: 提供者地址值
+
+**对于绝大多数配置场景,只需要理清楚以下问题基本就知道配置该怎么写了:**
+
+1. 要修改整个应用的配置还是某个服务的配置。
+   - 应用:`scope: application, key: app-name`(还可使用`services`指定某几个服务)。
+   - 服务:`scope: service, key:group+service+version `。
+2. 修改是作用到消费者端还是提供者端。
+   - 消费者:`side: consumer` ,作用到消费端时(你还可以进一步使用`providerAddress`, `applications`选定特定的提供者示例或应用)。
+   - 提供者:`side: provider`。
+3. 配置是否只对某几个特定实例生效。
+   - 所有实例:`addresses: ["0.0.0.0"] `或`addresses: ["0.0.0.0:*"] `具体由side值决定。
+   - 指定实例:`addersses[实例地址列表]`。
+4. 要修改的属性是哪个。
+
+#### 示例
+
+1. 禁用提供者:(通常用于临时踢除某台提供者机器,相似的,禁止消费者访问请使用路由规则)
+
+   ```yaml
+   ---
+   configVersion: v2.7
+   scope: application
+   key: demo-provider
+   enabled: true
+   configs:
+   - addresses: ["10.20.153.10:20880"]
+     side: provider
+     parameters:
+       disabled: true
+   ...
+   ```
+
+2. 调整权重:(通常用于容量评估,缺省权重为 200)
+
+   ```yaml
+   ---
+   configVersion: v2.7
+   scope: application
+   key: demo-provider
+   enabled: true
+   configs:
+   - addresses: ["10.20.153.10:20880"]
+     side: provider
+     parameters:
+       weight: 200
+   ...
+   ```
+
+3. 调整负载均衡策略:(缺省负载均衡策略为 random)
+
+   ```yaml
+   ---
+   configVersion: v2.7
+   scope: application
+   key: demo-consumer
+   enabled: true
+   configs:
+   - side: consumer
+     parameters:
+       loadbalance: random
+   ...
+   ```
\ No newline at end of file
diff --git a/static/imgs/v3/tasks/config-rule/BasicProvider1_check.png b/static/imgs/v3/tasks/config-rule/BasicProvider1_check.png
new file mode 100644
index 0000000000..d38df6c0f7
Binary files /dev/null and b/static/imgs/v3/tasks/config-rule/BasicProvider1_check.png differ
diff --git a/static/imgs/v3/tasks/config-rule/BasicProvider2_check.png b/static/imgs/v3/tasks/config-rule/BasicProvider2_check.png
new file mode 100644
index 0000000000..10e3f0324f
Binary files /dev/null and b/static/imgs/v3/tasks/config-rule/BasicProvider2_check.png differ
diff --git a/static/imgs/v3/tasks/config-rule/BasicProvider_run.png b/static/imgs/v3/tasks/config-rule/BasicProvider_run.png
new file mode 100644
index 0000000000..ec7fefdd04
Binary files /dev/null and b/static/imgs/v3/tasks/config-rule/BasicProvider_run.png differ
diff --git a/static/imgs/v3/tasks/config-rule/demo_architecture.png b/static/imgs/v3/tasks/config-rule/demo_architecture.png
new file mode 100644
index 0000000000..ad3daf9888
Binary files /dev/null and b/static/imgs/v3/tasks/config-rule/demo_architecture.png differ
diff --git a/static/imgs/v3/tasks/config-rule/dubbo_console.png b/static/imgs/v3/tasks/config-rule/dubbo_console.png
new file mode 100644
index 0000000000..41db530ef1
Binary files /dev/null and b/static/imgs/v3/tasks/config-rule/dubbo_console.png differ
diff --git a/static/imgs/v3/tasks/config-rule/service_timeout.png b/static/imgs/v3/tasks/config-rule/service_timeout.png
new file mode 100644
index 0000000000..36a2140503
Binary files /dev/null and b/static/imgs/v3/tasks/config-rule/service_timeout.png differ