数据科学(Python/R/Julia)数据分析、机器学习、深度学习
以代码驱动的科技世界中,越来越多的场景实现了自动化。在一定程度上,又可以将基础设施视为代码,而这一句话该如何理解?其中又将包含哪些设施?

作者 | Mitch Pronschinske
以下为译文:
你可能不太理解人们常说的“xxxx即代码”或“一切即代码”,其实你只需要知道我们讨论的是自动化:我们利用自动化来处理繁琐的工作,或者在某个任务过于庞大和复杂无法手动处理时,就可以考虑自动化。
“xxxx即代码”的说法源自“基础设施即代码”,以及开发运维运动——IT运营/系统管理员与开发人员共同努力,通过可重用的代码来实现IT环境变更的自动化,并对代码进行版本控制,就像多年前开发人员就采用这种方式来处理应用程序的代码变更一样。
开发人员实现软件交付流程的自动化已经有一段时间了,但是IT基础架构运营/系统管理员在过去的十年中才赶上来。系统管理员也会使用自动化,但通常是通过一系列手动触发的脚本进行的,其中有些脚本的组织性较差。而如今开发人员帮助运维推动了这一发展,目的是减少开发中的瓶颈,同时还可以自动化大多数软件生产过程,摆脱大量的手动管理。
那么,这些代码都是从哪里来的呢?为了了解这一点,首先让我们来看一看软件生产的每个阶段,看看哪些部分已经实现了“xxx即代码”的自动化。我希望通过本文来介绍软件开发生命周期中的哪些领域已经实现了良好的自动化和抽象化,并思考还有哪些领域有待新颖的自动化,以及了解“一切即代码”适用于何处。我希望你可以通过本文了解“xxx即代码”这个概念,并区分哪些工具很新颖且有实用价值,而哪些工具只是虚有其表。
计划/需求/设计
这个阶段位于编程工作开始之前。在这个阶段,我们需要根据业务和技术利益相关者建立需求,制定软件计划,并绘制架构和UI设计图以及线框设计图。
架构即代码
通过代码创建软件架构模型的做法已经有一段时间了。你可以利用Structurizr之类的工具以这种方式构建图表,并运用到版本控制中。但是几十年来,开发人员尝试了各种方法来构建应用程序模型,结果却各异。
在10-20年前,模型驱动开发的概念曾一度非常热门,但从未运用到主流开发中。这个概念的基本前提是,你可以利用UML或EMF之类的建模语言对软件组件进行建模,并根据编程要求生成整个初始应用程序。
虽然模型驱动的开发在很大程度上被主流开发圈子忽视,因为通常这种模式需要大量的预先设计,但是有些需要提前设计的领域仍然在使用,比如NASA。
请注意有关术语“架构即代码”的新兴用法:AWS以及其他开发用这个术语来描述高级基础架构即代码的模式。很显然,这与我在上面提到的应用程序级架构不同。AWS的架构即代码指的是基础设施的架构,例如容器协调器配置、负载均衡器、安全组和IAM角色等,这些架构都是通过可重复使用的模板定义的,而这些模板则面向特定的服务类型,例如负载均衡器后台的API服务、队列中的工作或预定的工作等。
这些模板可以通过预先制定的配置自动提供组件,例如容器协调器配置、负载平衡器、安全组和IAM角色等。Terraform模块、Kubernetes自定义资源定义以及主流云供应商提供的各种结构中都包含这种含义下的架构即代码。
项目即代码与脚手架项目
然而,由模型驱动开发生成代码的概念与编程本身一样有年头了。将Ruby、Python或Java转换为C代码的编译器都是生成器。如今甚至是新手前端程序员都明白代码生成的重要性,因为它可以为你节省编写样板代码的时间。
在运行Ruby on Rails脚手架处理时,你运行的代码都是在其他代码(模板或框架应用程序)的基础之上经过改编而成,因此你不必从零开始。热门的流行前端框架(比如Bootstrap和Foundation)是响应式UI模板框架,它们之所以风靡整个网络,是因为现成的CSS组件以及与移动设备兼容的动态组件可以减少建设网站的工作量。
这个类别中有很多自动化的空间,在过去几年中,“项目即代码”(面向应用程序的代码库与交付管道设置)填补了开发运维运动中未能覆盖的空白。有些工具(比如面向Java项目的Yeoman,以及面向Java项目的JHipster)提供了最基本的功能和灵活的框架,你可以分别使用Node.js和Spring Boot + Angular建立项目。微软的Azure等云供应商正在创建设置交付流水线的工具。还有一家公司realMethods已经构建了一个工具,它可以获取数据库模式或建模需求,而且你可以利用这些数据生成特定技术栈的框架代码,以及构建和配置文件、CI/CD的清单文件YAML、Docker文件和镜像、Kubernetes集群配置和Terraform的配置文件。
“项目即代码”适合于不断发展的崇尚生产的流派,他们主张建立极端版本或强调最低可行产品的概念:虽然你不希望部署代码库中仅有一个帮助文档的应用程序,但是也不需要构建功能完整的应用程序。你只需要自动化模式和管道的设置,就可以快速地部署简单的框架应用程序,比如Web应用生产中的一个端点,且该端点能返回200状态码的响应。
应用程序环境即代码
多年来,虚拟机、容器以及其他各种软件生产环境的抽象都是开发人员的福音,因为这些技术不断发展,更易于管理。当你可以自动启动模板环境,然后舒服地开始写代码时,怎么可能还有人愿意尝试和调试手动设置操作环境可能引发的100种问题呢?
Vagrant以及后来的Docker(和一般容器)等技术简化了开发环境的设置。容器和容器编排器(比如Kubernetes或Nomad)都成为了流行的工具,它们利用敏捷、隔离、正确配置的组件部署环境。
你可以将这些工具视为以代码的形式提供系统依赖性。Dockerfile是这种依赖关系(比如编程语言的版本或数据库的版本)中的代码和模板,而Docker是运行和满足这些依赖关系的工具。
关注“AIU人工智能”公众号,回复“白皮书”获取数据分析、大数据、人工智能行业白皮书及更多精选学习资料!


雷达卡





京公网安备 11010802022788号







