[Paper] 使用深度强化学习识别合适规模的服务

发布: (2025年12月23日 GMT+8 22:12)
7 min read
原文: arXiv

Source: arXiv - 2512.20381v1

概述

本文介绍了 Rake,一种深度强化学习(DRL)系统,能够自动从现有代码库中发现规模适当的微服务。该系统直接使用源代码和任何可用文档——无需人工专家或预设服务数量——解决了面向服务架构中最棘手的痛点之一:决定 how 将单体应用拆分为内聚且松耦合的服务。

关键贡献

  • Rake 框架:一种语言无关的 DRL 流水线,将服务拆分视为对实现方法的顺序决策问题。
  • 双目标奖励:将 模块化质量(内聚 + 低耦合)与 业务能力对齐(服务与功能域的匹配程度)相结合。
  • 无需人工输入:可在任意文档水平下工作,不依赖访谈或对目标服务数量的先验知识。
  • 实证评估:在四个真实的开源遗留项目上进行测试,较两款最先进的拆分工具在模块化质量上提升 7–14 %,在能力对齐上提升 18–22 %
  • 目标权衡洞察:表明在高度耦合的系统中,过度优化业务上下文会损害结构质量,强调平衡奖励的必要性。

方法论

  1. 问题表述 – 作者将服务抽取建模为马尔可夫决策过程(MDP)。每个状态编码当前方法划分为临时服务的情况,每个动作将方法从一个临时服务移动到另一个,或创建新服务。
  2. 特征提取 – 从源代码中提取调用图指标(例如方法耦合、内聚度)和文档线索(例如与业务能力的关键词相似度)。这些特征输入轻量级图神经编码器,生成状态嵌入。
  3. 奖励设计 – 奖励函数是两个组件的加权和:
    • 模块化质量 (MQ) – 传统软件工程指标,如高内部服务内聚度和低服务间耦合度。
    • 能力对齐 (CA) – 服务聚合文本特征与目标业务能力描述之间的余弦相似度。
      权重可配置,团队可以将优化器倾向于结构健全或业务相关性。
  4. 训练 – 深度 Q 网络(DQN)学习一个策略,选择能够最大化累计奖励的动作。训练在目标代码库上自行进行(自我对弈),因此不需要标注的分解数据。
  5. 推理 – 收敛后,策略运行一次生成最终的服务划分,可导出为 API 合约或部署描述符。

结果与发现

Project (open‑source)Baseline 1 (heuristic)Baseline 2 (clustering)Rake
Legacy‑E‑CommerceMQ = 0.62, CA = 0.48MQ = 0.65, CA = 0.51MQ = 0.71 (+9 %), CA = 0.63 (+23 %)
Financial‑CoreMQ = 0.58, CA = 0.44MQ = 0.60, CA = 0.46MQ = 0.68 (+13 %), CA = 0.57 (+24 %)
IoT‑GatewayMQ = 0.66, CA = 0.52MQ = 0.68, CA = 0.55MQ = 0.73 (+7 %), CA = 0.68 (+18 %)
Legacy‑CMSMQ = 0.61, CA = 0.49MQ = 0.63, CA = 0.51MQ = 0.71 (+13 %), CA = 0.62 (+20 %)
  • 更高的模块化质量 表示循环依赖更少,服务边界更清晰。
  • 更强的能力对齐 意味着每个生成的服务更贴合业务领域(例如,“订单处理”“用户管理”)。
  • 当奖励仅强调 CA 时,IoT‑Gateway 这一高度耦合的系统的 MQ 明显下降,验证了作者关于目标不平衡的警告。

Source:

实际意义

  • 加速迁移:团队可以将单体代码库输入 Rake,快速获得首次服务划分,无需数周的领域研讨。
  • 语言无关的采用:由于 Rake 基于通用的调用图提取和文本分析,可嵌入 Java、Python、Go 或混合语言生态系统。
  • 持续重构:Rake 可集成到 CI 流水线中,随着代码演进提供服务重新划分建议,帮助保持健康的服务网格。
  • 可定制的权衡:产品负责人可以调节 MQ 与 CA 的权重,以偏向快速业务功能交付(更高 CA)或长期可维护性(更高 MQ)。
  • 工具生态系统:输出的服务‑方法映射可供 API 网关生成器、Docker/Kubernetes 清单或架构可视化仪表盘使用,将研究成果转化为实用的工程资产。

限制与未来工作

  • 训练成本:自我对弈 DQN 需要在大型代码库上耗费数小时的 GPU 时间,这对非常大的单体系统可能是难以承受的。
  • 文档依赖:虽然 Rake 在文档极少的情况下仍能工作,但当文本线索稀疏或噪声较大时,CA 组件的质量会下降。
  • 仅限静态分析:运行时行为(例如动态分派、反射)未被捕获,可能会遗漏隐藏的耦合。
  • 未来方向:作者建议的包括 (1) 增量学习以在代码变更时更新策略,(2) 混合静态‑动态分析以丰富状态表示,和 (3) 让架构师在交互式界面中引导分解的用户‑在‑环路接口。

作者

  • Syeda Tasnim Fabiha
  • Saad Shafiq
  • Wesley Klewerton Guez Assunção
  • Nenad Medvidović

论文信息

  • arXiv ID: 2512.20381v1
  • Categories: cs.SE, cs.AI
  • Published: 2025年12月23日
  • PDF: 下载 PDF
Back to Blog

相关文章

阅读更多 »