1、背景
这段时间由于各人原因需要了解java系统部署方法。之前没有系统学习过,所以只能参考公司现有的系统部署架构。在这个学习的过程中有了个人的一些感悟+踩了一些坑。往下主要记录下对个人而言最实在的部分信息。
2、以前
以往的项目主要是以单体架构为主,很多时候估计用的是Jenkins + WebHook进行部署,或者直接Jenkins直接操作服务调度打包等。
3、现在
微服务的情况下,功能性服务会启动好几个节点,不再像以往那么单一。在部署的流程上,也没有太大的变化,还是追求自动化。但是对于节点而言,docker就是一个非常好的工具了,可以启动很多个互不干扰,关于docker是个啥,不再细讲。重点是,很多公司都会引入,这对于个人开发者而言,是很有借鉴意义的,因为开发一个东西,最好是把它定位为一个产品,整套完善的思考才是持续生存的关键,这也是个人能更好进步+生存的关键。
4、样例
自动化部署+公司需要将自己的数据本地化,通常会采取全量工具的引入。比如:
gitlab + gitrunner (CI/CD) + docker + docker-compose + Harbor + K8s + kuboard,这是一套很全面的配套体系。
5、实践
我的电脑是16G内存的,为了跑环境需要装虚拟机。一开始为了节省资源我装了两台4G的centos7,从gitlab开始搭建。
6、问题开始发生
gitlab自己的运行环境就需要4G+,光是这一个东西就要那么大内存,其他东西怎么可能安装的下。硬着头皮在第二台机子上安装:gitrunner + docker + docker-compose + Harbor,搭建完全的本地化部署策略。到这里,只是完成了自动打包部署,docker容器启动管理这些还没有接上,内存基本就爆炸了,gitlab卡死报500,Harbor卡死等等。
7、对于问题的思考
样例的的自动化链条确实很好,但是硬件部分的卡死情况却很严重,原因在于:需要很多的硬件来支撑大体量的系统运维环境。对于学习来说,全部学习确实是个好事,但是对于开发者来说,我们更多的时候应该根据现实情况来判断和选择最适合我们自己的运维路线。对于大一点的公司和部门,全量部署是有充足的硬件条件支持的,可以放心大胆的去做,而且效果会很好,因为这本身就是自己的业务要求,比如:全量可控、安全、保密等等。但是对于普通的开发人员,很多时候是没有那么多钱的,所以就要找尽可能省钱的,集成化高的方案。
8、最终方案
经过尝试,最终调整为:
gitee + webhook + docker + docker-compose + aliyun镜像仓库,在这条线里面,实际只需要负载docker + docker-compose这个核心部分,nginx、数据库这些另算不参与讨论。
自动化打包也使用ssh远程执行指令直接完成,配合webhook使用,可以完美实现。
--------------- 结语
其实,对于开发人员,不能只关注与开发,系统的架构、选型、运维部署同样十分重要,只有每个环节都尽可能与自身实际情况相匹配才能发挥最好的效果,千万不能贪大求全,求新。普通的开发人员,重点的工作是开发,而不是研发,两者有着很大很大的区别,重点在开发,就说明需要善用工具实现系统功能,一切以系统稳定运行为主,不能过分追求新技术、新方案以免造成各种各样的潜在风险。