Skip to content

Commit 9d8919d

Browse files
authored
Update D4-observability.md
1 parent 5f0c281 commit 9d8919d

File tree

1 file changed

+34
-25
lines changed

1 file changed

+34
-25
lines changed

proposals/D4-observability.md

+34-25
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
本地聚合开启方式:
2222
```xml
2323
<dubbo:metrics>
24-
<dubbo:aggregation enable="true" />
24+
<dubbo:aggregation enabled="true" />
2525
</dubbo:metrics>
2626
```
2727

@@ -41,33 +41,34 @@
4141

4242
### 指标聚合
4343
其中指标聚合大部分需要通过滑动窗口计算,此处先介绍采用的滑动窗口算法
44-
### 滑动窗口
44+
45+
**滑动窗口**
4546
此处滑动窗口以Prometheus JavaClient的TimeWindowQuantiles为例
4647
假设我们初始有6个bucket,每个窗口时间设置为2分钟
4748
每次写入指标数据时,我们会将数据分别写入6个bucket内。每隔两分钟移动一个bucket并且清除原来bucket内的数据。
4849
读取指标时,我们读取当前current指向的bucket,以达到滑动窗口的效果。
4950
具体如下图所示。
50-
![observability](../images/observability2.png)
51+
![observability](../images/observability-2.png)
5152

5253

5354
在每个bucket内,我们计算分位数指标时也有3种常用算法可选用
54-
1、TDigest(极端分位精确度高,如p1 p99,中间分位精确度低,如p50。推荐使用该方式)
55-
1.1、https://op8867555.github.io/posts/2018-04-09-tdigest.html
56-
1.2、https://blog.csdn.net/csdnnews/article/details/116246540
57-
1.3、开源实现:https://github.com/tdunning/t-digest
58-
2、HdrHistogram(精确度低)
59-
2.1、https://caorong.github.io/2016/07/31/hdrhistogram/
60-
2.2、开源实现:https://github.com/HdrHistogram/HdrHistogram
61-
3、CKMS(允许一定错误率,由用户自己设置,Prometheus的TimeWindowQuantiles内部使用了该算法。资料偏少,大致看看即可)
62-
3.1、https://caorong.github.io/2020/08/03/quartile-%20algorithm/
63-
3.2、https://www.stevenengelhardt.com/2018/03/29/calculating-percentiles-on-streaming-data-part-7-cormode-korn-muthukrishnan-srivastava/
64-
3.3、http://dimacs.rutgers.edu/~graham/pubs/papers/bquant-icde.pdf
55+
* TDigest(极端分位精确度高,如p1 p99,中间分位精确度低,如p50。推荐使用该方式)
56+
* https://op8867555.github.io/posts/2018-04-09-tdigest.html
57+
* https://blog.csdn.net/csdnnews/article/details/116246540
58+
* 开源实现:https://github.com/tdunning/t-digest
59+
* HdrHistogram(精确度低)
60+
* https://caorong.github.io/2016/07/31/hdrhistogram/
61+
* 开源实现:https://github.com/HdrHistogram/HdrHistogram
62+
* CKMS(允许一定错误率,由用户自己设置,Prometheus的TimeWindowQuantiles内部使用了该算法。资料偏少,大致看看即可)
63+
* https://caorong.github.io/2020/08/03/quartile-%20algorithm/
64+
* https://www.stevenengelhardt.com/2018/03/29/calculating-percentiles-on-streaming-data-part-7-cormode-korn-muthukrishnan-srivastava/
65+
* http://dimacs.rutgers.edu/~graham/pubs/papers/bquant-icde.pdf
6566

6667
**参数设计**
6768
指标聚合参数:
6869
```xml
6970
<dubbo:metrics>
70-
<dubbo:aggregation enable="true" bucket-num="5" time-window-seconds="10"/>
71+
<dubbo:aggregation enabled="true" bucket-num="5" time-window-seconds="10"/>
7172
</dubbo:metrics>
7273
```
7374

@@ -84,7 +85,7 @@
8485
* 处理中请求数: 前后增加Filter简单统计即可
8586
*(补充中。。。)
8687

87-
**指标接口**
88+
### 指标接口
8889
指标接口将提供一个类似于MetadataService的MetricsService,该Service不仅提供柔性服务所需的接口级数据,也提供所有指标的查询方式。
8990
其中方法级指标的查询的接口可按如下方式声明
9091

