在现代软件开发领域,微服务架构与容器化部署已迅速成为行业新趋势。微服务架构通过将应用拆分成多个小型、自治的服务单元,每个服务承担某项特定的业务功能。而容器化部署则以其轻量级和高度可移植的特性,为这些微服务的有效打包、分发和运行提供了强大支持。
在这样的环境中,实现微服务的优雅上下线变得至关重要。优雅上下线意味着在进行服务更新、扩展或缩减服务规模时,能够无缝切换,避免或最小化对用户的影响。这种做法不仅保障了系统的高可用性和稳定性,还大幅提升了开发和运维团队的工作效率。
本文将深入探讨如何借助容器化技术,实现微服务的优雅上下线。我们将分享一系列实用的方法和策略,包括滚动升级、就绪检查以及优雅关闭等。通过采用这些策略,您能在进行版本更新、规模调整或故障恢复期间,确保系统的连续稳定运行,从而显著提升整体的系统可靠性和稳定性。
1 项目背景
BOSS物业管理系统(以下简称“BOSS系统”)是碧桂园服务(以下简称“碧服”)体系中的核心主营收费系统,它主要负责管理客户、房屋及车位等基础数据,并支持物业费、合同类、表计类、车位类及临时类费用的全自动化计费。BOSS系统采用微服务架构和容器化部署,拆分成30个不同功能的微服务。这种设计虽然大幅提升了系统的灵活性和可维护性,却也增加了服务发版部署的时长。
此外,在发版过程中,服务可能会出现短暂的中断,或者在服务停止时还有未完成的异步线程的任务,导致业务数据的不完整,进而引发大量的运维工单,增加运维成本的同时也影响了用户体验。
当前,BOSS系统采用了敏捷开发模式,其显著特点之一是小步快跑。这种模式使我们能够以更快的速度推出新功能和优化现有功能,迅速响应用户业务需求的变化。在这种开发模式下,发版效率显得尤为重要。以往,每次部署时长约两小时,再加上发版后的验证回归和测试,整个流程可能需要数小时才能完成。这样漫长的发版流程不仅占用了团队大量的时间和资源,还增加了出错的风险。
2 如何实现高效
2.1 引入发版的checklist
由于BOSS系统的服务拆分的比较细,若全量发版则需要发布30个服务。每次发版不仅包括数据库更改脚本、nacos配置更新及XXL-Job任务调度等内容,还有服务清单和代码迁入的情况。如果在发版前没有进行充分的检查与准备,后续可能需要多次更新服务,极大地增加了整个发版时长。
为了解决这一问题,引入发版checklist显得尤为重要。该checklist能够帮助盘点上线事项,并回顾开发过程中的各个细节。通过checklist,团队可以更有序地执行发版流程,从而提高发版的效率和准确性。
上线checklist包括以下几个关键内容:
1、上线前准备:此阶段需准备数据库脚本、nacos配置、XXL-Job任务以及一些提前编写好的配置文件等;
2、上线步骤:包括更新的SQL、各个模块的更新顺序以及是否依赖公共包等。对于C端应用,需要注意服务端与前端的发布先后顺序;
3、需验证的事项:在每个模块更新完成后,需采取相应的措施来验证其是否正常,例如观察页面、检查日志和监控是否正常等;
4、明确人与时间:checklist应尽可能详细,明确具体的人员和特定时间段的任务安排;
5、评估对用户的影响:在每个步骤完成后,需要评估对用户的影响,并关注相应的内容;
6、提前做好预发回归:预发环境应与生产环境的数据源相通。在预发环境中,可以模拟线上更新的步骤,提前预演一遍。为避免预发环境对线上的影响,可考虑使用白名单控制访问权限,同时注意用户权限的回收,以防止误操作影响线上环境。