大数据风控官
专业?深度?分享
背景一般部署流程涉及三个角色参与,人员沟通造成人力成本高,产品迭代效率低的问题。系统的部署质量控制,preview部分的问题,到达preview条件的部署版本未进行全量概率较小,preview构造阶段占产品构造阶段时间长。部署质量控制,灰度控制部分的问题,没有完整的灰度控制机制,出问题后影响面较大,影响产品MTBF指标。回滚需要人工进行,如出现问题,MTTR较高。部署新服务的成本问题,没有将产品包同环境拆分,对产品包进行线性和有效的管理。架构设计思路与功能点介绍
此架构抽取了百度、腾讯、滴滴3家公司发布系统的部分功能特点并结合现公司业务场景进行设计与开发将发布操作流程化、规范化,在发布过程中实现授权发布以及权限分配和控制。解决发布流程繁琐的痛点,在发布过程中可以控制发布节奏,随时可以终止并再次发布。也可以灰度发布,首先发布一台或者一部分,发布完成后测试介入进行校验,确保发布成功再进行全量发布。
发布中可以支持高并发至少支持+应用服务器并行发布。发布完成后如果失败可以快速回滚,也可以通过指定GitlabReversion回滚到历史版本。任务锁机制可以避免在多项目多人操作中同时发布同一产品。
框架开发完成后要做到可编程可扩展,也可支持多技术栈。任意在部署行为、检查行为上增加功能,以及进行发布完成后的异常诊断包管理,使用Yum方式进行包版本管理控制,将包名设计唯一性需要有:ProjectName、BranchName、PackageTime、GitlabReversion(ReleaseTag)、PackageNumber5个信息使得无需做任何更改即可通过yum自身功能进行选择最新版本以及指定版本进行安装部署。
改造系统描述
发布流程
1.Test阶段:
研发人员在fork出的产品repo中提交新的feature,并负责mrege到自己repo的主干,之后由gitlabwebhook自动触发jenkins的构建和部署,构建产出用于测试环境上线,部署由工具部署至测试环境。研发人员在测试环境中调试。与之前流程没有区别。
2.Release阶段:
取消release阶段,引入preview环境,用于上线前功能确认。在preview环境中可进行读写功能测试,写功能需要由测试研发人员保障不污染数据,如有需要可以将preview环境单独接一套数据与生产数据隔离。
3.Preview阶段:
引入preview阶段,preview环境等同于生产环境,同生产环境的区别是没有实际流量。
在研发人员确认开发内容可上线后,像项目所在组的leader提出上线请求,leader审批请求后进行自动合并,并触发jenkins自动构建,最终生成可发布于生产环境的发布包,并将发布包存档与productrepo中,该repo用于上线。研发人员知晓leader审批完成后,会得到用于上线的key信息,在deploysubsystem中提供上线key信息,进行部署。
4.Online阶段:
部署阶段强制进行初次部署的preview阶段部署,对于回滚操作可按需求进行preview阶段。preview阶段完成结束后deploysubsystem进行强制暂停,由研发人员验证preview环境正确性。确认后在deploysubsysgem中继续部署。preview环境后可选择一次性部署的比例,分批将全部实例进行部署。
5.回滚阶段:
由开发人员在deploysubsystem中,通过key回滚至上一版本或制定某一版本。发布流程涉及开发人员=项目leader=开发人员。不涉及op参与部署。仅涉及研发人员间上线流程上的审批沟通,降低沟通效率以及部署迭代时间上的成本。取消release部署发布环节,减低人员沟通成本。发布时引入强制preview环境,降低应用内容故障对用户影响可能性。发布时引入灰度机制,可分布发布,降低问题代码的影响面。引入快速回滚,加快回滚速度,降低故障影响时间。发布包与代码仓库解耦,部署系统与操作系统解耦。
部署控制系统:
数据结构示例
RPC结构为:
messageTServer{requiredstringnaming=3;requiredstringbranch=2;optionalstringreversion=5;requiredstringtoken=6;requiredstringaction=7;optionaluint32parallel=1;optionaluint32step=4;optionalstring北京治白癜风症最好的医院北京哪家治白癜风最好