DevOps is dirty work - Dream in One-Click
真是一晃就到年底,年初许的梦想实现了吗?这么残忍的问题还是不要知道答案了吧:)
这恍若隔世的大半年,不仅没有承接着上篇继续聊Continuous Delivery (CD),反而疑似荒废。然而,梦想还是在的,即使工作再繁忙,至少老板也会这样时不时地提醒我。还记得去年的年末开始学着用Stackstorm做Orchestration,当时满心觉得One-Click已经不再遥远。而时至今日,事实也差一点证明了这一点。还差的那一点便在于过于乐观地估计了对改造已有项目部署方式的难度。做过Code Refectory的同行们一定有过这种心情,梦想明明就在眼前,却总是隔着一个Regression的距离。即使超过3个月的代码也偶尔会赋予挫败感,何况我们面对的是虚年6岁的壮年项目。虽然还是遗憾地遥望着One-Click,但是大概也就差着一片雾霾的距离,而一路到此,不虚此行。
安迪·格鲁夫在《只有偏执狂才能生存》中说过,“为了成功地穿越死亡之谷,第一件事就是设想出公司到达彼岸后的形象。”所以梦想要有,还要具体,不然谁知道实现了没有。One-Click的形象是什么?一千个人眼里有一千个哈姆雷特。我就聊聊我眼里的One-Click为何物。
在我的梦想中,One-Click的终极形象包括两个方面,
1. DevOps工程师可通过一条指令完成从建虚拟机到部署服务并使其在产线运行,这里自然也包括Scale up和Scale down。
2. 当工程师将代码逻辑push到CI系统之后,在没有任何人工特殊干预的情况下,代码逻辑自动部署到产线并运行服务。
关于第一个形象,如今IAAS的出现已经帮忙解决了关于自动建立定制化的虚拟机(VM)这道难题,从而令一个SAAS/PAAS运营者头疼的问题已经从怎么建虚拟机进化为该选谁的IAAS服务好。岔开一句,目前AWS的风头正劲,业界对它的肯定已经几乎到了无以复加的地步。于是在这个形象里,最难的其实是如何将需要部署的服务以及所需要涉及的整个拓扑结构(topology)根据应有的配置,该新建的新建,该连接的连接。头疼的事情当然有很多,比如:
a. 一边建VM,一边建拓扑,需要把控好逻辑顺序。
b. SSL所需要的证书随着VM的新建也需要根据拓扑新建和更新,并且需要实现自动化签名。
c. 纷繁复杂的配置信息需要精确地推送到某一个VM上,这要求配置管理做到层次分明和自适应调整。(自适应调整是指配置信息应随着环境变量的变化而自我更新)
d. 应用本身应是无状态的,状态信息的存取可依赖外部服务,比如由PAAS层提供的cache服务。
以上当然不是全部麻烦,不然怎么称得上梦想。对于很多问题,业界相应的solution每天都在更新,时不时便会听说某个问题已有了解。从个人经验以及道听途说的角度出发,有效的solution之一由 Jenkins (CI-CD管理) + Stackstorm (Orchestration) + OpenStack (IAAS) + Puppet with Hiera(部署应用及静态配置) + Consul(动态配置管理服务) 组合而成。当然这还不是整张蓝图的全部,毕竟这里只考虑了可行性,还没来得及考虑HA(High Availability)和性能。
关于第二个形象,参阅草图如下:

