背景
在跨云、混合云的场景下,我们希望应用程序可以使用一套代码,部署到不同的云环境上。在运行时,采用对应云环境提供的云原生实现方案。
技术思路

定义与具体中间件无关的API层(无强绑定),使应用程序在编程时仅依赖该API层。 如此一来,应用本身便与具体中间件解耦;然后在部署到不同云环境时,将API的不同云的实现层加载到应用进程中。
在跨云、混合云的场景下,我们希望应用程序可以使用一套代码,部署到不同的云环境上。在运行时,采用对应云环境提供的云原生实现方案。

定义与具体中间件无关的API层(无强绑定),使应用程序在编程时仅依赖该API层。 如此一来,应用本身便与具体中间件解耦;然后在部署到不同云环境时,将API的不同云的实现层加载到应用进程中。
全面的可观测指标度量规范定义

参考资料:https://segmentfault.com/a/1190000040061004
参考资料:https://www.51cto.com/article/691184.html

参考资料:https://segmentfault.com/a/1190000040061004
命名空间采用分级域名命名方式:
(顶级域名).一级域名.二级域名.三级域名.x.y.z
顶级域名应标识所属云(私有云、公有云)等基础设施。
但目前各云监控指标命名空间本身隔离,故不考虑加入顶级域名。
将云原生技术栈划分为4个领域,一级域名标识了所属的层级。
对应一级域命名空间为:
参考云原生技术栈图示给出的四个层次,使一级域名能够显示出Actuator所属的层级。

携程监控指标的一级域名主要有System、FrameworkName、App等等。
不过其技术栈领域的监控划分主要依赖于:使用不同看板进行呈现,相当于不同的监控平台本身对应于不同的技术栈领域。
应用层的监控主要还是以FrameworkName为主,反映出了携程是以框架为主体,框架就强绑定了该领域的概念(看到Dal就意味着关系型数据库、看到SOA就意味着RPC领域)。
Ops运维和管理领域:
应用层,应在二级域名进行应用类型的划分。
在这里,我们参考携程的应用类型设计,取运行时语言作为划分:
主要基于中间件维度进行定义:
以基础设施作为划分:
基于以上 一级域名(技术栈领域).二级域名(组件领域划分) 的命名空间,我们已经能够体现具体领域。
但每个领域,都可能有多种实现。
例如在中间件领域,携程命名空间做了 中间件-领域 的强绑定。
所以在三级域名的设计上,我们希望体现一些更细节的信息。
但没有必要像一二级域名一样,保持独立的语义。
故使用 小写+下划线 作为三级域名的格式标准。
包含更丰富的语义,但视觉上不像一二级域名一样强烈。
三级域名如果有更多细节需要体现,通过追加的方式进行拓展。
从实用性上来看,可以不使用三级域名,直接基于appId等。
如果要使用,参考携程应用类型定义。
组件领域,可能有多种 中间件实现 / 工具。
所以在三级域名上,我们希望体现 中间件/工具 的概念。
组件领域,中间件领域,都可能有多种编程语言的实现,其SDK内部逻辑不可能完全一致。
所以在三级域名上,我们希望体现 编程语言 的概念。
对于Fxc而言,目前已有(中间件名称_编程语言):
对于Inf而言,目前已有(工具/产品名称):
携程在监控命名上,强体现 框架名称。
中间件领域命名空间
使用 小写+下划线 作为 监控指标 名称的格式标准。
监控指标设计分为:Level0、Level1、Level2层次。
必需监控指标:
拓展监控指标
xx定义为 操作/业务 名称
请求量:
耗时:
成功率:
使用 小写+下划线 作为attributes的格式标准。
通过调用Capa SDK API的方式,管理应用级配置。底层通过SPI的方式注册适配各平台的实现类。
下图为Capa的Configuration服务调用逻辑

Capa Configuration API的设计参考了社区的规范
具体参数含义如下:
| 参数 | 含义 |
|---|---|
| storeName | 存储名称 |
| appId | 同一命名空间内的服务唯一ID |
| keys | 配置key列表 |
| metadata | 发送配置请求的元信息 |
| group | 配置组(Optional) |
| label | 配置标签(Optional) |
| type | 请求响应对象中的泛型对应的具体类型 |
| ConfigurationRequestItem | 请求对象 |
| ConfigurationItem | 获取配置的响应对象 |
| SubConfigurationResp | 订阅配置的响应对象 |
下图为 Capa 的 RPC 服务调用逻辑

Capa的 api 设计参照了社区的规范
具体参数含义如下:
| 参数 | 含义 |
|---|---|
| appId | 同一命名空间内的服务唯一ID |
| methodName | 被调用服务的方法名 |
| request | 要发送调用的服务请求 |
| httpExtension | HTTP请求方式 |
| metadata | 发送请求的元数据(GRPC)或者请求头(HTTP) |
| clazz | 请求响应的类型 |
| type | 请求响应的类型 |
| invokeMethodRequest | 请求对象 |
经过调研,发现AWS在RPC上
通过服务调用,应用程序可以使用 HTTP 这样的标准协议来发现并可靠地与其他应用程序通信。
下图为 Capa 的 RPC 服务调用逻辑

Capa的 api 设计参照了社区的规范
具体参数含义如下:
| 参数 | 含义 |
|---|---|
| appId | 同一命名空间内的服务唯一ID |
| methodName | 被调用服务的方法名 |
| request | 要发送调用的服务请求 |
| httpExtension | HTTP请求方式 |
| metadata | 发送请求的元数据(GRPC)或者请求头(HTTP) |
| clazz | 请求响应的类型 |
| type | 请求响应的类型 |
| invokeMethodRequest | 请求对象 |