跳到主要内容

域名服务

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能与缓存
  8. 安全机制
  9. 高可用与容错
  10. 监控与运维
  11. API 接口文档
  12. 客户端集成示例
  13. 故障排查
  14. 结论

简介

本文件面向“域名服务”的技术文档,聚焦于域名解析与管理机制、域名与设备的关联关系、缓存与失效策略、安全防护、高可用架构、监控运维以及完整 API 文档与客户端集成示例。域名服务通过“域名配置 + 规则匹配 + 设备维度 + 缓存聚合”的方式,为设备侧提供按平台、按规则下发的域名与应用下载地址集合,并结合网关灰度负载均衡、安全过滤与监控体系,形成端到端的稳定与安全能力。

项目结构

域名服务主要分布在以下模块与文件:

  • 控制层:管理后台域名 CRUD、分页、导出
  • 业务层:域名与UOTA应用聚合、规则匹配、缓存策略
  • 数据访问层:MyBatis Mapper、DO 定义
  • 关联模块:规则引擎(绑定设备计数)、设备缓存、基础设施文件存储、网关安全与灰度负载均衡、监控指标

Mermaid Diagram Code:

graph TB
subgraph "域名服务模块"
DC["DomainController<br/>管理后台接口"]
DS["DomainService/Impl<br/>业务逻辑"]
DM["DomainMapper<br/>数据访问"]
DO["DomainDO<br/>实体"]
DUAS["DomainUotaAppService<br/>UOTA应用服务"]
DUADO["DomainUotaAppDO<br/>UOTA实体"]
end
subgraph "关联模块"
RBA["RuleBusinessApi<br/>规则绑定/计数"]
DCache["DeviceCacheUtils<br/>设备缓存"]
IFU["InfraFileUtil<br/>文件存储工具"]
FDTO["FileRespDTO<br/>文件响应DTO"]
end
subgraph "网关与安全"
GW["GatewayServerApplication<br/>网关入口"]
GFilter["GrayReactiveLoadBalancerClientFilter<br/>灰度LB"]
SEC["AppApiSecurityProperties/Configuration<br/>安全配置"]
end
subgraph "监控"
METRICS["YudaoMetricsAutoConfiguration<br/>指标标签"]
end
DC --> DS
DS --> DM
DS --> DUAS
DS --> RBA
DS --> DCache
DS --> IFU
DUAS --> DUADO
DM --> DO
IFU --> FDTO
GW --> GFilter
GW --> SEC
GW --> METRICS

图表来源

章节来源

核心组件

  • 控制层 DomainController:提供域名的创建、更新、删除、查询、分页、导出 Excel 等管理后台接口,并联动规则引擎返回设备绑定数量。
  • 业务层 DomainService/Impl:负责域名与UOTA应用聚合、规则匹配、缓存策略、租户上下文切换、设备维度匹配。
  • 数据访问层 DomainMapper/DO:提供分页查询、实体映射与持久化。
  • 关联模块:规则引擎 RuleBusinessApi 提供设备绑定计数;DeviceCacheUtils 提供设备缓存查询;InfraFileUtil 提供文件下载地址拼装;DomainUotaAppService/DO 提供启用状态的UOTA应用列表。

章节来源

架构总览

域名服务整体由“管理后台接口 + 业务聚合 + 规则匹配 + 缓存 + 文件存储 + 网关安全”构成,支持按平台聚合域名与UOTA应用,并根据设备维度进行规则匹配,最终返回给客户端。

Mermaid Diagram Code:

sequenceDiagram
participant Admin as "管理后台"
participant Ctrl as "DomainController"
participant Svc as "DomainServiceImpl"
participant Rule as "RuleBusinessApi"
participant Dev as "DeviceCacheUtils"
participant Infra as "InfraFileUtil"
participant LB as "GrayReactiveLoadBalancerClientFilter"
Admin->>Ctrl : "分页/查询/导出"
Ctrl->>Svc : "getDomainPage()/getDomain()"
Svc->>Rule : "设备绑定计数"
Rule-->>Svc : "返回计数"
Ctrl-->>Admin : "返回结果"
Admin->>Ctrl : "获取UOTA域名V2"
Ctrl->>Svc : "getUotaDomainVOV2()"
Svc->>Dev : "按mac/cpu获取设备"
Dev-->>Svc : "设备信息"
Svc->>Svc : "规则匹配(域名/应用)"
Svc->>Infra : "加载文件URL/元信息"
Infra-->>Svc : "文件响应DTO"
Svc-->>Ctrl : "聚合后的UotaDomainVO"
Ctrl-->>Admin : "返回结果"
Note over Ctrl,LB : "后续经网关灰度LB转发至目标服务"

