跳到主要内容

协议扩展

功能概述

协议扩展功能为研发、运维和产品团队提供 HTTP/HTTPS 之外的网络协议监控能力,支持 WebSocket、gRPC 等现代通信协议的性能分析,同时提供自定义协议监控的灵活扩展。帮助团队全面掌握应用的网络通信状况,快速定位协议层面的性能问题,保障实时通信和微服务架构的稳定性。

核心价值

  • 全协议覆盖:支持 HTTP/HTTPS、WebSocket、gRPC 等多种协议,实现全链路监控
  • 实时通信监控:专注 WebSocket 等实时协议的性能和稳定性分析
  • 微服务架构支持:深度监控 gRPC 等微服务通信协议
  • 灵活扩展能力:通过 API 自定义任意协议的监控指标和维度

技术要求

  • SDK 版本:≥ 2.16.0
  • 支持平台:Android、iOS、Harmony OS
  • 数据采集:预置协议自动采集,自定义协议需埋点

使用场景

场景一:实时通信性能优化

WebSocket 作为应用核心通信协议,需要监控其连接稳定性和消息传输性能。

实践案例

  • 社交应用使用 WebSocket 实现即时通讯
  • 监控发现消息延迟 P95 达 2s,失败率 5%
  • 通过协议扩展定位到特定地区的连接问题
  • 优化后延迟降至 500ms,失败率降至 0.5%
  • 用户消息到达率提升 95%

场景二:微服务性能监控

gRPC 微服务架构下,需要监控服务间调用的性能和错误率。

实践案例

  • 应用采用 gRPC 实现移动端与微服务通信
  • 发现某个 gRPC 服务调用失败率达 10%
  • 通过详情列表定位到特定方法的超时问题
  • 后端团队优化服务后,失败率降至 1%
  • 应用整体可用性提升 3%

场景三:自定义协议监控

使用私有协议或特殊网络协议,需要自定义监控方案。

实践案例

  • IoT 应用使用 MQTT 协议通信
  • 通过 SDK API 自定义 MQTT 协议监控
  • 建立指标体系:连接数、消息量、传输耗时
  • 发现设备端连接频繁断开重连问题
  • 优化心跳机制后,连接稳定性提升 80%

支持的协议场景

预定义协议

WebSocket

  • 应用场景:移动端
  • 监控指标:连接耗时、消息耗时、失败率、TPM
  • 数据采集:SDK 自动采集,无需额外配置

gRPC

  • 应用场景:移动端
  • 监控指标:调用耗时、失败率、吞吐量、错误
  • 数据采集:SDK 自动采集,无需额外配置

自定义协议

自定义能力

  • 自定义协议名称和类型
  • 自定义监控指标(metrics)
  • 自定义分析维度(tags)
  • 自定义详情数据(data)

核心功能

1. 数据看板

协议扩展数据看板提供协议性能的全局视图,支持多协议对比分析。

全局过滤

支持多维度数据过滤,精准定位问题范围:

过滤维度

  • 协议扩展名称:具体的协议实例(如:聊天 WebSocket、推送 WebSocket)
  • 协议扩展类型:协议类别(WebSocket、gRPC、自定义)

2. 数据卡片

数据卡片展示协议的核心性能指标,提供快速概览。

基础指标

指标说明计算方式
访问次数协议调用的总次数统计时间段内的调用总数
TPM每分钟访问量访问次数 / 统计分钟数
平均耗时协议调用的平均响应时间默认展示 P75 分位值
失败率调用失败的比例失败次数 / 总访问次数 × 100%
影响用户数使用该协议的唯一用户数去重统计

失败判定规则

WebSocket

  • status = -1:连接失败或异常断开
  • 可通过 SDK API 自定义失败判定条件

gRPC

  • gRPC 状态码非 0:调用失败
  • 超时未响应:调用失败

自定义协议

  • 通过 SDK API 设置失败条件
  • 灵活定义符合业务的失败标准

3. 趋势分析

展示协议性能指标随时间的变化趋势,帮助发现性能波动和异常。

维度分析

数据类型分布

  • 展示不同协议类型的访问量分布

名称失败率分布

  • 展示不同实例的失败率

失败率趋势

展示协议失败率随时间的变化趋势:

分析要点

  • 突然上升:可能是服务故障或网络问题
  • 持续高位:需要深度排查协议实现
  • 周期性波动:可能与业务高峰或网络环境相关
  • 逐步上升:可能是性能衰减或用户量增加

