小型公司DevOps落地实践案例
Posted 分布式实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小型公司DevOps落地实践案例相关的知识,希望对你有一定的参考价值。
最近几年DevOps的概念越来越火,各个企业也逐渐意识到DevOps对项目研发效率的重要性,也有不少第三方企业提供整套流程成熟的解决方案。而我们侥幸,在这些第三方平台尚未崛起时,制定了一套适合自己的DevOps流程。
下面我们聊聊Java项目,我们把一个Git库中的2个项目(接口、后台管理)进行拆分:
接口服务
后台服务
html5包
公共包服务
我们主要做了前后端分离,代码Git库分支化管理(事实上大部分小公司都可以这么拆分)。
使用Jenkins编译,包含我们Java项目、H5项目、安卓项目、ios项目。
开发人员只需要本地调试后,提交代码到Git库的某个项目分支上,由Jenkins自动编译。如果编译错误会通过邮件反馈到影响代码的开发人员邮箱中,另外测试人员一键部署后,测试出问题,也可以通过Jira提单给开发人员。开发人员收到后,继续提交代码,不再像我们之前,必须通知开发人员,开发人员本地打包。
流程如下:
这里我们做了一点偷懒,我们版本号的维护也交给了Jenkins,通过脚本由Jenkins自动增加版本号。
升级、显示当前版本
对war包有效期,真实性校验
开发人员将公共SQL放入公共.sql里
各个客户定制化需求的SQL放入各个客户.sql里
项目经理升级时,自动提示未执行的SQL,点击执行即可。
接下来,我们聊客户端:
测试人员从Jira提单后,开发人员解决后,会看到具体解决的版本号,然后进入OSS存储,安装android程序,或者IOS程序,一键部署Java项目。
因为各个时期部署的系统版本以及服务器型号等都不通,所以线上环境比较混乱。
我们采用Docker容器统一方案解决此问题,使得每个客户机器环境均相同。我知道在座的各位都是Docker大神,我就不多讲了。
我们用的是Portainer框架,简单二次开发了一点功能。
我们用了TLS认证,所以,管理者并不是通过Linux密码控制,而是通过配置平台,然后分配权限给各个项目经理所在的team中,然后,项目经理对team成员权限进行管理分配。
该方案优点:
在Docker下,所有客户生产环境相同。
易于备份、迁移、恢复。
可建高可用环境,发包时采用灰度发包,蓝绿部署不中断服务。
可支持弹性伸缩设计,支持扩展。
支持负载均衡,域名转发,意外切换容器等。
有利于转型微服务架构。
而建立Docker集群需要我们自动化完成,这里我采用了Ansible工具来实施,我们可通过指令分发,指令获取所有机器某个包的版本,执行不同的代码。
我们采用了RESTful风格的API,也许很多人说RESTful不是很简单,10分钟上手,30分钟精通,事实上绝对比这要复杂的多。有很多的细节,很多的约束,经过几个月的协调开发后,都未必能避免出现不太和谐的接口。
之前,我们项目,各种接口文档都存在,主要有一下:
Swagger
阿里的RAP
Word文档
其它
对了,之前的接口是这样的:
…/A项目/模块1/getProducts ----接口
…/A项目/模块1/Products.html ----页面
…/A项目/模块1/Products.js ----静态资源
留下了很多的坑,这里不对RESTful再做详细介绍,有兴趣,大家可以自己了解下。我们统一了一个接口文档为postman,可能很多朋友会说postman怎么能作为接口文档,我只想说,他适合小公司,不仅有入参、出参示例(可以多个例子),还能在tests里写接口说明,也方便前端调试,调用服务器使用。
Q:请问下测试的时候接口模拟您这边是如何处理的?
Q:请问Docker里跑Java应用性能怎么调优,默认是共享资源池,对Java来说CPU切换很费性能,除了绑定CPU,但这样就没有弹性之说,麻烦说下?
Q:如何实现分布式事务?如何保证数据一致性?
Q:贵司的业务模式跟我们很像,感觉很受用。想问下,多客户、多版本共存的情况下,版本升级这块儿是怎么做的?
Q:日志如何存储和分析?用什么工具?系统异常如何监控?
关于日志收集,目前我们并没有很多公司搞的很高大尚,因为这块,还在改造中。我们就是多容器映射了本地磁盘目录,然后对这些目录日志文件进行合并,对那种error级别的日志,筛选出来。
基于Kubernetes的容器云平台实践培训
以上是关于小型公司DevOps落地实践案例的主要内容,如果未能解决你的问题,请参考以下文章