4

初心企服行研07:认识「基础设施即代码」(Infrastructure as Code) — 初心内参

 3 years ago
source link: https://www.36kr.com/p/1054182322081673
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

编者按:本文来自微信公众号 “初心资本ChuxinCapital”(ID:Chuxin-Capital) ,36氪经授权发布。

yUrqQn6.gif!mobile1.基础设施即代码带来了什么?

1.1 什么是基础设施即代码

基础设施即代码本质是一种基于软件开发实践的基础设施自动化方法。它强调系统及其配置的日常置备和变更具有一致性和可重复性。简言之,基础设施即代码就是用代码来管理和维护公司的云端基础设施,取代传统基于控制台或GUI的手动配置方式。

mAby22n.png!mobile

1.2 基础设施即代码诞生的背景

云计算自诞生以来,凭借其低成本和按需配置的高效资源利用率,迅速发展壮大,成为了如今整个商业世界重要的基础设施。云和自动化工具降低了基础设施变更的门槛,但即便有虚拟化、容器、SDN等工具的存在,服务器的配置、更新与维护工作依然不是一件容易的事情。因为这些工具并没有可以提高一致性与可靠性的现成方案来管理基础设施的配置变更,过去应用于传统IT设施的方案,虽然在需要花费几天甚至数周来配置服务器的年代有效,但在云时代这个存在大量、动态云服务器时代,即便是动态调整服务器以应对弹性需求,对于团队来说都是不小的挑战。

具体来看,云和虚拟化技术的存在,让团队可以轻而易举地创建一台服务器,而这最终导致的是服务器数量的飞速增长,超过了团队预期的管理规模。而一旦服务器数量增加,就会经常出现某个更新补丁没有及时应用到所有受影响的系统上,这种服务器之间版本和配置的差异——也就是所谓的「配置漂移」,将会导致在一些服务器上可以正常运行的软件与脚本无法在其他服务器上运行。此外,雪花服务器,服务器侵蚀等问题,也都是一直以来困扰团队的实际难题。

1.3 基础设施即代码想要实现什么

67jyMrR.png!mobile

(1)将云服务器等基础设施作为项目开发的支持,而非障碍或约束

(2)能让开发人员方便地对基础设施做经常性的变更,减少其对日常事务的重复;

(3)团队能够快速地从故障中恢复,对服务器等基础设施有较好地掌控;

(4)让开发团队能够持续改进,而不会冒影响项目进程的风险。

1.4 基础设施即代码的实践原则

(1)一致性。基础设施即代码要求在开发过程中,如果两个基础设施提供的是相似的服务,那么这些服务器应当从系统软件到配置都完全相同。有时即便是硬盘的分区问题,都可能导致自动化问题出现差错。能够构建和重新构建一致的基础设施,有助于解决配置漂移的问题。

(2)重复性。基础设施即代码要求在构建新服务器时,操作人员应当能够在毫不费力的情况下,可重复地配置基础设施中的任何元素,包括在服务器上安装什么软件、安装软件的什么版本以及选择什么主机名等决策都应该包括在置备基础设施元素的脚本和工具中。

(3)灵活性。在云时代以前,变更已有系统成本非常高,操作起来也很困难,因此团队通常需要预先全面设计好架构,考虑各种需求和情况,在服务器完成构建后尽量避免再作后续的调整。而云时代的动态基础设施让变更与调整变得更加简单,但这一切的前提都需要建立在软件和基础设施的合理设计上,即在满足需求时保证结构的尽可能简单,从而确保开发过程中的高效简洁。

1.5 基础设施即代码与DevOps

feMr2an.png!mobile 提到基础设施即代码,就不得不提到DevOps。DevOps是基于协作和交流文化的现代软件交付与基础架构管理方法,其目的旨在细化与稳定地改进软件交付生命周期(SDLC)的各个方面,同时确保产品新功能的持续性开发。而DevOps的实现,则是基于包括基础设施即代码在内的三个原则:

(1)基础设施即代码。这是后续持续集成与持续交付的基础,因为所有的配置过程与设置都是由自动化操作实现,并且能通过版本控制系统(VCS)追踪,确保不会出现所谓「明明在我的电脑上能运行」的情况出现,极大程度地加快并简化了开发过程中对基础架构的操作。

(2)持续集成。即开发人员是在项目主干上协作,并在代码通过测试后立即将其集成到项目当中,而不是像传统开发那样,在单独的Git分支中开发新功能,然后在发布时再将这部分代码合并。在持续集成原则下,每个测试成功并提交的代码实质上就变成了一个可以直接发布的新版本。