告警建议

  • 失败率 > 5%:需要关注
  • 失败率 > 10%:需要紧急处理
  • 失败率环比上升 > 50%:触发告警

耗时趋势

展示协议耗时随时间的变化趋势:

分位值分析(可通过仪表盘自定义,默认使用 P75)

  • P50(中位数):50% 用户的体验水平
  • P75(默认):75% 用户的体验水平
  • P95:关注长尾用户体验
  • P99:极端场景性能

优化方向

  • 耗时突增:检查网络或服务端问题
  • 持续偏高:优化协议实现或网络策略
  • 波动较大:优化连接复用和心跳机制

4. 详情列表

详情列表展示所有协议的统计数据,支持深度分析和问题定位。

指标列表

默认指标(SDK 自动采集)

  • 名称、数据类型、访问次数、TPM、耗时 P75、可用性
  • 活跃设备数、影响用户数

自定义指标(通过 metrics 上传)

  • 业务相关指标(如:消息大小、重连次数)
  • 性能相关指标(如:序列化耗时、压缩率)
  • 质量相关指标(如:消息丢失率、乱序率)

设备维度(可通过仪表盘自定义)

默认维度

  • 设备型号、操作系统、App 版本
  • 国家、省/州、城市、运营商
  • 网络类型(WiFi、4G、5G)

自定义维度(通过 tag 上传)

  • 业务维度(如:聊天室 ID、用户等级)
  • 技术维度(如:服务器区域、协议版本)
  • 环境维度(如:前台/后台、弱网/正常网)

自定义协议配置

配置流程

1. SDK 埋点定义数据
↓ 设置协议名称、指标、维度

2. 指标体系抽取
↓ 配置自定义指标和维度

3. 仪表盘配置
↓ 复制并自定义看板

4. 数据展示
↓ 查看协议监控数据

步骤一:SDK 埋点

Android SDK 示例

// 启动自定义协议监控
NBSAppAgent.startSpan(String name, String operation);

参数说明

  • name:协议名称(如:MQTT消息、自定义RPC)
  • operation:操作类型(如:send、receive、connect)

iOS SDK 示例

Objective-C

// 启动自定义协议监控
+ (id<NBSSpan>)startSpanWithName:(NSString *)name
operation:(NSString *)operation;

Swift

// 启动自定义协议监控
startSpan(withName: String!, operation: String!)

参数说明

  • name:协议名称(如:MQTT消息、自定义RPC)
  • operation:操作类型(如:send、receive、connect)

Harmony OS SDK 示例

import tingyun, { SpanStatuses } from '@tingyun/sdk-core'

// 1. 启动协议监控
const span = tingyun.startSpan('span_name', 'span_operation')

// 2. 设置详情数据
span.setData('dataKey', 'dataValue')

// 3. 设置自定义维度
span.setTag('tagKey', 'tagValue')

// 4. 设置自定义指标
span.setMetric('time', 50, SpanMetricUnits.Millisecond)

// 5. 设置耗时
span.setDuration(100)

// 6. 设置状态
span.setStatus(SpanStatuses.OK)
span.setStatusCode('200')

// 7. 创建子 Span(可选)
const childSpan = span.startChild('child_span_name', 'child_span_operation')
childSpan.finish()

// 8. 结束监控
span.finish()

参数说明

  • span_name:协议名称
  • span_operation:操作类型
  • setData():设置详情数据
  • setTag():设置自定义维度
  • setMetric():设置自定义指标
  • setDuration():设置耗时(毫秒)
  • setStatus():设置状态(OK/ERROR)
  • setStatusCode():设置状态码

步骤二:指标体系配置

进入指标体系

  1. 导航至:平台管理 → 指标体系
  2. 选择数据源:Mobile 协议扩展
  3. 点击【新建指标】

配置自定义指标

配置项说明示例
指标名称指标的显示名称消息大小
指标字段SDK 中 metric 的 keymessage_size
聚合方式sum/avg/max/min/countavg
单位指标的单位KB

配置自定义维度

配置项说明示例
维度名称维度的显示名称消息主题
维度字段SDK 中 tag 的 keytopic
维度类型字符串/数值字符串

步骤三:仪表盘配置

复制默认看板

  1. 导航至:仪表盘
  2. 找到【Mobile 协议扩展看板】
  3. 点击【复制】按钮
  4. 重命名为自定义协议看板(如:Socket 监控看板)

更新图表配置

  1. 进入编辑模式
  2. 选择要修改的图表
  3. 更新图表配置:
    • 指标:选择自定义指标
    • 维度:选择自定义维度
    • 过滤:添加协议类型过滤

图表配置示例

图表:Socket 消息大小趋势
- 指标:消息大小(avg)
- 维度:时间
- 过滤:协议类型 = Socket
- 图表类型:折线图

图表:消息主题分布
- 指标:访问次数
- 维度:消息主题
- 过滤:协议类型 = MQSocketTT
- 图表类型:饼图

性能优化指南

WebSocket 性能优化

问题一:连接耗时过长

现象:WebSocket 连接建立耗时 > 2s

常见原因

  • DNS 解析慢
  • TCP 握手慢
  • SSL/TLS 握手慢
  • 服务端响应慢

优化建议

  1. DNS 优化

    • 使用 HTTPDNS
    • 本地缓存 DNS 结果
    • 预解析域名
  2. 连接优化

    • 连接复用和保活
    • 减少握手次数
    • 优化心跳策略
  3. 协议优化

    • 优先使用 WSS(加密)
    • 启用压缩(permessage-deflate)

问题二:消息延迟高

现象:消息传输耗时 P95 > 1s

常见原因

  • 消息体过大
  • 网络拥塞
  • 服务端处理慢
  • 序列化/反序列化耗时

优化建议

  1. 消息优化

    • 压缩消息内容
    • 使用二进制协议(如 Protocol Buffers)
    • 分片传输大消息
  2. 网络优化

    • 选择最优服务器节点
    • 弱网下降级策略
    • 消息优先级队列
  3. 代码优化

    • 异步处理消息
    • 优化序列化性能
    • 批量发送消息

问题三:连接频繁断开

现象:WebSocket 失败率 > 5%

常见原因

  • 网络不稳定
  • 心跳机制不合理
  • 服务端主动断开
  • 应用进入后台

优化建议

  1. 心跳机制

    • 合理设置心跳间隔(建议 30-60s)
    • 心跳超时后自动重连
    • 区分前台/后台心跳策略
  2. 重连策略

    • 指数退避重连
    • 限制重连次数
    • 断网时暂停重连
  3. 连接保活

    • 应用切后台保持连接
    • 监听网络变化主动重连
    • 服务端优化连接超时时间

gRPC 性能优化

问题一:调用耗时高

优化方向

  • 启用 HTTP/2 多路复用
  • 使用连接池
  • 启用 gRPC 压缩
  • 优化 Protobuf 序列化

问题二:调用失败率高

优化方向

  • 配置合理的超时时间
  • 实现重试机制
  • 熔断降级策略
  • 监控服务端健康状态

自定义协议优化

通用优化原则

  1. 性能优先

    • 选择高效的序列化方式
    • 减少不必要的数据传输
    • 优化协议握手流程
  2. 可靠性优先

    • 实现消息确认机制
    • 设计重传策略
    • 处理网络异常
  3. 可扩展性

    • 设计版本兼容机制
    • 预留扩展字段
    • 支持协议协商

最佳实践

1. 问题排查流程

1. 发现问题
↓ 失败率/耗时异常

2. 确认范围
↓ 特定协议/地域/设备

3. 分析趋势
↓ 何时开始/是否持续

4. 查看详情
↓ 错误信息/调用堆栈

5. 定位根因
↓ 客户端/网络/服务端

6. 制定方案
↓ 优化/降级/回滚

7. 验证效果
↓ 对比优化前后数据

2. 数据分析建议

多维度对比

  • 不同协议性能对比
  • 不同地域表现对比
  • 不同网络环境对比

关联分析

  • 协议性能与业务指标关联
  • 协议性能与设备性能关联
  • 协议性能与版本关联

趋势预测

  • 基于历史数据预测未来趋势
  • 提前发现性能衰减
  • 规划容量和优化

常见问题 FAQ

Q1:自定义协议如何设计指标体系?

A:遵循以下原则:

核心指标(必选)

  • 性能指标

    • 调用耗时(P50/P75/P95/P99)
    • TPM(每分钟调用量)
    • 失败率
  • 业务指标

    • 与业务直接相关的指标
    • 如:消息大小、队列长度、并发数

辅助指标(可选)

  • 质量指标

    • 重试次数
    • 消息丢失率
    • 乱序率
  • 资源指标

    • 流量消耗
    • CPU 占用
    • 内存占用

指标设计示例

MQTT 协议指标体系:

核心指标:
- 连接耗时、消息耗时、失败率、TPM

业务指标:
- 消息大小、主题数量、订阅数

质量指标:
- 重连次数、消息丢失率、QoS 分布

维度:
- 主题、QoS 等级、消息类型