基于微服务的Real DevOps实践
《基于微服务的Real DevOps实践》要点: 锤子两年前登陆墨尔本时,完全是DevOps小白.面试REA的时候,被问到什么是Continuous Delivery(持续交付),锤子诚恳地表示“不知道”.面试官不依不饶,“不知道不要紧,你想想怎么样才能做到Continuous Delivery?” 锤子回顾了一下自己维护项目时的噩梦,斟酌着用词说:“这需要好多自动化的工具支持,怎么测试,怎么接入不同的网络,怎么部署不同的环境,还有数据库的data migration和回滚,个顶个的都是痛点.” 之前锤子所做过的系统都是Monolith(单体)架构,所以,每次需要重启生产环境时,真得一而再,再而三地确认.所以当REA的同事给我讲解我们的微服务架构,和怎么做Continuous Delivery时,我问:“那最坏的情况就是重启系统了?”这个同事说:“不,重启系统是正常情况.”由此,锤子开始慢慢了解REA强大的DevOps. 微服务和DevOps在介绍REA的DevOps之前,还是简单说说我们使用的微服务架构. 微服务有时被人诟病违背了DRY原则,但是Monolith架构下各种服务间的强耦合对于扩展部署都很痛苦,所以Don’t repeat yourself 诚然不错,微服务架构下,定义好边界之后(APIs),每个微服务独立存在,独立部署且可扩展,即使有一些简单的复制粘贴,其带来的灵活性也是Monolith架构不具备的. 在REA内部,为了保证某种程度的一致性,我们的微服务都需要遵循12 Factor:
不过不管微服务设计得如何精良,当一个“小而美”的团队(5-6名开发人员)需要同时开发维护生产环境中10个以上的微服务时,服务运行和管理上的额外复杂性使得全自动构建和部署变得不可或缺,更进一步,最好使用Continuous Delivery来解决这些问题,而DevOps为真正的Continuous Delivery提供了必要的支持. 那DevOps究竟是什么?DevOps就是更好的优化开发(DEV)、测试(QA)、运维(OPS)的流程,开发运维一体化,通过高度自动化工具与流程来使得软件构建、测试、发布更加快捷、频繁和可靠. 下面这张图(图片来源什么是 DevOps?)就是DevOps的日常. 既然DevOps不是新工具,不是新团队,不是新角色,也不是大量知识,而且DevOps的伟大实践来自于许多不同的领域,并且在IT组织内执行,为了提升IT的性能,那下面就让锤子讲讲REA的DevOps实践,首先自然从最贴近我们程序猿的全工具链开始. REA DevOps全工具链REA实际使用到的全工具链包括:
工具链看起来并不复杂,那么有了工具链,所有的问题就迎刃而解了吗?答案自然是否定的. 怎么样自动化所有流程?怎样为REA超过40个组管理AWS的账号?怎么为AWS里的测试环境和生产环境配置VPC?怎样把微服务部署到不同的环境?监控的策略怎么样实施,怎么样在不同的组之间协调?所有的几百个微服务,一旦某些微服务除了问题怎么办等等.这些都需要工具链切切实实的落地. REA DevOps工具链的实施过程中,分层协作不但厘清不同部门的责任,也让所有开发人员参与到Operation工作中,让DevOps融入每个IT人员的日常. REA DevOps的分层协作REA DevOps不同层面的问题由不同的组负责,如下图. 不同的Squads(REA引入了Spotify模式)使用DevOps工具链来开发和维护自己的微服务.详情会在下面一节进行介绍. (编辑:ASP站长网) |