DevOps 的概念出现在 2009 年,旨在消除开发与运维之间存在着信息“鸿沟”,缩短从设计开发到生产交付的全过程周期。虽然这一看法深得人心,但是八年过去了,DevOps 的全面化推进依然步履蹒跚。
普元打造了一套企业级的 DevOps 数字化平台,该平台在原有的传统技术积累基础上,添加了 Docker 容器实现微服务。InfoQ 围绕 DevOps 和容器技术两个热点问题对普元的主任架构师顾伟进行了采访。此外,顾伟将会在 CNUTCon 全球容器技术大会上分享《基于微服务架构的容器云之实践》,敬请与会观众期待。
InfoQ:请介绍下您的技术背景和目前负责的项目?能否回顾总结并阶段性地介绍下您的技术成长经历?
顾伟: 大家好,我是顾伟,专注于 DevOps 和云计算领域,擅长 CI/CD、前端、OSGI、容器等技术,对各类自动化、智能化有着浓厚的兴趣。目前负责普元 The Platform 云平台产品的设计工作,兼顾 DevOps、CaaS、IaaS 等外部实施工作。
到目前,我的职业生涯中经历的领域和技术栈比较杂,大体分为以下四个阶段:
- 06 年 -07 年:以项目实施为主,参与了华为 BME 项目的多期建设,熟练掌握了包括 Java、Web、数据库等基本技能。
- 07 年 -10 年:主要参与了两款产品研发,一款是基于 Ext 的所见即所得的 UI 产品,一款是基于 Eclipse 插件开发的 IDE 平台,熟练掌握了主流 UI 框架和 Eclipse 的大部分源码。回过头来看,学习优秀框架设计的经历,为今后的架构之路奠定了较好的基础。
- 10 年 -12 年:以大型企业级平台实施为主,参与了工商银行、中信银行的统一平台项目,也主导过中航信 RI 等创新项目。在加固已有知识的同时,这段经历使我掌握了诸多企业级中间件(比如 IBM MQ、ILOG、BMC CMDB 等)的使用和扩展,同时也开始接触了如云计算、大数据领域的新技术。
- 13 年 -16 年:从与阿里云 ACE 合作云产品开始,先后历经了普元 IaaS(OpenStack),CaaS(Kubernetes + Docker),DevOps 领域等产品设计及研发工作。这段时间,拥抱开源并实践于企业级产品中,算是正式走进了企业云计算领域。
InfoQ:您曾经提到过您很关注 DevOps 和自动化运维。能否简要介绍下您对这两者的理解和未来趋势的看法?DevOps 给运维部分带来了哪些变化?
顾伟:在我的理解里,DevOps 其实是包含了自动化运维的。只是现在这两种概念都很常见,所以我分开提及的。
大家肯定都能感觉到,DevOps、微服务、容器等概念已经越来越热了。这让我想到了 3 年前 OpenStack 的状态,各大社区、创业公司、传统企业,纷纷投入到 OpenStack 怀抱;而现在,虽然是有一些公司存活下来了,但总的来看谁也没赚到多少钱,也没有哪家公司如预想般把 VMware 给替代了。过热的后果是反而把市场秩序给弄得一团糟,产品低价竞争,人员漫天要价。
我觉得现在的 DevOps 也到了这个岔路口,有很多公司在热炒 DevOps 的概念,并纷纷宣布转型成功;而从实际市场、尤其企业市场的反馈来看,客户对此的评价几乎众口一词:“DevOps 很好,但我们很难做到”。究其原因,最缺乏的是 DevOps 方案提供公司真正到深入到企业里面,沉下心来,结合实际情况进行实施实践,从而帮助客户切实地做到横向协作打通、纵向工具链打通。所以我觉得,市场到今年底前还是会充斥着很多概念炒作;但从明年开始,大家会逐步看到,这个领域中真正的脱颖而出的,将会是那些已经将 DevOps 实际落地的企业和服务商。
DevOps 给运维带来的变化,主要体现在运维工具的打通,但是单单从这个角度看影响并不很明显。如果能够从企业、部门、团队多维角度结合来看,才能发现 DevOps 独特的地方。DevOps 本质上是一个持续优化的过程,一般需要从组织、技术、流程三个维度考虑,目标是加速 IT 的精益运营。 DevOps 推崇的是让开发、测试、运维友好协作,倡导大家都能为各自的上下游提供便利,形成演进回环,有效的支撑业务创新。
InfoQ:你提到“DevOps 很好,但也很难落地”。你认为难点在哪里?如果说要突破这些挑战,你认为团队负责人应该重点从哪些方面入手?
顾伟: 我觉得 DevOps 最大的难点并不是所谓的文化或组织(因为这个不是说改变或打破就能改变或打破的),而是各家公司的流程和工具都是有差异的,每家都会有自己的特色与特殊部分,很难有所谓的通用产品能解决所有问题。举个代码库工具使用方式的例子,之前在我们微信群里还单独拿出来讨论的,有的企业是主干开发、分支 release;有的企业是分支开发、分支 release,接着再往下细,都是分支开发并 release 的企业,同一个产品版本,有的是开发环境、测试环境、生产环境对应的分支物理上是不同的,也有开发测试环境相同、生产环境不同的,还有从开发到最终上线就一个分支的。而且每家做法都有很充分的理由……
想突破这种问题,对于一个团队负责人来说,要能在一定的条件下,有效组织团队、逐步优化流程。这里说的“一定的条件”涉及很多方面,比如不要试图按理想情况去打通部门,这是永远不可能的,再比如想让团队每个人都有一样的高度、理解力、责任感也是很难实现的。所以对于一个团队负责人来说,想实施好 DevOps,需要理清现状,统一概念模型,制定阶段性目标,激发团队热情,有效规避风险;而不是一上来就是要用什么技术,要有多好的理念之类。
InfoQ:你如何看不可变基础设施?
顾伟: 对于问题,首先想吐吐槽:初次听到不可变的基础设施时,我当时不知道为什么,还想起了另外一个概念:基础设施即代码,虽然这两者没有特别的强关联,但第一感觉就是,现在市场上很喜欢拿基础设施来说事。我以前做过 IaaS、PaaS,也参与过运维工作,基础设施在我的理解里是一个底层、重、固化的东西。随着一切皆服务、一切皆代码、无状态这些概念起来,让我觉得市场上的任何词,都可以变成“怎么说都有理”的理念。
回归正题,我认为要像不可变的基础设施的目标前行,有两点比较重要:
从使用者的角度来看,基础设施最好是无差异无感知的,所谓的无差异或无感知是说无论下面是什么样的异构硬件、不同系统等,对上层业务的服务提供方式都是统一的;
从提供者的角度来看,基础设施从建立之初就不要再变更,只有新建与替换。粒度很重要,这也是很多人甚至会提到消除 SSH 的想法的原因。
对于不可变基础设施的未来,我认为是个长期的目标。随着容器、DevOps 能力的逐步落地,给了这个目标一个可实现路径,但真的要做到完全不变,我觉得是很难的,因为生态还没有起来,很多层的能力或接口还没有统一和规范,差异化永远是不可变的最大拦路虎。
InfoQ:这两天又有人提出了 OpsDev 的概念,你怎么看?
顾伟: 这个我之前也看到了,看到第一句解释后我就没再看下去,因为从来没有人说过 DevOps 到底是 Dev2Ops 还是 Ops2Dev,为什么?因为无论是 Dev 还是 Ops,都应该将对方视为可标准的对象,同时为对方提供足够可规范的便捷(主动的尝试着去适应对方),这本来就不是一个单向的过程。
所以我认为无论是叫 DevOps,还是叫 OpsDev,大家的目标都是一样的,切勿认为词语上的谁先谁后,就意味着谁主动谁被动。在不失规范与流程的前提下,打通上下游、双向协作才是 DevOps 的真谛。
InfoQ:您即将在 CNUTCon 全球容器技术大会上和我们分享《基于微服务架构的容器云之实践》,可否先大概介绍下你们的容器云?
顾伟: 其实普元的主要目标是落地 DevOps,在技术实现上,只是底层默认使用了 CaaS 作为支撑(当然平台也兼容 IaaS)。平台在原有的基础能力之上,实现了容器 + 微服务的部分,并不断版本迭代演变至今。第一个版本花费约半年多时间。这次,为了契合容器大会主题,我选择了底层 CaaS 部分的实践进行分享。
目前我们的容器云既可以运行于私有云(OpenStack、VMware),也可以支持在公有云(阿里云)上运行。平台以微服务架构为支撑,使用了 Kubernetes + Docker 的组合,以 CoreOS、Flannel、SkyDNS 等作为支撑选件,集成了包括 MySQL、Redis、GIT、Nexus、Jenkins、Docker Registry 等基础服务,形成了一款用于支撑企业 DevOps 的容器云平台。平台最终架构图(含 DevOps 能力)如下:
InfoQ:这套容器 + 微服务实现的 DevOps 方案,您认为哪类行业的企业可以借鉴参考?传统企业可以在哪种情况下,开展怎样的尝试?又该如何拆分传统应用?
顾伟: 这套方案相对来说,比较适合有一定规模的企业或互联网公司。因为如果团队较小、业务较简单(比如只有极少数量的 App),那首要的问题还不在精益化上,通过人来做管理配置,也不会特别复杂。
对于传统企业来说,我的建议是尝试需要首先从这两方面开始:
- 持续发布能力:这是打通开发测试与运维的最佳着手点,也是业界目前方案成熟度较好的模块。
- 自服务能力:自助和自动,是打通上下游、提升运营效率的有效手段,自服务能力强调的正是这一点。 至于提及微服务化是如何进行单块应用拆分,我觉得是这之后的事情:没有配套的运营支撑平台,何谈微服务架构。
InfoQ:您提到过目前的这个方案在 13 年的时候普元就有提出过。当年是在什么样的情况下想到的呢?为什么当时没有落地这样的想法?
顾伟: 翻翻历史,这个点子是 13 年的时候,我们董事长刘亚东先生提出的,当时他指出:“数字化未来会将企业每个人、每台机器都变成一个节点,企业信息平台需要具备打通供应链、资金链、物流链、销售链、服务链等能力,这就需要企业在未来竞争中找到自己的位置,就必须用数字化企业云平台”。
至于为什么当时没有落实下来?我个人觉得,毕竟当时董事长提出的无论数字化、还是连接一切等概念还比较前沿,我们团队的积累和认知不是很够等种种原因吧,没有在当时真正执行起来。现在回过头来看,算是在给当时的愿景圆梦吧!
InfoQ:为什么微服务的架构要采用容器做默认承载?如果不采用容器技术,您认为微服务化会面临怎样的难题?除了微服务化架构的实现,普元还有在其他情况下使用过容器技术吗?
顾伟: 首先我的观点是,微服务架构和容器没有任何关系,大家也可去翻一翻 Martin Flower 的文章。那为什么现在大家看到的文章中,提到微服务就会提容器,或者提 DevOps,本质上是因为以下两点:
- 其实很多公司的现状是仅仅实现了容器管理,但是又想接下来向微服务化靠拢,于是就出现了强关联的概念。
- 事实上,现在也确实存在很多企业把两者结合在一起使用。无意中让大家误会了两者的关系。
但是这只是说明了两者相伴相生的现象,并不意味着强因果关系。
容器的优势在于:轻量化、原子化、可移植性、快速集成等,而这与微服务所倡导的松耦合、高内聚有着异曲同工之处。 在实际使用中,往往容器 + 微服务确实可发挥 1+1>2 的功效。
容器可以作为默认承载,但要支撑企业级系统,不能只有默认承载。因为容器的相关技术完备性现在还不足以完全支撑业务,像容器的存储方案、有状态服务方案这些生态技术还并不太成熟。
如果不采用容器技术,传统 VM 技术、或者说 IaaS,甚至纯物理机架构,照样可以支撑微服务架构,只是在管理上稍微复杂些。在普元,我们是通过统一的环境管理(内部系统叫 SEM),来屏蔽底层基础设施差异的,大家可参考我们异构环境下的统一概念模型:
目前容器技术的使用主要在这款数字化云平台里,其他地方用的较少,只在一些客户试点项目中有过尝试。
InfoQ:相比较历史系统的 DevOps,基于容器技术的 DevOps 具有哪些特点和优势,适用于哪些情况?您是否认同“容器改变 DevOps”这种观点?
顾伟: DevOps 有时会让人觉得很遥远,也有很多企业会觉得先做到自动化运维就足够了,大家对于这个概念其实褒贬不一。技术方案上,也是层出不穷,近期看到一些微信群、公开课、沙龙在讨论 DevOps 实现:有用容器的;有基于 Puppet、SaltStack 延伸的;还有一些生于 Cloud Foundry、OpenShift 这些传统 PaaS 之上。换而言之,DevOps 其实并不局限于任何具体技术,只是容器技术在实现 DevOps 时有一定的优势:
- 灵活:DevOps 的一项重要工作是“编排”工具链,要求能够对“原子活动”进行快速串接,而容器本身对于原子化及编排能力就有很好的支撑。
- 集约:DevOps 的一大价值是资源集约管理,容器相对于传统 VM,在资源利用上就有很大优势,其资源长短生命周期皆宜的特征,对于像开发测试云这样的需求尤其合适。
- 标准:以镜像为粒度的管理模式,相比于零散脚本、多变介质、各种小工具等规范度不高的传统开发运维,给了实施者一定的标准。伴随着配置、服务状态等生态技术的补充,容器实施 DevOps 的方案会变得更完善。
您提到的“容器改变 DevOps”说法,我认为偏绝对;我更倾向于“容器让 DevOps 更容易”。
InfoQ:对于容器的运维,您认为有哪些需要特别注意的问题呢?能否详细谈谈的双模架构(模态 1:传统技术,模态 2:容器技术)的自动化运维?
顾伟: 我认为对于容器本身的运维,其实和传统的运维没有太大差别。要说容器运维有什么特别注意点,我觉的下面大家可关注以下 3 点:
- 选择一个合适的框架,不要什么都自己研发:目前业界很好的框架并不多,K8S、Mesos、Docker 本身的一些,选择您觉得和你们理念最一致的,作为你的基础框架。
- 避免惯性思维:很多做过传统运维的同学,在遇到容器时,第一想法还是用既有知识和习惯管理,所以大家会发现,现在很多企业把容器当 VM 用,或者宿主系统一定要 XXX,这个往往束缚了容器运维的优势。
- 要向上抽象:毕竟容器还不能完全替换企业既有,那资源、中间件、应用的运维和容器的运维是不是可以统一,这就要求在运维角度抽象一层模型,便于后续的一体化运营平台的建设。
对于双模架构的自动化运维,核心问题就在于能否抽象出一套兼容的模型,屏蔽各种异构差异化,可从以下四个方面考虑:
- 环境:主机、存储、网络、容器的差异化。
- 配置:应用配置与环境配置,动态配置与静态配置。
- 仓库:三方仓库、部署包仓库、镜像仓库等。
- 流程:编译流程、部署流程、故障流程等。
InfoQ:您说这个点子成功在于:“市场上的客户反馈和内部的能力驱动”。能否将这两个方面进行详细的展开论述?
顾伟: 不仅仅是这个点子,我认为任何点子的成功都离不开这两方面:
客户反馈:反馈的核心价值在于驱动产品向正确的方向演进,比如小米,从设计之初就笼络了一群发烧友,请他们来提建议,帮助做设计。换个时髦的词叫 MVP,意思和快速推出试错试对,这与管理学中的 PDCA 质量环有着想通的理念。我们要做大设计小版本,进而通过 Inside-out & Out-inside 的有效配合,基于反馈快速迭代,才能推出符合市场需求的产品。
能力驱动:这个也可以讲成康威定律,我更倾向于称之为康威定律 +,团队一定程度上决定了业务架构,拥有一个全栈的团队,对于一些创新类点子有着非常重要的作用。在一个点子形成之初,原型、场景、计划、设计、迭代模式、技术预研等,环环相扣,任何决定都对后期的发展有着的重要影响,所以我一直认为:有什么样的基因,做什么类型的事情。有什么能力的团队,做什么规模的事情。
InfoQ:最后一个问题:技术变革日新月异的今天,对于立志在技术领域中长久发展的年轻人,您有什么建议和忠告?
顾伟:忠告不敢当,结合我带新人的经验谈谈一些想法吧。
首先,技术是学不完的,以前是,现在更是。对于刚开始工作的同学,在精不在广。任何有一定规模的技术框架,都有很多值得深入学习的地方,别人为何这么设计,相比同类产品有什么优势。多思考,多总结。不要一味的只管调试代码,fix bug……
学技术之外,也要学做人。技术再牛,如果无法融入团队,那还是没用。此外,新同学必须要有自主性。现在很多新同学有个通病,遇到问题就问导师。不是说不能问,关键在于问之前你有没有真正的花精力尝试过,或者试着问题缩小到一定范围,不能说一遇到个坎就找人帮忙,会让团队的人觉得事情交给你很不放心。
最后就是执行力很重要。很多同学都会定目标定计划,但却很少有人制定对应的 check 计划,好像这都是部门经理的事情。说白了就是缺乏自我管理能力。现在的人确实受打扰太多,但这不是执行不力的借口。建议大家制定计划时,要短期不要长期,要实践而不是停留在概念。
受访嘉宾:
顾伟,毕业于东南大学,现任普元公司主任架构师;先后参与和带领了华为 BME、中信银行 CBJUP、工商银行 CTP、中航信 RI、阿里云 ACE、普元云计算平台、普元 The Platform 等大型项目的交付;长期致力于 IT 技术研究、产品设计、架构咨询等工作,擅长 Web、OSGI、CI/CD、服务治理、云计算等领域技术;对 DevOps、自动化运维、微服务架构有着浓厚的兴趣。
如果你对 DevOps 相关话题感兴趣,欢迎扫码加入由顾伟主持的“普元云计算研发开放群”,讨论更多 API 网关、微服务、DevOps、容器相关内容,加群暗号“DevOps”。
感谢郭蕾对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
评论