阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

OAM 正式开源:全球首个云原生应用标准定义与架构模型

  • 2019-10-17
  • 本文字数:2765 字

    阅读完需:约 9 分钟

OAM 正式开源:全球首个云原生应用标准定义与架构模型

2019 年 10 月 17 日,阿里巴巴合伙人、阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 QCon上海2019重磅宣布,阿里云与微软联合推出开放应用模型 Open Application Model (OAM)开源项目。OAM 的愿景是以标准化的方式沟通和连接应用开发者、运维人员、应用基础设施,让云原生应用管理与交付变得更加简洁,高效,并且可控。


OAM 为什么值得关注?

  • 关注点分离:开发者关注应用本身,运维人员关注模块化运维能力,让应用管理变得更轻松、应用交付变得更可控。

  • 平台无关与高可扩展:应用定义与平台层实现解耦,应用描述支持任意扩展和跨环境实现

  • 模块化应用运维特征:可以自由组合和支持模块化实现的运维特征描述


Kubernetes 项目作为容器编排领域的事实标准, 成功推动了诸如阿里云 Kubernetes (ACK)等云原生服务的迅速增长。但同时我们也关注到,Kubernetes 的核心 API 资源比如 Service、Deployment 等,实际上只是应用中的不同组成部分,并不能代表一个应用的全部。也许,我们可以通过像 Helm charts 这样的方式尝试表达一个可部署的应用,可一旦部署起来,实际运行的应用中却依旧缺乏以应用为中心的约束模型。这些问题都反映出,Kubernetes 以及云原生技术栈需要一种以应用为中心的 API 资源来提供一个专注于应用管理的、标准的、高度一致的模型,这个 API 资源可以代表完整运行的应用本身,而不仅仅是应用模板或者一个应用的几个组成部分,这就是今天阿里云与微软联合宣布推出开放应用模型 Open Application Model (OAM)的原因。



项目地址:https://openappmodel.io,OAM 项目目前由规范和实现两部分组成。

Open Application Model 是什么?

OAM 是一个专注于描述应用的标准规范。有了这个规范,应用描述就可以彻底与基础设施部署和管理应用的细节分开。这种关注点分离(Seperation of Conerns)的设计好处是非常明显的。 举个例子,在实际生产环境中,无论是 Ingress、CNI 还是 Service Mesh,这些表面看起来一致的运维概念,在不同的 Kubernetes 集群中可谓千差万别。 通过将应用定义与集群的运维能力分离,我们就可以让应用开发者更专注应用本身的价值点,而不是”应用部署在哪“这样的运维细节。


此外,关注点分离让平台架构师可以轻松地把平台运维能力封装成可被复用的组件,从而让应用开发者专注于将这些运维组件与代码进行集成,从而快速、轻松地构建可信赖的应用。Open Application Model 的目标是让简单的应用管理变得更加轻松,让复杂的应用交付变得更加可控。

一、应用组件(Components)

在 OAM 中,“应用”是由多个概念共同组合而成。第一个概念是:应用组件(Components),它是整个应用的重要组成部分。所以说,应用组件既可以包括应用运行所依赖的服务:比如 MySQL 数据库,也包括应用服务本身:比如拥有多个副本的 PHP 服务器。开发者可以把他们写的代码”打包“成一个应用组件,然后编写配置文件来描述该组件与其他服务之间的关系。应用组件的概念让平台架构师等能够将应用分解成成一个个可被复用的模块,这种模块化封装应用组成部分的思想,代表了一种构建安全、高可扩展性应用的最佳实践:通过一个完全分布式的架构模型,实现了应用组件描述和实现的解耦。

二、应用部署配置文件(Application Configuration)

为了将这些应用组件描述变成一个真正运行起来的应用,应用运维人员会通过一个专门的、包含了所有应用组件信息的部署配置文件来实例化这个待运行的应用。这个配置文件本身也是 OAM 规范中的一个声明式 API,用来让应用运维人员能够根据开发者或者平台提交的应用描述,实例化出对应的、真正运行起来的应用。