与一般的瀑布式开发相比,持续集成的方式大大缩短了项目上线的时间,而这同样是基于基础设施即代码,因为只有在后者的基础上,开发人员才能够快速设置与配置所需的开发环境,并以更快的速度生成和测试代码,并最终将其集成到项目主干中。 iQziAr.png!mobile (3)持续交付。持续交付是工作流实现的一种形式,在基于脚本和DevOps工具的配合下,软件开发生命周期的前一阶段输出结果会自动成为下一开发阶段的输入,即当开发人员提交新的一批代码时,其提交的过程会自动拓展构建出新的实例。在这个实例中,新的项目版本会开始通过单元测试和集成测试,如果测试成功,新的代码会移至开发用服务器,由QA工程师执行下一步的高级测试。

而这种持续交付能力同样建立在基础设施即代码和持续集成之上,因为这些工具与方法能让开发者配置所谓的CI/CD管道,即快速部署和配置代码从提交到发布所需的所有环境的自动化过程。

2.市场玩家

基础设施即代码的市场玩家可以分为三类,除了云厂商自身的产品和早在2015年被Red Hat收购的Ansible以外,包括进入时间较早,目前产品成熟,收入也较为稳定的「传统天王」,目前增长势头迅猛的「当红巨星」,以及近两年起步的「后起之秀」。

2.1 传统天王

Puppet: mYB7by.png!mobile Puppet成立于2005年,是基础设施即代码领域最早的一批玩家,其产品提供的解决方案涵盖了应用层,云服务,容器化服务,网络设备等多个方面,是目前该领域最成熟的工具之一。

得益于其先发优势,Puppet有着相当广大的用户群体,目前全球有超过40000家公司和机构在使用Puppet,其中包括Google,RedHat,Twitter,Salesforce等公司。根据官方资料,使用Puppet开源和商业产品的公司目前占到了财富100强中的75%以上。

2020年7月,Puppet获得了黑石4000万美元的债务融资,而在2018年6月,Puppet获得了思科领投的F轮4200万美元融资。Puppet当前的估值超过7亿美元,并且根据其CEO的采访,Puppet目前已经在做IPO的准备。

Chef: uyq2Uzj.png!mobile Chef成立于2008年,同为最早一批基础设施即代码领域的玩家,是Puppet一直以来的竞争对手。Chef与Puppet在结构上较为相似,同为客户端-服务器的结构,区别在于Chef提供了一个额外的Workstation组,用于配置测试。

Progress的客户包括Facebook,IBM,SAP等高科技大客户,也包括阿拉斯加航空,Capital One等非科技公司,2019年营收约为7000万美元。

Chef于2015年获得了4000万美元E轮融资。2019年4月,Chef宣布将其所有核心产品开源。而在今年9月,Progress公司宣布以2.2亿美元收购Chef,称其看重Chef强大的经常性收入模型,互补的技术实例以及忠实的客户群体。

2.2 当红巨星

Terraform:

JnMRBf.png!mobile Terraform是HashiCorp公司提供的基础设施即代码工具,也是目前业内最为流行的工具之一。Terraform能让团队安全高效地建立,变更和版本化管理基础设施工具,并且Terraform不仅可以管理的基础设施,比如计算实例,网络实例,存储实例等,还能管理更上层的服务,例如DNS域名和解析记录,SaaS应用的功能等。

Terraform虽然还是一款诞生于2014年的年轻的产品——至今版本号也还没更新至1.0,但其增长势头非常迅速。从其开发公司HashiCorp的融资与估值变化中来看,HashiCorp于2018年11月获得了包括Slack,GGV资本,红点创投在内的1亿美元D融资,估值高达19亿美元。仅在一年多之后,今年3月,HashiCorp就宣布完成1.75亿美元E轮融资,估值已经达到了50亿美元。

2.3 后起之秀

Pulumi:

2UvMzq6.png!mobile Pulumi成立于2017年,在2018年6月获得第一笔种子轮融资后,Pulumi一路发展迅猛,今年10月已完成3750万美元的B轮融资,领投方为New Enterprise Associates。

商业模式上,Pulumi同样采用的是社区版+商业版的模式,社区版开源、免费;在商业版的定价上,Pulumi即提供了适用于小型团队的按人数收费的模式,也支持大型企业的定制化部署。

Pulumi让用户能够以各种自己熟悉的语言来配置其基础设施,这些语言包括Python,Javascript,TypeScript,Go以及.NET。只要用户掌握对应的工具链和一组框架,就可以轻松地管理多个云平台的基础设施,目前Pulumi已经支持包括亚马逊AWS,微软Azure,谷歌云,Kubernetes,阿里云在内的50多个基础设施提供商。