其实从CI的下游开始,第二个形象便与第一个形象多有类似了,不同点在于第二个形象更倾向于在正在运行的环境上操作。在What's the deal的结尾我说,“DevOps is dirty work where you have to be more than a Dev”。这第二个形象便是对“more than a Dev”的要求所在。如果没有对你所要部署的应用服务足够了解,CD将会是最让你手足无措的部分。比如,如果没有弄明白某个应用对另一个应用或服务的依赖是配置型的(即配或不配以及多种选配暂不影响HA)还是强制型的(即不配置便会挂),甚至有时这样的依赖关系只在应用的代码级别定义,那么一旦出现服务停摆,在老板眼皮底下于无数VM的云中查找root cause的心灵之伤可不是几顿加班餐就能挽回的。从solution的角度来说,在没有scale up或scale down的情况下,除了IAAS部分也许不是必要的,上面提到的组合中其他部分还是很管用的,即 Jenkins (CI-CD管理) + Stackstorm (Orchestration) + Puppet with Hiera(部署应用及静态配置) + Consul(动态配置管理服务)。但由于第二个形象的不同点在于已有运行环境,那么HA和部署速度应该被纳入必须考虑的因素。
HA一直是做云服务运维最核心的部分。如果某天早晨起床发现你的微信朋友圈刷不出来,对于广大互联网依赖征重症患者来说大概一整天都不会好过,更别提那些把大笔资金堆在上面的商家了。当HA出了问题,消费市场尚且生不如死,那些企业市场的用户也许会有动武的可能,压力大了吧:)梦想嘛,就是被逼出来的。合理的HA策略在One-Click的场景中应该经过反复推敲,从高稳定性向高效率逐步推进。A-B和Rolling Upgrade是目前相对比较稳妥且不失效率的方式。A-B也是灰度发布的一种方式,即让部分用户继续使用A版本,同时让另外部分用户先使用B版本,然后适时决定是否所有应用都升级到B版本还是需要回滚到A版本。如此以来,加上合理的回滚策略,监控策略以及数据分析策略便可在One-Click过程中保证HA。Rolling Upgrade是指通过添加新的节点安装新版本,当达到适当规模的时候将老版本的节点去除,期间允许短期的新老版本共存。A-B和Rolling Upagrade两者是理念和方法的结合。Rolling Upgrade可通过新老节点的控制得以实现A-B方式,但这就需要IAAS的支持。当然这不是唯一的方法,对于一些对Capacity要求不明显的应用来说,在已有节点上做分批处理也能达到A-B的目的。不难发现,One-Click的第二种形象中最麻烦的便是HA,也是这个美好梦想中最有趣的部分。
关于One-Click的部署速度,每个人都会有不同的观点吧。对于有些SAAS服务来说,快速上线和bug fix是铁律,而对于一些PAAS服务则稳定大于速度。但不管如何,从理论上来说,One-Click在效率上必须比N-Click来的高。各种保障策略的联动机制将需要发挥作用,比如如何verify应用服务已正常运行,如何在一些条件下触发下一步流水线,如何对出错快速恢复并从断点继续任务等等。如今业界的监控工具和智能分析工具已是五花八门了,只要API好用,都可以在One-Click的场景中贡献力量。当然,时下炒得火热的AI概念自然适用于One-Click,这会使得梦想更丰满更华丽。
梦想描述至此,是不是勾起实现的冲动了:)大家都喜欢一杯咖啡一个Pad就把工作搞定,我一直认为懒人的梦想是最有价值的。然而如今的云端,世道沧桑,列强割据,风云变幻,每一分每一秒都有旧梦想破灭和新梦想实现。DevOps世界随着云端的格局更迭也是日新月异,One-Click的作用或许也是解放一部分重复劳动的时间去呼吸新世界的新鲜空气。眼前的那一段雾霾的距离应很快会缩短,我已经开始憧憬下一个梦想了,或许真的是脑电波替代Click,叫做One-Mind?好了,换一杯咖啡,Carry on!
DevOps is dirty work - Dream in One-Click的更多相关文章
- DevOps is dirty work - What's the deal
什么是DevOps?终于又回到这个最初的问题. 第一次看到这个词的时候,还身陷于各种敏捷概念轰炸中.用“身陷”这个词其实并不准确,因为那个年代的我也是那些热情洋溢地无处不宣传敏捷的热血文艺青年中的一员 ...
- DevOps is dirty work - CI drives you crazy
一直很想谈谈Continuous Integration(CI),持续集成. 就在不久前一次朋友聚会上,一个刚刚跳槽到一家创业公司的朋友跟我抱怨说他们没有CI,没有code review,要做点事太累 ...
- Version Controlling with Git in Visual Studio Code and Azure DevOps
Overview Azure DevOps supports two types of version control, Git and Team Foundation Version Control ...
- 当DevOps撞上物联网
DevOps 领域在近年来变得流行而普遍.它强调不同的角色之间共同协作,以及如何工作得更加紧密,就像这个词语的词根暗示的那样--开发和运维.但是DevOps和物联网有什么关系? 本文选自<Dev ...
- Azure DevOps to Azure AppServices
Azure DevOps is a complete solution for software development, from planning to building to deploymen ...
- 使用ML.NET + Azure DevOps + Azure Container Instances打造机器学习生产化
介绍 Azure DevOps,以前称为Visual Studio Team Services(VSTS),可帮助个人和组织更快地规划,协作和发布产品.其中一项值得注意的服务是Azure Pipeli ...
- DevOps,不是一个传说!
转自: http://www.infoq.com/cn/articles/devops-not-legend DevOps最近成了热词,望文生义,你也能猜个八九不离十,它就是在说"研发团队& ...
- 2019 DevOps 技术指南
原文链接:https://hackernoon.com/the-2018-devops-roadmap-31588d8670cb 原文作者:javinpaul 翻译君:CODING 戴维奥普斯 写在前 ...
- 《DevOps实践:驭DevOps之力强化技术栈并优化IT运行》
DevOps实践:驭DevOps之力强化技术栈并优化IT运行 主旨 这本书并非坐而论道,而是介绍了DevOps全流程中的许多实践,以及相应工具的运用.虽然随着时代的推移,工具将来可能会过时,但是这些实 ...
随机推荐
- 【Alpha版本】冲刺-Day10
队伍:606notconnected 会议时间:11月18日 会议总结 张斯巍(433) 今天安排:完成剩余界面的设计,小修小补 完成度:100% 遇到的问题:无 感想:因为自己是负责界面美工部分的, ...
- Asp.Net Core--基于角色的授权
翻译如下: 当创建身份时,它可以属于一个或多个角色,例如Tracy可以属于管理员和用户角色,而Scott可以仅属于用户角色. 如何创建和管理这些角色取决于授权过程的后备存储. 角色通过ClaimsPr ...
- netty 解析http请求 post
http://blog.csdn.net/neosmith/article/details/50383548
- GET和POST可传递的值到底有多大?
前日,看到这个问题了. 没有深入了解.我的常识里面get最大传递的值为256b,post 是2M.这是很久以前不知在哪看到的.于是又百度一下.看到两篇文章装过来看看: 浅谈 HTTP中Get与Post ...
- zTree学习
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Android Killer工具用法
一.工程信息 工程信息主要是解析的AndroidManifest文件 二.工程管理器 三.配置插入代码 在代码中点右键就可以一键插入代码了 四.字符串搜索功能 支持正则, 比jeb搜索功能强大 来自为 ...
- CPrimerPlus第十一章中的“选择排序算法”学习
C Primer Plus第十一章字符串排序程序11.25中,涉及到“选择排序算法”,这也是找工作笔试或面试可能会遇到的题目,下面谈谈自己的理解. 举个例子:对数组num[5]={3,5,2,1,4} ...
- 集合List内容
集合List内容 这次我们学习的主要内容为:集合框架 List 一 集合框架介绍 List集合与数组的区别: 不同点:1> 数组的长度在使用前必须确定,一旦确定不能改变.而List集合长度 ...
- tp5 中 model 的更新方法
// 过滤非数据表字段更新 public function update(Request $request){ $user = model('User'); $result = $user -> ...
- appCan uexLocation 定位功能
js的引用: <script src="../js/zy_control.js"></script> <script src="../js/ ...