三、应用运维特征(Traits)

最后一个概念是一组应用运维特征(Traits),它们描述了应用在具体部署环境中的运维特征,比如应用的水平扩展的策略和 Ingress 规则,这些特征对于应用的运维来说非常重要,但它们在不同的部署环境里却往往有着截然不同的实现方式。 举一个简单的例子,同样是 Ingress,它在公有云上和本地数据中心的实现可能完全不同:前者一般是 SLB 这样的云服务,而后者则可能是一个专门的硬件。这也就意味着针对这两个环境的 Ingress 运维工作,将会有天壤之别。 但与此同时,无论是在哪个环境里,这个 Ingress 规则对于应用开发人员来说,可能是完全相同的。应用特征的设计,让这种关注点分离成为可能:只要这两个环境在 OAM 模型下提供了对 Ingress 这个应用运维特征的实现,那么应用就可以使用统一的 Ingress 规则描述,无差别地在这两个地方运行起来。与此同时,这两个环境的基础设施供应商可以继续通过配置这些应用特征的实现,来满足它们各自的运维要求(例如:不同环境里 Ingress 实现在满足合规性和安全性上的差异)。

OAM:平台无关、高可扩展的应用描述能力

与 PaaS 应用模型相比,OAM 有很多独有的特点,其中最重要一点是:平台无关性。虽然我们目前发布的 OAM 实现(rudr)是基于 Kubernetes 的,但 Open Application Model 与 Kubernetes 并没有强耦合。实际上 ,OAM 可以实现到任意平台或运行环境之上,这当然也包括边缘计算与物联网的场景。我们也认同 Kubernetes 在很多运行环境中可能并不是最好的选择,或者是像 Serverless 这类用户并不需要关心基础设施复杂性的运行环境。在这些场景下,OAM 都可以提供完全一致的应用管理体验。


第二个重要的特点是,OAM 的 specification (OAM 规范) 在设计上天然是可扩展的。OAM 不像 PaaS 那样自成封闭体系,也不会通过某种独有的应用管理环境屏蔽掉底层平台的特点(比如:在 Kubernetes 之上”盖一个大帽子“)。 相反,OAM 使平台层可以通过应用特征系统 (Trait system)来体现平台的特性和差异性。也就是说,只要不同的平台都能够提供应用所需要的某些应用特征 (Trait),开发人员就能轻松地研发跨平台的应用。类似地,哪怕最底层的硬件提供商,也可以通过应用特征系统来体现其平台特性。OAM 的整体设计,就是为了避免在平台可移植性中经常发生的“最小公分母”锁定问题。相反,OAM 不但提供了可移植性的能力,还确保了每个平台有能力去透出独有的特性和用途。OAM 让开发人员可以自由地针对不同平台以标准方式在可移植性和差异化功能之间取得平衡。

开放的社区与未来

如今,开放应用模型以及相应的 Kubernetes 实现有了初步成果,我们感到非常兴奋。 OAM 规范是基于 Open Web Foundation 协议进行开发的。我们的目标,从一开始就是让开放应用模型 Open Application Model 成为中立基金会的项目,以便实现开放治理与广泛合作。如果开发者希望了解更多信息,请前往开放应用模型项目的 GitHub 仓库: OAM specification ,以及基于 Kubernetes 的 OAM 标准实现Rudr


今天,OAM 项目的发布只是迈出的一小步。我们非常期待得到您的反馈,并与大家密切协作,针对 Kubernetes 和任意云环境打造一个简单、可移植、可复用的应用模型。


2019-10-17 10:229313

评论 5 条评论

发布
用户头像
域名换成了: https://oam.dev/
2019-11-28 17:52
回复
用户头像
2019-11-23 06:57
回复
用户头像
看起来很有前途,最近发布的 Azure Ark 是不是用到了这个?
2019-11-07 15:14
回复
用户头像
猛啊, 这个要支持一下
2019-10-17 12:05
回复
没有更多了
发现更多内容

Geek 青年说北京沙龙分享

看山

Geek青年说

并发王者课-青铜8:分工协作-从本质认知线程的状态和动作方法

MetaThoughts

Java 多线程 并发 并发王者课

Java程序员简历这么写,还过不了筛选算我输!

Java架构师迁哥

Spring 实例化方式有几种?为什么会用到 Cglib?

小傅哥

Java spring 小傅哥 cglib 手写框架

SphereEx 获数百万美元天使融资,接力 ShardingSphere 开启 Database Plus 新篇章

SphereEx

非官方不权威Java面试宝典

北游学Java

Java 面试

阿里云 AI 编辑部获 CCBN 创新奖,揭秘传媒行业解决方案背后的黑科技

阿里云视频云

阿里云 媒体 CCBN

华云大咖说 | 华云数据助力高校建设实训室平台

华云数据

长连接网关技术专题(五):喜马拉雅自研亿级API网关技术实践

JackJiang

Netty nio 网关

OpenResty入门

捉虫大师

nginx openresty

🔎【Java 源码探索】深入浅出的分析Mutex底层源码

洛神灬殇

Java JVM mutex Condition 5月日更

如何优化你的HTTPS?

运维研习社

https HTTP2.0 5月日更

高并发存储优化篇:诸多策略,缓存为王

Coder的技术之路

缓存 缓存击穿 缓存雪崩 缓存架构

知乎的一次29.7元的咨询

why技术

Java 程序员

阿里面试题:MySQL 磁盘满了,怎么办?

Java架构师迁哥

从零开始学习ThingJS之创建/销毁物体

ThingJS数字孪生引擎

JavaScript 3D 3D可视化 数字孪生

6月日更,优质更文,“定制”来袭~

InfoQ写作社区官方

6月日更 热门活动

和12岁小同志搞创客开发:如何选择合适的传感器?

不脱发的程序猿

DIY 传感器 创客开发 如何选择合适的传感器?

怎样节省 2/3 的 GPU?爱奇艺 vGPU 的探索与实践

爱奇艺技术产品团队

深度学习 gpu

日常Bug排查-系统失去响应-Redis使用不当

无毁的湖光

Java redis

Springboot actuator不可不注意的安全问题-可越权-可脱库

果果果

安全 springboot

新生代小鲜肉之代码生成器

蛋先生DX

node.js 效率工具 自动化 生成代码

开发人员应该害怕低代码吗?

禅道项目管理

程序员 低代码 开发 低代码平台

个推“D-M-P”三步走, 打造每日治数平台,助力行业数字化升级

个推

大数据 数据中台 数据治理 数据智能

简单又灵活的权限设计?

蛋先生DX

数据库设计 权限系统 权限 权限架构 rbac

千亿级数据迁移mongodb成本节省及性能优化实践

杨亚洲(专注MongoDB及高性能中间件)

MySQL 数据库 mongodb 架构 分布式数据库mongodb

震惊,PostGIS还可以这样用!!!

华为云开发者联盟

数据库 分布式 GaussDB 地理数据库 PostGIS

QCon 演讲实录 | 大型软件团队的数字化项目管理实践

万事ONES

研发管理 团队协作 数字化 ONES Qcon

.Net Core Configuration Etcd数据源

yi念之间

etcd .net core

五分钟开发属于你自己的代码生成器

蛋先生DX

node.js 效率工具 生成代码 JavaScrip

带你读论文丨异常检测算法及发展趋势分析

华为云开发者联盟

深度学习 异常检测算法 深度异常检测算法 深度半监督 群体异常检测

OAM 正式开源:全球首个云原生应用标准定义与架构模型_QCon_OAM项目负责人_InfoQ精选文章