谈我们的研发运维一体化交付模式
By 老彦
物有本末,事有始终,知所先后,则近道矣。
– 《大学》
[TOC]
一、说在前面的话
本文旨在记录下本人与同事,同行,以及相关领导关于研发运维一体化,架构优化与创新问题所进行的无数对话,讨论的内容,通过这些对话与讨论,很多人为本文提供了有价值的输入。
在经历了产品研发团队工作1年多的时间和开发运维团队工作6个月的时间之后,想起应该说下我们研发运维一体化技术那点事儿。每个人从不同的视角看的感受肯定不尽相同,通过本文分享下我的理解,希望大家在此有一个彼此碰撞的机会,产生更好的思考。
任何成功的架构都是适合企业自身的架构。形成过程中的挫折再所难免,非常感谢公司管理层看到我们不断的改进,交付向好的趋势,坚定地给予了团队足够的技术战略支持和耐心。CTO带领我们大家在一年半时间里,通过无数次碰撞,碰壁,不断修正中形成了当前的研发运维一体化的技术架构和协作模式,并且还在持续地改进中,印证了那句话:成功不是终点,失败也不是末日。
业务目标必须是驱动IT变革的原因,而原因又会驱动IT变革的方式。面对客户的业务,要求我们产品交付过程要更加优化,要更加敏捷,适应变化,对客户要更具有响应力,利用更少的资源做更多的事情,更高效、更快速、更高质的交付;我们要创新,吸引并发展客户群体,针对市场,灵活应变。这些是变革需求产生的驱动力,是实现开发运维实施效益的工作动机。
二、产品研发运维架构
- 当今,基于微服务、容器化和DevOps的云原生应用架构得到了越来越多的关注。
微服务通过将复杂的系统进行解耦从而使业务功能的修改和增加变得更加容易。专注业务的微服务技术,将一组提供少量功能的服务集合整合到一起,这些系统的整体功能来自多个服务,基于此架构能最小化团队间显示协作的需求,最大化独立部署服务的能力;容器技术提供了很好的横向扩/缩容与自愈能力;保驾护航的DevOps方法,源于敏捷开发,保证了所有环境的一致性,持续集成、持续交付(每次交付都是随时可以部署的)、持续监控、持续反馈,更加有条不紊。
- 产品研发运维一体化工具集(图),带标记的是我们实际在用的开源工具,产品研发中心在用的工具链覆盖软件产品研发运维的全生命周期的主要方面,工具来自免费的开源社区,目的是促进良好的协同、高效的交付、不断改进工程能力,目前主要致力于以下几方面:
<img src="https://raw.githubusercontent.com/reachsys/imagebed/master/blog/image/202104/image-20211224155225202.png" alt="image-20211224155225202" style="zoom:50%;" />
流水化集成和部署:自助式的图形化发布操作直观简易,开发人员可以有更多的时间在业务实现上,减少代码提交和部署之间的时间;配合敏捷迭代,每天N次快速发布。
镜像化管理和交付:客户发布有镜像仓库,本地研发有镜像管理;图形化管理镜像和容器更高效,镜像保证所有环境的一致性;大幅提升环境的运维的效率。
可视化监控和告警:研发环境监控、客户应用监控、应用日志监控、故障即时告警;在客户发现问题前响应问题,团队再也不会后知后觉,缩短响应周期,提升客户服务质量。
代码化基础架构:Jenkins脚本,负责代码集成与构建,发布本地研发环境或推送镜像仓库;Docker脚本,负责应用镜像的生成,容器运行;Shell脚本,负责客户生产环境部署,数据和文件备份,数据迁移,收集监控数据;这些代码消除了重复命令行操作,提升运维效率,代码生成一致可维护的基础架构环境,帮助开发人员专注于业务代码实现。
文档化操作流程:包括基础环境搭建,应用环境部署,业务数据备份,租户数据迁移;研发交付流程更清晰,节省人员工作交接的时间,避免人员单点故障,提高知识传递的效率;目录化也帮助操作过程的标准化。
- 产品研发运维一体化架构(图)在我们产品研发交付中,利用已经建立的工具链,遵循开发运维的基础架构即代码的方式,以统一的配置和代码,产生一致的服务基础环境,提供给客户业务应用服务,根据部署不同环境的迁移标准,自动化部署到开发环境,测试环境,准生产环境和客户生产环境。
<img src="https://raw.githubusercontent.com/reachsys/imagebed/master/blog/image/202104/image-20211224151744758.png" alt="image-20211224151744758" style="zoom:50%;" />
实现持续交付所需的架构转换使功能变更得以按照小批次进行交付,这些变更包括开发到运维完整周期的所有代码,配置,基础设施,数据,脚本,部署流程等的变更。
架构支持多钟交付方式,其中以云端SAAS交付和客户私有化交付两种方式最常用,SAAS交付通过持续交付流水线快速完成敏捷迭代后的更新,私有化交付是通过持续交付流水线完成客户应用镜像并上传云端镜像仓库,然后从客户服务器进行授权的镜像拉取,在线部署,十分便捷。
我们对业务环境的应用服务进行实时健康状态监控和日志记录,并会对生产环境的业务数据以及文件进行全量和增量备份。
三、产品研发运维协作
- 产品研发运维活动协作(图)中我们每个团队都有一定的工作边界,这种边界不会泾渭分明,基于组织战略,在交付活动中是共同融合的,这样可以保障工作中的衔接更加顺畅,不会有断层,彼此都了解相关的工作情况,能让更多的人有面对问题的知识储备。我们并不以团队职能划分进行协作,而是以交付活动本身聚合各个团队的能力进行跨职能的敏捷团队协作,目的是尽早发现并解决交付的质量问题。
* 产品研发活动前移对接客户需求;质量保证活动前移,一方面,测试人员在需求上前移与项目交付合作接近客户,另一方面,开发人员在开发中引入测试驱动开发,让质量工作前移,从代码编写的过程中就开始;开发运维即DevOps活动顾名思义,在工作中前移对接开发,意味着不仅需要治理研发的环境,还要对研发出来的软件产品架构和代码有一定的了解,以便更好的完成运维工作。
* 项目交付活动是最接近客户价值的活动,而客户价值活动是和我们的业务视角对齐,产品研发到测试再到项目实施,开发运维工作贯穿始终,研发运维一体化就是用敏捷开发方法论结合DevOps技术实践,助力研发交付流水线的提升,开发和运维都希望能尽快迭代,不需要约定某个特定的时间,流水线时刻可以接受发布任务。如果迭代开发,我们每两周发布一次生产环境,我们每天都要有若干次的测试环境部署,更多次的开发环境部署。协同交付和持续反馈,是实现持续改进和质量保障的必要条件。</ol>
### 四、带给研发的价值
1. 良好的代码版本管理(图),可以随时为部署任一版本的客户进行热修复
* 持续部署流水线,允许开发人员一键自助式部署到被授权的任一环境,如果在研发环境中,仅需几分钟即可完成一次部署;我们的私有镜像仓库,允许研发或运维人员从远程为客户环境进行自助式的私有化部署,仅仅需要执行1个部署脚本,业务应用服务的便会自动更新,排除网络影响,每个微服务组件的发布仅需1-3分钟,整个业务应用的发布在15分钟内可以完成。可以很快对迭代功能进行在部署环境下的验证。
* 可视化的监控,包括环境监控、应用监控、系统监控,团队可以快速获得反馈,随时改进,更少的意外问题和救火行为,意味着我们有时间做更多的技术架构提升和产品功能迭代。
* 研发环境、业务环境的数据安全,定时自动备份,产品研发数据备份,研发基础环境数据备份,客户业务数据备份,保护了我们的无形资产。
* 基础设施即代码,开发应用程序一样开发基础设施代码,运维代码和研发代码都在版本控制管理之下。上线一个虚拟环境或一个环境的新版本,就变成执行脚本的过程,脚本可以创建并提供一个或一组镜像,完成从操作系统到应用服务集的部署与配置。过去几个小时甚至几天才能完成的工作,现在只要几分钟。</ol>
### 五、带给组织的价值
1. 专业的技术框架和研发流程,更具有行业的影响力和承诺客户的信心。
2. 根据组织的业务计划,有持续可评估的交付计划,能够敏捷以及快速响应客户反馈,成功交付。
3. 更高效的主动运维服务,持续监控,团队可以在问题影响客户业务之前,及时解决,保障客户满意度。
4. 更低的交付成本和运维成本,组织持续投入的DevOps活动,从而确保标准化、流程化的业务应用和研发环境治理,无需任何定制和人工重复的浪费,更加精益。
5. 敏捷文化的方法和技术落地,有效的传播,让更多的团队从中受益。
### 六、带给客户的价值
1. 从容应对快速变化的业务需求,可以做到对业务的无感知更新,保障业务连续性。整个热部署、快速部署过程从变更的源代码提交到客户业务人员手中的可以使用的功能,在10分钟左右可以完成。
2. 保证业务数据安全,每天都有定时的自动全量和增量的备份,可以做到从故障中快速恢复业务的容灾恢复能力。
3. 统一平台的可视化监控、应用运行日志、故障告警即时提醒,客户关心的一切,尽在掌握。
### 七、走向未来的路
前面看到本文的主标题,我们这里说的不是单纯的从速度维度来说越快越好,产品研发交付会思考:如何在质量保证,客户满意前提下,合理的快。先想在哪方面快,再讨论怎么快,最后再说有多快。
敏捷或速度的诉求是研发运维一体化存在的第一性原理。我们持续改进的方向主要在三方面:产品功能开发,开发运维环境,组织协作流程。诸如敏捷、开发运维这样的新方法,以及云计算、微服务这样的新技术,加速催生了新的IT能力。在整个组织内实施研发运维一体化,让团队变得更加敏捷、高效及创新。技术架构面临的挑战是未来业务多变,速度要快和稳定性要高,系统更复杂。
我们着眼当前的产品交付工作,努力提升团队满意度,组织满意度和客户满意度;保持短期日常改进工作,做好质量化开发,流水化部署,容器化交付,可视化监控,代码化基础架构,自动化运维;坚持做好未来长期的规划,目标就是:帮团队增效,帮公司降成本,保障客户业务持续价值。
2021年即将过去,2022年很快来到,关于开发运维团队接下来推进的几个主要方向上的工作如下:
1. 基于公有云的DevOps建设,在公有云环境下,利用现有的DevOps在研发环境的建设成果,支持SAAS模式交付流程优化。产品的SAAS服务架构(图)
<img src="https://raw.githubusercontent.com/reachsys/imagebed/master/blog/image/202112/image-20211227152619187.png" alt="image-20211227152619187" style="zoom:50%;" />
<ol start="2">
<li>
<p>
向k8s迁移,k8s基于容器技术的分布式架构领先方案,提高了大规模容器集群管理的便捷性,真正的生产型应用会涉及多个容器。这些容器必须跨多个服务器主机进行部署。k8s可以帮助用户省去应用容器化过程的许多手动部署和扩展操作。它提供了一个便捷有效的平台,我们可以在物理机和虚拟机集群上调度和运行容器,可以帮助我们在生产环境中,完全实施并依托基于容器的基础架构运营。
</p>
</li>
<li>
<p>
产品研发和运维的工具建设,目的是支持团队间透明和有效协作,规范化文档;分享产品发布状态、客户环境信息等;有效整合研发和运维工具链。产品研发运维一体化管理平台(图)
</p>
</li>
</ol>
<img src="https://raw.githubusercontent.com/reachsys/imagebed/master/blog/image/202104/image-20211224153417648.png" alt="image-20211224153417648" style="zoom:50%;" />
—
END
感谢你阅读本文,希望能在评论区学习到大家的经验和想法~
如果对相关内容感兴趣可以关注我的公众号:捷伴行Agile。会有更多更及时的内容与君分享。
<img class="alignnone size-full wp-image-642" src="https://raw.githubusercontent.com/reachsys/imagebed/master/blog/image/202007/qrcode_for_gh_babbdd98b6f5_258-1-20200606164316652.jpg" sizes="(max-width: 258px) 100vw, 258px" />