目前Pulumi已经拥有10000多名用户及100多个付费用户,其中包括梅赛德斯·奔驰,Snowflake,Tableau等,官方在今年年初时公布其年增长率达到了10倍。

env0: QJriamb.png!mobile env0成立于2018年12月,是最为年轻的基础设施即代码初创公司之一。env0于今年4月完成了330万美元的种子轮融资,同时也在融资后发布了公司首款产品的beta版本。

相较于其他产品,env0更强调以基础设施即代码为核心,给用户提供一套完整的治理与成本控制解决方案。例如,env0提供自动关闭与服务器存在时间的选项,确保系统不会保持空闲,并精简预算;而且用户不需要靠估算或者手动标记,而是利用env0提供的自动化标记将云设施支出与项目联系起来。

值得一提的是,Env0非常注重产品的前端界面。很多基础设施即代码的公司产品通常还是面向技术人员为主,但Env0优先考虑了产品的UI/UX界面,让非技术用户,包括销售,客服等,也可以很好地使用自己的产品。

3.挑战与未来

3.1 存在的挑战

尽管基础设施即代码发展势头迅猛,但当中存在的一些挑战仍然在一定程度上阻碍了该技术的广泛采用:

(1)配置漂移风险。无论团队配置服务器的频率如何,长远来看服务器的配置都会发生变化,而每次需要修改基础架构时,如何确保配置过程与预先设立的工作流程相符则是团队需要解决的问题,如果有成员对相似的基础设施做出了不统一的修改,那么这就可能带来后续的潜在隐患。

(2)专业性要求。因为基础设施即代码和DevOps开发过程需要较高水平的技术与专业技术,因此一些团队在采用过程中往往会遇到技术性门槛,而对于一些小团队来说,找相关专业人士的成本往往过高,因此他们在这种情况下往往选择基础设施即代码的外包服务,而在这种情况下,团队又需要面对包括管理,整合性,数据安全在内的诸多问题。 6BRzUrA.png!mobile (3)安全性问题。基础设施即代码虽然带来了重要的变革,但是当中存在的安全风险也不容忽视。随着云原生的堆栈变得越来越复杂,公司所要面对的攻击面也会越来越大,检测和补救的难度也会越大。例如当团队使用基础设施即代码的方式错误配置了路由之后,仅仅一般的监控措施很难发现其中的违规路径,往往是需要前后关联的分析,才能发现其中的漏洞。

不过正因为基础设施即代码存在的潜在安全性问题,一些初创公司也从中发现了机会。比如初创公司Accurics就在今年10月完成了2000万美元的融资,其核心业务就是「代码修复」,即检测团队在配置中存在的风险点,然后自动生成代码,让团队成员可以自动将这些生成的代码部署到生产环境中。

3.2 未来:治理即代码

Terraform,Chef等基础设施即代码工具的存在让团队能够快速配置,部署云上的资源和系统,加速了公司整体基础设施向云上迁移的速度。但一旦将这些应用程序,基础设施和资源以自动化方式部署完毕之后,我们仍然需要靠人来维护后续业务的正常运转。在这种情况下,团队所考虑的问题,就是怎样让所有人都能保持业务的安全性并遵守内部政策标准,确保业务不要承担额外的风险。

如果基础设施即代码是将基础设施本身视作代码,那么「治理即代码 (Governance as code)」则是将应用与基础设施运行的方式视作代码。治理即代码想要实现的,是在真正理解团队所提供的服务以及交付此服务时所需要的应用和资源的情况下,权衡可靠性和预算等条件,优化团队的开发路径以实现最佳实践。

bMzMb2n.png!mobile 从效率与创新的角度来看,治理即代码借鉴了机器学习,自动化,策略管理等原理,以期消除云管理中的繁琐工作。借助治理即代码,团队可以确保每个人都能正确执行治理策略,同时也保证了开发人员的创新能力。

事实上,在我们上面介绍的市场玩家中,不管是后起之秀的Pulumi和env0,还是Terraform,Chef等公司,都已经在通过提供治理即代码功能来开展新一轮的竞争。例如,env0整合了成本管理与策略执行等功能,Pulumi允许开发人员通过自己习惯的代码编写一系列的合规性规则,Chef通过自身的Chef Compliance平台协助IT部门实现自动审核和补救,Terraform则结合自家的产品Sentinel实现更细颗粒度的策略控制与多层执行。

尽管Terraform,Puppet,Chef等产品目前在基础设施即代码方面处于领先地位,但Pulumi和env0这样的公司也在通过差异化方式抢占市场地位。基础设施即代码领域的竞争,还远未结束。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK