云原生应用程序接口

标准接口(或第十三因素)

-由Google的Brian Grant和Craig Mcluckie撰写

当您说我们需要博学的公司中的“软件标准”时,您会得到一些有趣的外观。大多数人都承认,软件标准一直是那里最大胆,最成功的项目(例如Internet)成功的关键。大多数人也对它们如何应用于我们今天生活的创新世界持怀疑态度。我们的项目以周为单位执行,而不是以年为单位。在这个动荡,竞争激烈的世界中,陷入大型软件公司驱动的标准实践的困境将是丧钟。

这与“那些”标准无关。经过多年的深思熟虑和谈判后出现的问题,最终由一个以四个字母缩写的名称发布的机构发布。这是一种不同的方法:找到现实世界中正在起作用的东西,并充当一个社区来拥抱它。

让我们回到第一原则。为了用一个词描述Cloud Native,我们选择“可自动化”。

大多数现有的应用程序不是。 

应用程序与其环境之间有许多接口,无论是与管理基础结构,共享服务还是其他应用程序都有。对于我们来说,要使操作员免于打补丁,扩展,将应用程序从一个环境迁移到另一个环境,更改依赖关系以及处理故障情况,必须要有一组结构良好的通用接口。不用说,这些接口必须为机器设计,而不仅仅是为人设计。机器友好的界面允许自动化系统了解所管理的系统,并创建应用程序在自动化环境中生存所需的松散耦合。 

随着容器化基础架构的构建,应用程序可以使用一组关键接口,这些接口远远超出了当今单个节点可用的接口。采用“无服务器模式”(意味着短暂的,事件驱动的函数执行)将进一步加深在与节点完全分离的环境中理解运行代码的需求。所需的服务将从应用程序配置开始,并扩展到监视,日志记录,自动扩展等。仅当应用程序继续适应在“云原生”世界中成为更充实的公民时,功能集才会增长。

进一步探讨一个示例,已经开发了许多服务发现解决方案,但通常都与特定的存储实现,特定的编程语言,非标准协议和/或以其他某种方式(例如,决定应用程序的命名结构)。这使其不适用于通用用途。尽管DNS有局限性(最终将需要解决),但它至少是一种标准协议,在其实现中有创新的空间。 CoreDNS和其他云原生DNS实施证明了这一点。  

当我们在Google的系统内部进行查看时,由于软件和硬件环境非常相似,因此无需正式的接口定义就可以实现非常高的自动化程度。相邻的系统可以安全地对接口进行假设,并且通过提供一组通用的库,我们可以解决此问题。一个很好的例子是我们的日志格式不需要正式指定,因为生成日志的库由维护日志处理系统的团队维护。这意味着我们到目前为止可以不流利地解决问题(这正在解决与日志记录系统接口社区中的问题)。

即使Google设法通过这种方式获得成功,也伤害了我们。一种方法是我们收购公司。要将其技术移植到我们的自动化系统中运行,需要进行大量工作。在继续创新的同时进行这项工作特别困难。更重要的是,开放源代码世界中发生了很多创新,这对我们来说并不容易。当新技术出现时,我们希望能够进行试验,逐步采用它,并可能对此做出贡献。当您运行垂直集成的定制堆栈时,这是一件很难的事情。

缺乏标准接口为客户提供了三个选择: 

  • 承受着高昂的运营成本(现状),并接受您的开发人员在许多情况下会花费大部分时间来处理应用程序的维护和提供。
  • 像Google一样注册(构建自己的一切,直到地板上的具体内容)。 
  • 依靠单个或少量供应商提供完整的解决方案并接受一定程度的锁定。几乎没有任何规模的公司(从企业到初创公司)都能找到这种吸引力。 我们相信,开放的社区会更加强大,并且当堆栈的每一层都有竞争时,客户会受益。应该有可能在每个级别将具有最佳功能的堆栈组合在一起-日志记录,监视,编排,容器运行时环境,块和文件系统存储,SDN技术等。 

标准化管理系统和应用程序之间的接口(至少按照惯例)至关重要。人们可能会考虑使用接口的通用约定作为第十三个因素(在 12因素方法),以创建可在云中大规模运行的现代系统。

Kubernetes和Cloud Native Computing Foundation(CNCF )是支持标准接口的出现以及支持全自动软件世界的出现的绝佳机会。我们希望看到这个社区拥护从工作技术中推广标准接口的理想。显而易见的第一步是确定关键接口的直接集合,并在CNCF中建立工作组以开始评估该领域中的候选对象,并赞助工作以开始开发适用于容器格式,协调器,开发人员工具的标准接口以及实现Cloud Native愿景所需的无数其他系统。

-布莱恩·格兰特(Brian Grant)和克雷格·麦克卢基(Craig Mcluckie),Google