图表来源

详细组件分析

控制层:DomainController

  • 职责:提供管理后台域名的增删改查、分页、导出 Excel;在分页时联动规则引擎返回每个域名绑定的设备数量。
  • 关键点:权限注解、分页参数、Excel 导出、设备计数聚合。

章节来源

业务层:DomainService/Impl

  • 职责:
    • 域名 CRUD 与分页;
    • UOTA域名聚合:按平台聚合域名与启用的UOTA应用,支持本地缓存;
    • 设备维度聚合:优先使用客户端令牌中的设备信息,否则从设备缓存查询;再通过规则引擎匹配域名与UOTA应用ID集合,最终裁剪返回。
  • 缓存策略:使用本地缓存注解,按平台 key 缓存聚合结果,同步模式避免缓存击穿。

Mermaid Diagram Code:

flowchart TD
Start(["进入 getUotaDomainVOV2"]) --> HasClient["是否存在客户端令牌设备信息"]
HasClient --> |是| UseClient["复制客户端设备信息"]
HasClient --> |否| GetDev["从设备缓存按mac/cpu获取设备"]
GetDev --> DevOK{"设备信息是否有效"}
DevOK --> |否| Empty["返回空结果"]
DevOK --> |是| UseDev["复制设备信息"]
UseClient --> Match["规则匹配:域名/应用ID集合"]
UseDev --> Match
Match --> Fetch["从本地缓存获取聚合结果"]
Fetch --> Found{"缓存命中?"}
Found --> |否| Build["构建聚合结果域名+启用UOTA应用"]
Found --> |是| ReturnCache["返回缓存"]
Build --> ReturnRes["返回裁剪后的结果"]
ReturnCache --> End(["结束"])
ReturnRes --> End
Empty --> End

图表来源

章节来源

数据访问层:DomainMapper/DO

  • 职责:提供分页查询、条件过滤(类型/域名/启用/备注),映射 DO 实体。
  • 关键点:动态数据源标注(任务UOTA库)、分页包装。

章节来源

关联模块

  • 规则引擎:RuleBusinessApi 提供设备绑定计数与批量计数,用于管理后台展示与业务决策。
  • 设备缓存:DeviceCacheUtils 提供按 mac/cpu 查询设备信息,作为规则匹配输入。
  • 文件存储:InfraFileUtil 通过文件ID获取 URL、大小、版本等元信息,拼装 UOTA 应用下载地址。

章节来源

依赖关系分析

  • 控制层依赖业务层;业务层依赖 Mapper/DO、规则引擎、设备缓存、文件工具。
  • 网关层依赖灰度负载均衡过滤器,实现基于服务实例的选择与安全过滤。
  • 监控层通过指标自动配置注入通用标签,便于统一观测。

Mermaid Diagram Code:

classDiagram
class DomainController {
+createDomain()
+updateDomain()
+deleteDomain()
+getDomain()
+getDomainPage()
+exportDomainExcel()
}
class DomainService {
<<interface>>
+createDomain()
+updateDomain()
+deleteDomain()
+getDomain()
+getDomainPage()
+getUotaDomainVO()
+getUotaDomainVOV2()
}
class DomainServiceImpl {
+createDomain()
+updateDomain()
+deleteDomain()
+getDomain()
+getDomainPage()
+getUotaDomainVO()
+getUotaDomainVOV2()
}
class DomainMapper {
+selectPage()
}
class DomainDO
class RuleBusinessApi
class DeviceCacheUtils
class InfraFileUtil
DomainController --> DomainService : "依赖"
DomainService <|.. DomainServiceImpl : "实现"
DomainServiceImpl --> DomainMapper : "使用"
DomainServiceImpl --> RuleBusinessApi : "调用"
DomainServiceImpl --> DeviceCacheUtils : "使用"
DomainServiceImpl --> InfraFileUtil : "使用"
DomainMapper --> DomainDO : "映射"

图表来源

性能与缓存

  • 本地缓存:聚合结果按平台 key 缓存,同步模式避免并发击穿;新增/更新/删除域名后主动清缓存,确保一致性。
  • 分页与批量计数:管理后台分页查询时,一次性批量拉取设备绑定计数,减少多次远程调用。
  • 文件元信息:通过文件ID直接拼装 URL 与版本信息,避免重复查询。