@@ -109,17 +110,25 @@ public class Quantile {
109110

110111
### 指标推送
111112
指标推送只有用户在设置了<dubbo:metrics />配置且配置protocol参数后才开启,若只开启指标聚合,则默认不推送指标。
112-
Promehteus Pull ServiceDiscovery
113-
● 使用dubbo-admin等类似的中间层,启动时根据配置将本机 IP、Port、MetricsURL 推送地址信息至dubbo-admin(或任意中间层)的方式,暴露HTTP ServiceDiscovery供prometheus读取,配置方式如<dubbo:metrics protocol="prometheus" mode="pull" address="${dubbo-admin.address}" port="20888" url="/metrics"/>,其中在pull模式下address为可选参数,若不填则需用户手动在Prometheus配置文件中配置地址
114-
○ 优点:稳定,并且能通过中间层移除已下线的应用,只保留存活应用供Prometheus读取
115-
○ 缺点:不够轻量,如果用户没有使用dubbo-admin则必须引入。如果用户自己实现了dubbo控制台则需提供类似http-sd-starter模块供集成,并且该模块需实现健康检查代码,检测已下线的dubbo应用并移除
116-
Prometheus Push Pushgateway
117-
● 用户直接在Dubbo配置文件中配置Prometheus Pushgateway的地址即可,如<dubbo:metrics protocol="prometheus" mode="push" address="${prometheus.pushgateway-url}" interval="5" />,其中interval代表推送间隔
118-
○ 优点:方便,用户只需要引入依赖,并加上这一行配置即可直接采集指标
119-
○ 缺点:Push方式Prometheus无法自动删除已下线的应用的指标,需要用户手动处理
113+
114+
1、Promehteus Pull ServiceDiscovery
115+
* 使用dubbo-admin等类似的中间层,启动时根据配置将本机 IP、Port、MetricsURL 推送地址信息至dubbo-admin(或任意中间层)的方式,暴露HTTP ServiceDiscovery供prometheus读取,配置方式如<dubbo:metrics protocol="prometheus" mode="pull" address="${dubbo-admin.address}" port="20888" url="/metrics"/>,其中在pull模式下address为可选参数,若不填则需用户手动在Prometheus配置文件中配置地址
116+
* 优点:稳定,并且能通过中间层移除已下线的应用,只保留存活应用供Prometheus读取
117+
* 缺点:不够轻量,如果用户没有使用dubbo-admin则必须引入。如果用户自己实现了dubbo控制台则需提供类似http-sd-starter模块供集成,并且该模块需实现健康检查代码,检测已下线的dubbo应用并移除
118+
*
119+
2、Prometheus Push Pushgateway
120+
* 用户直接在Dubbo配置文件中配置Prometheus Pushgateway的地址即可,如<dubbo:metrics protocol="prometheus" mode="push" address="${prometheus.pushgateway-url}" interval="5" />,其中interval代表推送间隔
121+
* 优点:方便,用户只需要引入依赖,并加上这一行配置即可直接采集指标
122+
* 缺点:Push方式Prometheus无法自动删除已下线的应用的指标,需要用户手动处理
123+
124+
### 集成测试
125+
由于 Dubbo 原有一套指标体系,在可观测行对接完成之后需要清除旧代码并且修改集成测试相关代码
126+
127+
### 整合 Spring 配置
128+
目前国内大部分用户都是基于 Spring 整合 Dubbo 使用,为了更方便用户配置相关内容,需要完善配置自动补全部分,并且对接 SpringBoot 的 Actuator
120129

121130
### 整体结构设计
122131
1、移除原来与 Metrics 相关的类
123132
2、创建新模块 dubbo-metrics/dubbo-metrics-api、dubbo-metrics/dubbo-metrics-prometheus,MetricsConfig 作为该模块的配置类
124133
3、若不使用micrometer,则在common模块下实现自己的Counter、Gauge等,并在dubbo-metrics/dubbo-metrics-prometheus手动转换成prometheus对应的类型
125-
4、若使用micrometer,则Collector中使用基本类型代表指标,如Long、Double等,并在dubbo-metrics-api中引入micrometer,由micrometer对内部指标进行转换
134+
4、若使用micrometer,则Collector中使用基本类型代表指标,如Long、Double等,并在dubbo-metrics-api中引入micrometer,由micrometer对内部指标进行转换

0 commit comments

Comments
 (0)