Saas云产品持续交付流程总结
⾯向中⼩型客户的Saas云产品Devops建设总结
⼀、Devops概念
Devops(Development and Operations)是⼀组过程、⽅法与系统的统称,⽤于促进开发、运营和技术保障部门之间的协作沟通与整合,可以避免开发⼈员与运维⼈员产品沟通、⼯作流程的脱节。
⼆、交付背景
1.客户分布
本产品定位为⾏业解决⽅案,主要⾯向客户范围为全国各地,单个客户的系统使⽤⼈数为500-2000⼈。会出现部分模块定制化开发或业务流程调整的情况,因此需要进⾏较为频繁的版本迭代,并能在效率较⾼的情况下尽量减少成本预算和开销。
持续集成的概念
2.远程运维愿景
由于存在客户体⼤、分布地区多样、版本发布频繁的需求存在,因此需要可以实现远程运维,能在单点控制多个客户现场。
如下图所⽰:
(1)服务资源最终会托管给云供应商,研发团队通过访问IP的⽅式对云主机进⾏操作
(2)云供应商会对访问IP进⾏权限控制,保障只对⽤户内⽹提供系统使⽤
(3)⽤户在使⽤过程中如果出现问题或者建议,可以向研发运维团队反馈,并进⾏远程⽀持维护
三、技术背景
1.开发技术栈
服务端采⽤了微服务分布式架构,与传统架构相⽐,分布式架构更好地解决了服务器性能问题,利⽤多节点的更强处理能⼒,提⾼系统的整体性能。在业务⽅⾯,将系统拆分成多个业务单元,让模块之间⾼内聚低耦合,降低业务的复杂度。同时,在部署⽅⾯,可以根据各个模块的使⽤特点,合理的分配资源,如基础数据模块,可以更多地分配云资源,保证⾯向较⼤并发量时的稳定性。
2.Devops⼯具链
⽤途名称
代码管理(SCM)Gitlab
持续集成Jenkins
构建⼯具Maven
包(镜像)管理Npm、Nexus、Harbor
镜像docker
代理+web服务器Ngnix、Haproxy
脚本语⾔shell
⽇志采集Elasticsearch、Logstash、Kibana
链路追踪Zipkin
服务监控Prometheus
四、发布流程
1.持续集成
持续集成(Continuous integration)是⼀种软件开发实践,即团队开发成员经常集成他们的⼯作,通
常每个成员每天⾄少集成⼀次,也就意味着每天可能会发⽣多次集成。每次集成都通过⾃动化的构建(包括编译,发布,⾃动化测试)来验证,从⽽尽早地发现集成错误。本产品持续集成部分主做了如下⼯作,如下图所⽰:
(1)开发⼈员将⾃⼰在本地开发好的代码提交并合并到指定的分⽀,接着会触发Jenkins的pipeline(PS:由于代码管理模式没⽤到fork,因此没有在merge request时进⾏代码测试)
(2)Jenkins会按照设定好的步骤进⾏基础环境进⾏检测,判断是否可以进⾏下⼀步构建⼯作。紧接着会对新的代码版本进⾏代码检查、build、单元测试
agent  {
docker {
image 'node:latest'
}
}
(3)以上流程都通过以后会将代码上传到版本库当中(Nexus、Harbor),如果中途没有通过,会将错误⽇志Email发送到相关⼈员的邮箱中
post {
failure {
updateGitlabCommitStatus name: 'complete', state: 'failed'
emailext attachLog: true,
2.持续交付
持续交付(Continuous delivery),是⼀种软件⼯程⼿法,让软件产品的产出过程在⼀个短周期内完成,以保证软件可以稳定、持续的保持在随时可以发布的状况。它的⽬标在于让软件的构建、测试与发布变得更快以及更频繁。这种⽅式可以减少软件开发的成本与时间,减少风险,流程图下图所⽰:
(1)Jenkins根据指定的包版本号从nexus仓库中取出对应版本的包,并压缩发送到跳转服务器(跳转服务器的存在为了解决公司内⽹和云之间的⽹络问题)
(2)通过Jenkins远程触发测试环境的更新脚本,并执⾏多个步骤。
a)从跳转服务器获取压缩包
b)执⾏解压
c)替换新的版本包到指定⽬录下
d)停⽌原有进程,启动新的进程
e)进程检测
f)测试环境发布完成
(3)开发测试⼈员对新的版本进⾏确认,并启动⾃动化测试⼯具(selenium)进⾏测试
(4)在⽣产环境指定步骤2的基本操作流程
(5)通过Prometheus、ELK、ZIPkin等⼯具对服务和软件信息进⾏记录和监控
五、云端部署架构
使⽤LVS、Nginx反向代理、微服务结点多活,数据库RAC,对集实现多层负载均衡。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。