章节来源

安全机制

  • 访问控制:管理后台接口使用权限注解进行资源级授权。
  • 设备接入安全:针对机顶盒请求,提供签名与加解密配置,支持指定域名白名单、签名路径、加密路径与SDK密钥版本。
  • 网关安全:通过安全过滤器与响应加密切面,按配置决定是否验签与加密返回。
  • HTTPS 与证书:网关依赖 Spring Cloud Gateway 与注册中心/配置中心,结合生产环境配置实现 HTTPS 与证书管理(详见部署配置)。

章节来源

高可用与容错

  • 灰度负载均衡:网关通过自定义灰度负载均衡过滤器,支持按服务实例选择与生命周期回调,提升流量治理能力。
  • 动态路由:基于 Nacos 配置中心的动态路由刷新能力,实现路由变更无需重启。
  • 健康检查与自动恢复:结合注册中心的服务发现与健康检查,配合灰度LB的生命周期事件,实现故障转移与可观测性。

章节来源

监控与运维

  • 指标标签:通过自动配置为 Micrometer 注入通用应用标签,便于统一采集与展示。
  • 网关监控:网关内置 Druid 监控页面与访问日志过滤器,辅助定位问题。
  • 运维建议:结合生产环境配置与监控面板,持续观察网关健康、路由命中率与业务指标。

章节来源

API 接口文档

管理后台接口

  • 创建域名

    • 方法:POST
    • 路径:/task/domain/create
    • 权限:task:domain:create
    • 请求体:DomainSaveReqVO
    • 返回:Long(主键)
  • 更新域名

    • 方法:PUT
    • 路径:/task/domain/update
    • 权限:task:domain:update
    • 请求体:DomainSaveReqVO
    • 返回:Boolean
  • 删除域名

    • 方法:DELETE
    • 路径:/task/domain/delete
    • 权限:task:domain:delete
    • 参数:id(Long)
    • 返回:Boolean
  • 获取域名

    • 方法:GET
    • 路径:/task/domain/get
    • 权限:task:domain:query
    • 参数:id(Long)
    • 返回:DomainRespVO(含设备绑定计数)
  • 域名分页

    • 方法:GET
    • 路径:/task/domain/page
    • 权限:task:domain:query
    • 查询:DomainPageReqVO
    • 返回:PageResult<DomainRespVO>(每条记录含设备绑定计数)
  • 导出域名 Excel

    • 方法:GET
    • 路径:/task/domain/export-excel
    • 权限:task:domain:export
    • 查询:DomainPageReqVO(不分页)
    • 返回:Excel 文件

章节来源

APP 接口(域名聚合)

  • 获取UOTA域名(V2,带mac/cpu)
    • 方法:POST 或 GET(视具体实现)
    • 路径:/app-api/...(参考固件对接文档)
    • 请求:DomainListReqVO(包含 platform、mac、cpu 等)
    • 返回:UotaDomainVO(包含 domains 与 uotaApps 列表)

章节来源

客户端集成示例

  • 固件侧集成要点:
    • 先获取服务器时间戳,再构造请求数据,按协议签名与加密(如需)。
    • 通过域名服务接口获取域名与UOTA应用列表,按平台筛选后选择可用域名与应用。
    • 参考 C 语言 TCP 客户端示例与 HTTP 协议文档。

章节来源

故障排查

  • 域名不存在:删除/更新前进行存在性校验,抛出相应异常。
  • 设备信息缺失:当无客户端令牌且设备缓存查询失败时,返回空结果,需检查设备缓存与规则匹配输入。
  • 缓存未命中:确认缓存 key(platform)与缓存注解配置;新增/更新/删除后是否清除了缓存。
  • 安全配置生效:核对 no-need-domain、sign-urls、encryption-urls 与 SDK 配置是否正确。
  • 网关转发:若灰度LB未生效,检查请求 scheme 是否为 grayLb,以及服务实例健康状态。

章节来源

结论

域名服务以“规则驱动 + 设备维度 + 本地缓存 + 文件聚合”的方式,为设备侧提供稳定、可扩展的域名与UOTA应用下发能力。结合网关灰度负载均衡、安全过滤与监控体系,形成从配置到下发再到可观测的闭环。建议在生产环境中完善证书与安全配置,持续优化缓存与规则匹配策略,并通过监控与告警体系保障高可用。

用户文档
AI 助手
Agent 列表
请选择一个 Agent 开始对话
AI 问答