5

关于 OAM 与云原生应用

 2 years ago
source link: https://yanhang.me/post/2020-10-22-oam/
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.
neoserver,ios ssh client

OAM 是指阿里开源的一个应用模型,主要是云原生场景。年初的时候出来到现在,断断续续地了解过一些,之前一直没有特别想清楚,其实现在也是,但多多少少有一点点感悟,在这里记录一下.

云原生应用的现状

这里主要就是说围绕 kubernetes 生态的应用现状,基本上就是一团糟。没有标准,没有好的开源产品,没有社区来推动这个事情。先看看目前有啥:

  • Helm: 适合作为rpm/apt类似的东西,不适合直接给 end user 用
  • Application CRD: 社区不活跃,结构定义也不好
  • Operator: 过于复杂,目前仅有的统一规范是 ocp 弄的 operator framework. 尚未推广开来
  • 其他林林总总的各种 ad-hoc 方案

这就导致云厂商要么是完全自己做一套新的应用模型,要么是用上面这一类现成的,但功能受限,扩展不易。且用户需要有一定的前置知识才能用好。

OAM 的主要优点

目前看来其最主要的优点是角色分离。Kubernetes YAML 的一个主要问题就是,它是一个大而全的 cofig 方案,不宜手写,只适合运维方向。如果想要做成用户友好的模型,OAM提供了一种可能性: 将大的 config 按角色分拆开,开发人员写一部分,运维人员写一部分,各自只关心各自的部分,最终再合并成一个整体的 config. 细节问题比如具体分成几个角色,谁来合并,可以再迭代改进。但这个分离的设计可以认为是走在一个正确的方向上。

其他的几个重要的方面有:

  1. 跨平台性。从设计上来讲,一开始设计成跨平台的思路当然是对的。但实际上可能还是90%以上的人主要是用在 k8s 上,所以 spec 设计时比较贴近于 k8s 的设计。其他平台的实现估计会花不少时间,这也是导致目前没有其他平台实现的主要原因
  2. 插件系统。OAM 提供的 traits 能力,可以理解为对应用的一个插件系统。之前国内有厂商做过类似的东西,是一个非常好的尝试。以插件形式给应用附加能力,是一种非常自然和方便的用户体验,traits可以用来提供类似的能力。

即使做了职责分离,OAM 看起来仍然是非常难以直接 edit 的东西。这也是之前我一直比较纠结的一个点。因为它更像一个面向开发者的 spec, 而不是一个对 end user 的产品。我们如何让用户方便地使用这个功能呢,有下面几种可能:

  1. 纯 UI 封装。这里需要 UI 设计的比较好,能够隐藏比较多的细节,不要暴露太多的底层名词给用户,不然用户就要去理解 OAM 是个什么东西了。而我们理想的形式就是让用户不去学习新概念。一个可能的点就是我上面说的,把 traits 叫做 插件等等。这里需要考虑的一个点是API怎么设计,因为一般UI/API都是必须的产品。如果直接把 OAM 用 API 暴露出来也不怎么友好,这就涉及到下面的第二点
  2. 我们能否再设计一层 spec, 简单一点的,能提供便捷的API,UI也方便? 这个诱惑力比较大,但其实又回到了远点,因为又回到了老的大的 config 上? 假设我们想做的更简单一些,那势必又无法全面覆盖 OAM 的能力。似乎唯一的可能性就是,我们换了一种 spec 格式,让用户更容易理解,但可以和 OAM 一一对应。

因为之前有厂商放出了一些 OAM UI 的截图,比如:

这基本上是照本宣科的一个实现,并没怎么考虑用户体验。可以说设计一个好的UI的难度不低于设计这个spec, 设计一个简易的 spec 也是.

Compose

Compose 社区也在做类似的事情,而且有很多地方是很像的,比如 spec 与实现的分离。 spec 里分为 core/extension等几个部分,不同实现可以自己做一些调整。Compose 有一个很大的优点就是,到目前为止,它一直是用户体验最好的一个,YAML格式易于理解,易于书写,对API/UI也很友好。所以即使现在用的人不算太多,但仍然是一个非常有参考价值的应用模型。甚至,我们可以把 compose 架在 OAM 之上,这也是一种可能性。

应用 Catalog

在可预见的一段时间之内,即使加了 OAM 之后,多种应用模型仍会是一个并存的场景,容器云厂商也需要尽可能多地给用户选择,尤其是在流水线方面。有的用户可能会用 chart 来部署 redis, 用 OAM 来部署自己的一些应用,用 Operator 来部署一个 kafka. 所以我们需要有这么一个统一入口,给用户以选择。流水线也需要保持一种可扩展性,让用户自己选择打包和 deploy 的格式. ocp 目前就有类似的产品设计:

总之,前景未明,OAM 看起来很有希望。不过工业界什么东西会流行,牵扯的因素比较多,大公司,媒体,开发人员等等。不管结果怎么样,平台的责任就是尽量少发明新概念,尽量提供多的选择。

Links

  1. 社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK