近年来,构建和发布软件的方式发生了重大转变。这主要围绕着微服务,将代码分解成小组件,使用基础设施即代码,并使用 Git 作为将所有代码粘合在一起的唯一真相来源。
在本文中,我将讨论现代软件开发的转变和不同步骤,以展示无服务器领域的可能解决方案。此外,我列出了为这个时代而设计的有用的工具。
什么是无服务器?
在深入无服务器开发和工具的奇妙世界之前,我先介绍一下我所说的无服务器。AWS 网站谈到了四个主要好处:
无服务器管理
灵活扩展
按价值付费
自动高可用
对我来说,无服务器是指你不需要自己管理和扩展任何基础设施。
在我的公司Datree.io,我们在AWS Fargate上运行 95%的工作负载,在AWS Lambda上运行 5%的工作负载。我们是一家无服务器公司;我们的 AWS 帐户中没有任何 Amazon EC2 实例。有关更多信息,请参见以下内容:
CON320:使用AWS Fargate实现容器化工作负载的卓越运营 (re:Invent 2018 大会)
什么是 GitOps?
Git 是一个免费的开源分布式版本控制系统,它可以快速高效地处理从小型项目到大型项目的所有项目。
CI/CD 顾问Luis Faceira认为,GitOps 是一种工作方式。你可以将其视为一种方法,其中所有内容都始于 Git 也终于 Git。以下是一些关键概念:
Git 作为系统真相的单一来源;
Git 作为我们操作(创建、修改和销毁)所有环境的单一位置;
所有变更都是可观察、可验证的。
在云出现之前你是如何构建软件的
在前云时代的瀑布式开发中,你曾经有单独的团队分别负责开发、测试、安全、运营、监控等等。
现在,在大多数组织中,都有一个向开发人员完全自治和开发人员拥有整个生产路径的过渡。开发人员是国王或王后。
这些团队(Ops、安全、IT 等)过去是验证和控制每个开发人员变更的看门人。现在,它们更像是一个卫星单位,推动政策落实,制定最佳实践和标准。它们不再是生产瓶颈,它们提供了组织范围的平台和赋能解决方案。
一切都是代码
随着向开发人员完全拥有整个管道的过渡,开发人员可以自动化所有内容。我们比以往任何时候都有更多的代码,过去是手工操作的过程现在用代码来描述。
这是一个很好的转变,以下是其中的一些好处:
自动化:通过将所有东西存储为代码,所有东西都可以在瞬间自动化、重用和重建。
不可变:如果出现任何错误,再次从存储的配置创建它。
版本控制:可以应用和恢复变更,并跟踪到做出变更的单个用户。
GitOps:Git 已成为系统真相的单一来源
第二个主要的转变是,现在所有的东西都在一个地方!Git 是存储所有代码和启动所有操作的地方。无论是测试、构建、打包还是发布,现在一切都是通过拉请求触发的。
一切事物的代码化使这一点被放大。
无服务器时代的工具助手
市场上有很多有用的工具,下面是一些为无服务器而设计的工具。
代码
始终将代码存储在源码控制系统中。近年来,越来越多的功能被编码,如 BI、Ops、安全和 AI。对于新晋开发人员来说,某些功能是否应该使用源代码控制有时候并不是很明显。
构建和测试
我见过的最常见的错误是在 GUI 中手动配置构建作业。这对于小型 POC 来说可能还不错,但它是不可扩展的。你应该将你的作业编入 Git 存储库中。这里有一些工具可以帮助你构建和测试:
安全和治理
当以无服务器方式工作时,最终会出现许多 Git 库。代码包的数量可能会很惊人。对统一代码标准的需求依然如故,但是,现在要在你的研发组织中强制执行它要困难得多。以下是一些可能可以帮助你应对挑战的工具:
打包和发布
构建无服务器应用程序是将微服务连接到一个单元中。例如,你可能正在使用Amazon API网关、AWS Lambda和Amazon DynamoDB。你应该使用一个打包器将配置保存在一个位置,而不是每一个单独配置。这使你可以在多个环境中轻松地对应用程序进行版本控制和复制。这里有几个打包器:
程序包
当使用许多不同的无服务器组件时,你应该创建小的工具包,以便能够跨不同的 Lambda 函数导入。你可以使用特定于语言的存储库,如 npm 或 RubyGems,或者使用更全面的解决方案。这里有几个程序包工件库,允许托管多种编程语言:
监控
在处理无服务器应用程序时,这部分尤其棘手,因为所有内容都被分割成小块。使用支持这种工作模式的监控工具非常重要。下面是一些可以处理无服务器的工具:
总结
无服务器时代带来了许多转变,比如对整个管道进行编码,Git 是唯一的真相来源。这并不意味着我们过去遇到的安全、日志记录等问题都已经消失,你应该继续解决这些问题,并利用工具使你能够专注于你的业务。
关于作者
Shimon Tolts 是 Datree.io 的首席技术官兼联合创始人。他专门研究开发工具和基础设施,并运营了一家 100%无服务器的公司。
原文链接:
评论