互联网项目随着业务的发展,系统越来越多,业务越来越复杂,系统架构也越来越复杂。业务的增长和人员的增多,给技术架构、团队合作、产品的交付带来了巨大的挑战。本文将讲述为了达到高质量持续交付的目标而做出的架构改进。希望能够帮助大家在大项目之间集成与开发,能够提高开发效率和开发质量,减少测试人员的工作量与项目的风险,提供高质量高效率的项目交付。
在58团购早期,基本只分为3个大工程,即前台工程,后台工程,供应商后台工程。
发布模式:
项目缺点:
1、项目采用ant打包发布,没有统一jar管理仓库;
2、直接采用svn主干开发主干发布模式,只能单人员,单线程的开发需求,无法并行开发不同的需求,降低了项目的开发效率;
3、没有任何的代码diff和review机制,测试人员只能进行黑盒测试,即只能知道输入和输出,无法了解其中的过程;修改的业务对其他业务造成的影响,除了开发人员自己知道外,其他人无法知道;
4、测试人员每次测试,都需要对之前的需求进行回归,这样测试的工作量很大,需要不断地重复之前的测试工作,造成测试的效率低下;
5、所有的部署都依赖与开发人员或运维上线部署,人工干预太多,每次上次个别修改的class或文件上线,容易造成遗漏出问题;回滚项目依赖于每次上线前的人工备份。
后来基于58同城的架构,对项目进行了拆分,并有所改进,如以下:
开发流程:
发布模式:
1、分支开发,主干发布,由开发人员把分支上的代码合并到主干;
2、由测试人员通过jenkins打包,手工发布到beta环境上;
3、再由测试人员手工打包发布到沙箱环境上;
4、再通过统一发布管理平台从沙箱环境发布到线上;
以上构建模式确实改善了手工上线容易出现的问题,让测试人员可以独立打包发布。但是也存在以下新的问题。
缺点:
1、没有代码diff和review机制,对测试人员来说,同样是黑盒测试;
2、测试人员手工发布太多,对测试人员提出了更高的要求,需要了解项目的部署结构,且测试人员浪费了大量的时间部署项目;
2、对其他业务造成的影响除了开发人员自己外,没有人知道造成的影响;
3、测试人员每次测试,都需要对之前的需求进行回归,这样测试的工作量很大,需要不断地重复之前的测试工作,造成测试的效率低下;
4、相当于把项目的命运完全交到开发人员的手上,对项目来说,风险很大,上线很容易出问题;
接下来,我们讲讲针对上述问题,我们改如何改进,把我们的平台发布提高到一个更高的层次。
首先要明确各个系统的开发、提测、集成、灰度发布、正式发布等各个生命周期的边界,真正做到各个阶段独立。其次在各个生命周期中加入了规范性的流程,并有系统平台保证了流程的真正实施,最后质量保证和效率会得到很大的提升。
平台搭建:
持续集成系统与其他系统之间相互交互,共同支撑整个集成平台。可以基于jenkins系统上做打包项目,增加版本校验、代码规范校验、自动发布等功能。自动发布完成后,可以配置自动启动自动化测试平台,输出自动化测试结果,能够快速发现bug并快速解决。
持续集成系统交互流程:
保证质量的手段
有了高效,稳定的集成平台系统,剩下的事情就是在流程上严格控制,确保每一个流程执行到位。1、增加开发组内代码review流程,可以确保改动是否会对其他业务造成的影响,能够避免问题的出现;
2、增加测试人员review代码流程 ,可以确保测试人员不再是黑盒测试,他们是能够看到中间的过程以及业务逻辑,能够最大限度地避免问题的产生。
3、监控系统能够保证系统稳定而高效地运行,发现系统不可用时,能够及时报警。
改进后流程如下:
线上监控分析
1)线下质量数据、线上业务问题、舆情反馈等信息统一汇集到平台上进行统一的分析告警,不仅能快速的发现问题,而且能通过数据分析能够帮助快速定位和解决问题。
2)根据平台中的数据,可以用经验推动流程的优化、补充测试用例、添加扫描规则、增加自动化场景、催生新的测试工具等,这样可以使经验形成闭环,使质量保障工作更加高效。