现代软件的兼容管理最佳实践

举报
liubao68 发表于 2021/07/22 21:24:52 2021/07/22
【摘要】 本文描述现代软件兼容管理最佳实践。

DevOps、微服务是现代软件开发代表性的技术和方法论,他们的共同特征都是强调持续、敏捷的交付软件产品。影响DevOps、微服务实施有很多因素,包括技术的,比如框架和架构选型;管理的,比如编程规范和门禁等等。兼容性管理是影响DevOps和微服务实施非常重要,但是又极容易被忽视的环节。探讨兼容性管理对DevOps和微服务实施的影响需要大量的实证经验。本文跳过对实证经验的分析,直接描述最佳实践。评估这个实践,需要把握一个核心的原则,“始终围绕改善软件产品质量,降低软件维护成本,提升软件创新效率”,这样才能够理解这个最佳实践的意义。实施这个实践需要上下游齐心,协调一致,共同进步。

兼容管理分类

兼容管理一定不能一刀切。根据应用场景选择合适的兼容策略,是第一个需要关注的内容。最简单的方法是把它分为两类:

  • 服务。服务指给用户提供某种功能的软件,一般指一个进程。服务的表现形式一般是REST API。 服务的兼容管理就是REST API的兼容管理。当然广义的服务还包括运行时,比如操作系统、容器等。
  • SDK。SDK是开发服务的组件,SDK需要和业务代码、其他SDK一起编译,最终打包为服务。为了简化,我们把SDK的表现形式称为JAVA API。SDK的兼容管理就是JAVA API的兼容管理。


服务的兼容管理

服务兼容管理的核心原则

  • 采用双版本机制管理服务。在研版本和维护版本。在研版本和维护版本在REST API上不兼容。在研版本和维护版本的各个小版本之间REST API兼容。
  • 小版本升级采用自动化的方式进行。当发布一个新的小版本,提供自动化的方式升级。由于小版本升级REST API是兼容的,这个过程一般不会对客户的业务造成中断。自动化方式升级的目的,是尽可能减少版本的数量,这对软件功能规划(新增、兼容、下线等)都具有重要意义。
  • 维护版本升级到在研版本,只需要考虑最新的维护版本升级到最新的在研版本,升级版本的跨度很小,从而极大的降低升级风险、升级代码和验证复杂度。


SDK的兼容管理

SDK兼容管理的核心原则

  • 采用双版本机制管理SDK。在研版本和维护版本。在研版本和维护版本在JAVA API上保持恰当的编译时兼容。集成新的SDK版本的时候,需要重新编译、解决编译错误、增加适当测试用例。SDK不需要保持JAVA API的运行时和编译时兼容,只需要保证没有功能丢失,废弃的功能有替换方案。这种方式可以让SDK的开发维护变得简单,持续的重构也能够改善SDK的质量。
  • 服务进行持续集成。根据需要,比如发现bug,按照迭代计划,比如每个月,两个方向安排SDK的升级。通过这种方式,减少版本的数量。
  • 维护版本升级到在研版本和普通小版本升级只是工作量差异。


补充说明

恰当的编译时兼容的说明参考:http://servicecomb.gitee.io/servicecomb-java-chassis-doc/java-chassis/zh_CN/featured-topics/compatibility.html 。这里面描述了SDK兼容管理的一些最佳实践。 服务的兼容性管理实践在手机操作系统上已经非常普遍,但是在一些云产商的PaaS服务方面,还不是特别多,这主要受限于对于兼容管理的理解,以及自动升级的风险管理能力建设的缺失。 兼容管理实践还有很多细节的内容,比如构建自动化测试能力,开发部署流水线、代码策略(通过删除语义变化的接口,提供新的接口强制编译失败)等。





【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。