Serverless 风起云涌,为什么阿里、微软、AWS 纷纷拥抱开源 OAM?

作者 | 张磊,阿里云原生应用平台高级技术专家

邓洪超,阿里云技术专家

责编 | 唐小引

头图 | CSDN 下载自东方 IC

出品 | CSDN(ID:CSDNnews)

Serverless 这个词第一次被是 2012 年一篇名为《Why The Future of Software and Apps is Serverless》的文章。不过,如果你真去考古的话就会发现,这篇文章谈到的内容是其实是持续集成和代码版本控制的软件工程理念,跟我们今天谈 Serverless 所提到的 “scale to zero”、“pay as you go”,FaaS/BaaS 这些东西,完全不是一个事情。

在 2014 年,AWS 发布了一个叫作「Lambda」的产品。这个产品的设计理念很简单 —— 它认为云计算最终是面向应用提供服务的,而当用户想要部署一个应用的时候,它只需要有一个地方放自己编写程序来执行具体任务,而不用关心这个程序运行在哪个机器或者哪个虚拟机上。

正是 Lambda 的发布,才让“Serverless”这一范式提高到一个全新的层面。Serverless 为云中部署和运行应用程序提供了一种全新的系统体系结构,强调用户不需要关心复杂的服务器配置,只需要关心自己的代码以及如何把代码打包成一个可以被云计算平台托管的“可运行实体”。在随后发布了一系列譬如根据实际流量扩展应用实例、按照实际使用量而不是预分配资源来计费等经典特性之后,AWS 才逐步奠定了 Serverless 领域的事实标准。

2017 年,AWS 发布了 Fargate 服务,将 Serverless 的理念推广到了基于容器的可运行实体中,很快这个思想也被 Google Cloud Run 等进行了跟进,开启了“下一代”基于容器的 Serverless 运行时热潮。

Serverless 与 Open Application Model (OAM)?

那么 OAM,跟 AWS 和 Serverless 又是什么关系呢?

首先,Open Application Model(OAM)是一套由阿里云和微软共同发起、由云原生社区共同维护的应用描述规范(spec)。OAM 的核心理念是:“以应用为中心”,它强调研发和运维围绕着一组声明式的、灵活可扩展的上层抽象进行协作,而不是直接去使用复杂晦涩的基础设施层 API。

比如,对于一个基于容器的、使用 K8s HPA 进行水平扩展应用,在 OAM 规范下会通过如下两个 YAML 文件定义出来:

# 研发负责编写这个 YAML 文件
apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:name: web-server
spec:# 待部署的应用详情workload:apiVersion: core.oam.dev/v1alpha2kind: Serverspec:containers:- name: frontendimage: frontend:latest
---
# 运维(或者 PaaS 平台)负责编写这个 YAML 文件
apiVersion: core.oam.dev/v1alpha2
kind: ApplicationConfiguration
metadata:name: helloworld
spec:components:- name: frontend# 该应用运行所需的运维能力traits:- trait:apiVersion: autoscaling.k8s.io/v2beta2kind: HorizontalPodAutoscalermetadata:name: scale-hellospec:minReplicas: 1maxReplicas: 10

这样的 YAML 文件被提交给 K8s 之后,就会由 OAM 插件自动翻译成完整的 Deployment 和 HPA 对象真正运行起来。可以看到,在 OAM 规范下,研发和运维的关注点是完全分离开的,研发只需要编写非常少量的、跟自己相关的一些字段,而不需要去学习 K8s 的完整 API,就可以轻松的定义和发布应用。

由于 OAM 规范了“应用”、“运维能力”、“发布边界”等一系列云原生应用交付的定义标准,应用管理平台的开发者们就可以使用这个规范、通过更简洁的 YAML 文件描述各种各样的应用和运维策略,最后通过 OAM 插件把这些 YAML 文件跟 K8s 的实际资源(包括 CRD)映射起来。

也就是说,OAM 给出了一个定义“上层抽象”的事实标准,而这个“上层抽象”的最重要作用,就是防止各种各样的基础设施细节(比如 HPA、Ingress、容器、Pod、Service 等)泄露给研发同学,带来不必要的复杂性。所以说,OAM 一经发布,就被称作是开发 K8s 应用平台 的“神兵利器”。

但更重要的是,这种从以应用描述中“剥离基础设施层细节、为开发者提供最友好的上层抽象”的思想,与 Serverless “去基础设施化” 的理念不谋而合。更确切地说,OAM 天生就是 Serverless 的

也正因为如此,OAM 一经发布,就受到了 Serverless 领域的重点关注。这其中,当然也少不了 AWS。

极致体验:AWS ECS for OAM

2020 年 3 月底,AWS ECS 团队在官方 GitHub 上发布了一个名叫:Amazon ECS for Open Application Model 的开源项目。

项目地址:https://github.com/awslabs/amazon-ecs-for-open-application-model

这个项目,正是 AWS 团队基于 Serverless 服务对 OAM 进行支持的一次尝试。这个项目的底层运行时,正是我们前面提到的 Serverless 容器服务:Fargate。而这个 AWS ECS for OAM 项目给开发者带来的体验非常有趣,我们来看一下。

准备工作有三步,一次性执行完即可。

  • 用户需要在本地有 AWS 账户的认证信息,这个可以通过 AWS 官方客户端 aws configure 命令一键生成。

  • 编译项目,然后你就可以拿到一个叫做 oam-ecs 的可执行文件。

  • 你需要执行 oam-ecs env 命令来为你后面的部署准备环境。这条命令结束后,AWS 会自动为你创建 VPC 和对应的公有/私有子网。

而准备工作完成后,你只要在本地定义一个 OAM 应用 YAML 文件(比如前面提到的 helloworld 应用的例子)那么你就可以通过如下所示的一行命令把一个完整的、带了 HPA 的应用在 Fargate 上部署起来,并且可以直接在公网访问到:

oam-ecs app deploy -f helloworld-app.yaml

是不是非常简单?

在 AWS ECS for OAM 项目的官方文档中,它给出了一个更加复杂的例子,我们来讲解一下。

这次我们要部署的应用由三个 YAML 文件组成,依然划分成研发和运维两个关注点:

  • 研发负责编写:

server-component.yaml

这个文件里的内容是应用的第一个组件(component),具描述的是我们要部署的应用容器。

worker-component.yaml

这个文件里的内容应用的第二个组件(component), 具体描述的是负责检查当前环境的网络是否畅通的一个循环 Job。

  • 运维负责编写:

example-app.yaml

这个文件里的内容是完整的应用组件拓扑以及各个组件的运维特征(traits),具体描述的是一个“手动扩容(manual-scaler)”的运维策略,它专门用来扩容 worker-component。

所以,上述 example-app.yaml 也就是完整应用描述的内容如下所示:

apiVersion: core.oam.dev/v1alpha1
kind: ApplicationConfiguration
metadata:name: example-app
spec:components:- componentName: worker-v1instanceName: example-workertraits:- name: manual-scalerproperties:replicaCount: 2- componentName: server-v1instanceName: example-serverparameterValues:- name: WorldValuevalue: Everyone

可以看到,它定义了两个组件(worker-v1 和 server-v1),并且 worker-v1 组件有一个叫做 manual-scaler 的手动扩容策略。

本 Demo 所有的三个 YAML 文件可以查看这个目录下的内容:

https://github.com/awslabs/amazon-ecs-for-open-application-model/tree/master/examples

而上述复杂应用的部署,依然是一条指令搞定,非常简单:

oam-ecs app deploy \-f examples/example-app.yaml \-f examples/worker-component.yaml \-f examples/server-component.yaml

上述指令执行完成后(在国内的同学因为特殊的网络问题可能需要一点耐心),你就可以通过 oam-ecs app show 命令查看到应用的访问信息和 DNS 名字。打开浏览器,输入这个访问信息,你就可以直接访问到这个应用了,如下所示:

而如果你要修改应用配置,比如更新镜像或者修改 replicaCount 的值,那么只需要修改上述 YAML 文件然后重新 deploy 即可,完全是声明式的管理方式。

实际上,上述操作如果通过 AWS 的 Console 来完成,至少需要在 5 个云产品页面之间互相跳转进行各种各样的配置;或者,你就需要学习 CloudFormation 语法然后编写一个非常非常长的 CF 文件,以便拉起应用运行所需的 Fargate 实例、LoadBalancer、网络、DNS 配置等等所有资源。

但是通过 OAM 规范,上述定义和部署应用过程不仅变得极其简单,而且还把原来流程化的云服务操作直接转换成了更简洁、更友好的声明式 YAML 文件。而这里所需的实现 OAM 规范的具体工作,其实也就几百行代码而已。

更重要的是,当 AWS Fargate 这样的 Serverless 服务跟 OAM 这样开发者友好的应用定义结合在一起之后,你才会真正感受到:原来,这种简洁、爽快和极低的心智负担,才是 Serverless 为开发者带来的极致体验。

最后:当应用模型遇上 Serverless

OAM 模型在云原生应用交付生态引起了巨大的反响。目前,阿里云 EDAS 服务已经成为了业界第一款基于 OAM 构建的生产级应用管理平台,并很快推出下一代“以应用为中心”的产品体验;在 CNCF 社区,知名的跨云应用管理与交付平台 Crossplane 项目也已经成为了 OAM 规范的重要采纳者和维护者。

EDAS 官网:https://help.aliyun.com/product/29500.html

Crossplane:https://github.com/crossplane/crossplane

实际上,不止 AWS Fargate,我们云计算生态里的所有 Serverless 服务都可以很容易地使用 OAM 来作为面向开发者的表现层和应用定义,从而实现对原本复杂的基础设施 API 进行简化和抽象,将原本复杂的流程化操作“一键”升级为 Kubernetes 风格的声明式应用管理方式。

更重要的是,得益于 OAM 的高可扩展性,你不仅可以在 Fargate 上部署容器应用,你还可以用 OAM 来描述 Function,虚拟机,WebAssembly 乃至任何你能想到的工作负载类型,然后把它们轻松的部署在 Serverless 服务上,甚至在不同的云服务之间无缝迁移。这些看似“神奇”的能力,都是当一个标准化、可扩展的“应用模型”遇见一个 Serverless 平台之后能够碰撞出来的创新火花。

应用模型 + Serverless,已经逐渐成为了云原生生态最热门的话题之一,欢迎你一起来加入 CNCF 云原生应用交付领域小组(SIG App Delivery),推动云计算生态朝着“以应用为中心”的方向不断前进起来!

AWS ECS on OAM 项目:https://github.com/awslabs/amazon-ecs-for-open-application-model/

Open Application Model 项目:https://github.com/oam-dev/spec

CNCF SIG App Delivery:https://github.com/cncf/sig-app-delivery

作者简介:

张磊,阿里云原生应用平台高级技术专家,CNCF 中国大使,CNCF Application Delivery Sig 主席。

邓洪超,阿里云技术专家,Kubernetes Operator 机制的初始作者之一,对 K8s 应用管理体系有较多的研究和经验。

同时,欢迎所有开发者扫描下方二维码填写《开发者与AI大调查》,只需2分钟,即可收获价值299元的“ AI开发者万人大会”在线直播门票!

推荐阅读:小网站的容器化(下):网站容器化的各种姿势,先跟着撸一波代码再说!
你知道吗?其实Oracle直方图自动统计算法存在这些缺陷!(附验证步骤)
详解以太坊虚拟机(EVM)的数据存储机制
比特币当赎金,WannaRen勒索病毒二度来袭!平台抗住日访问量7亿次,研发品控流程全公开“手把手撕开LeetCode翻译,扒各种算法套路的裤子”北京四环堵车引发的智能交通大构想真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8S从懵圈到熟练 - 我们为什么会删除不了集群的命名空间?

阿里云售后技术团队的同学,每天都在处理各式各样千奇百怪的线上问题。常见的有,网络连接失败,服务器宕机,性能不达标,请求响应慢等。但如果要评选,什么问题看起来微不足道事实上却足以让人绞尽脑汁&#xf…

为什么技术人一定要懂点“可信计算”?

阿里妹导读:可信计算(TrustedComputing,简称TC)是一项由TCG(可信计算组)推动和开发的技术。可信的核心目标之一是保证系统和应用的完整性,从而确定系统或软件运行在设计目标期望的可信状态。可信和安全是相辅相成的&am…

很用心的为你写了 9 道 MySQL 面试题,建议收藏!

来源 | Java 建设者责编| Carol封图| CSDN下载于视觉中国 MySQL 也是作者本人正在学习的部分,后面会多输出 MySQL 的文章贡献给大家,毕竟 MySQL 涉及到数据存储、锁、磁盘寻道、分页等操作系统概念,而且互联网对 MySQL 的注重程度是不言而喻的…

OpenTelemetry-可观察性的新时代

有幸在2019KubeCon上海站听到Steve Flanders关于OpenTelemetry的演讲,之前Ops领域两个网红项目OpenTracing和OpenCensus终于走到了一起,可观察性统一的标准化已经扬帆起航。 这篇文章旨在抛砖引玉,希望能够和更多的同学一起交流可观察性相关的…

JavaScript-严格检查模式

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!--前提&#xff1a; IDEA需要设置支持ES6 语法use strict; 必须写在JavaScript 的第一行严格检查模式&#xff0c;预防JavaS…

我们为什么需要 SpringBoot?

作者 | 阿文&#xff0c;责编 | 郭芮头图 | CSDN 下载自东方IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;任何先进技术的产生都不是凭空出现的&#xff0c;SpringBoot 也不例外&#xff0c;SpringBoot 是基于Spring 的基础上产生的。总所周知&#xff0c;Spri…

高德网络定位之“移动WiFi识别”

导读 随着时代的发展&#xff0c;近10年来位置产业蓬勃发展&#xff0c;定位能力逐渐从低精度走向高精度&#xff0c;从部分场景走向泛在定位。设备和场景的丰富&#xff0c;使得定位技术和能力也不断的优化更新。定位能力包括GNSS、DR&#xff08;航迹推算&#xff09;、MM&a…

JavaScript-字符串

字符串 正常字符串使用单引号 或者 双引号 包裹注意转义字符 \ \ \n \t \u4e2d \u#### Unicode字符 \x41 Ascll字符多行字符串编写 // tab 上面 esc下面的引号 let msg helloworld你好 console.log(msg)模板字符串 let name ht let age 5; let msg hello${name}你…

Alibaba Sentinel规则持久化-拉模式-手把手教程【基于文件】

文章目录一、拉模式架构二、原理简述三、编写3.1 加依赖3.2 写代码3.3 配置四、优缺点分析五、你可能会有的疑问六、参考文档七、案例测试7.1. 添加流控规则7.2. 服务停止7.3. 重新启动服务7.4. 调用接口7.5. 查看流控规则本文实现基于拉模式的Alibaba Sentinel规则持久化。一、…

开发者说:Seata 0.7.0 版本,你 get 'Metrics' 技能了吗?

从用户的视角来感受一个开源项目的成长&#xff0c;是我们推出「开发者说」专栏的初衷&#xff0c;即在开发者进行开源项目选型时&#xff0c;提供更为立体的项目信息。专栏所有内容均来自作者原创/投稿&#xff0c;本文是「开发者说」的第9篇&#xff0c;作者郑扬勇&#xff0…

面试时遇到「看门狗」脖子上挂着「时间轮」,我就问你怕不怕?

来源 | Why技术封图 | CSDN 下载于视觉中国之前写了一篇文章&#xff0c;有一个小节中写到这样一段话&#xff1a;于是就有读者来问了&#xff1a;老哥&#xff0c;看门狗介绍一下呗。面试的时候被问到了&#xff0c;没有回答上来。听到这个问题我脑海里首先浮现出了几个问题&…

海量结构化数据存储技术揭秘:Tablestore存储和索引引擎详解

前言 表格存储Tablestore是阿里云自研的面向海量结构化数据存储的Serverless NoSQL多模型数据库。Tablestore在阿里云官网上有各种文档介绍&#xff0c;也发布了很多场景案例文章&#xff0c;这些文章收录在这个合集中《表格存储Tablestore权威指南》。值得一提的是&#xff0…

JavaScript-数组

数组 Array可以包含任意的数据类型 var arr [1,2,3,4,5,6] arr[0] // 取值 arr[0] 3 // 赋值长度 arr.length arr.length 10 // 长度是可变的注意&#xff1a;假如给arr.length 赋值&#xff0c;数组大小就会发生变化。如果赋值过小&#xff0c;元素就会丢失 获取指定字…

Alibaba Sentinel规则持久化-推模式-手把手教程【基于Nacos】

前面&#xff0c;已经为Sentinel实现了 基于拉模式的规则持久化 &#xff0c;本文来实现基于 推模式的规则持久化。 文章目录一、推模式架构图二、原理简述三、微服务改造3.1. 加依赖3.2. 添加配置四、Sentinel控制台改造五、编译 & 启动六、测试测试1&#xff1a;测试2&am…

现代IM系统中的消息系统架构 - 实现篇

序 消息类场景是表格存储&#xff08;Tablestore&#xff09;主推的方向之一&#xff0c;因其数据存储结构在消息类数据存储上具有天然优势。为了方便用户基于Tablestore为消息类场景建模&#xff0c;Tablestore封装Timeline模型&#xff0c;旨在让用户更快捷的实现消息类场景…

linux 环境 RocketMQ 4.8.0 安装、部署控制台

windows下RocketMQ下载、安装、部署、控制台 https://gblfy.blog.csdn.net/article/details/115734482 文章目录一、软件下载二、启动2.1. Linux/Unix/MacOS安装教程2.2. 验证RocketMQ功能正常&#xff08;可选&#xff09;2.3. 服务停止三、安装可视化插件3.1. github下载3.2.…

数据洪流时代,开发者这样硬核突围!

随着社会信息化的脚步加快&#xff0c;我们每个人无时无刻都在产生数据&#xff1a;刷抖音、聊微信、视频会议、点外卖……拇指轻轻一点击的背后&#xff0c;将引发意想不到的数据洪流&#xff1a;据 IDC 发布《数据时代 2025》的报告显示&#xff0c;全球每年产生的数据将从 2…

机器学习在交通标志检测与精细分类中的应用

导读 数据对于地图来说十分重要&#xff0c;没有数据&#xff0c;就没有地图服务。用户在使用地图服务时&#xff0c;不太会想到数据就像冰山一样&#xff0c;用户可见只是最直接、最显性的产品功能部分&#xff0c;而支撑显性部分所需要的根基&#xff0c;往往更庞大。 地图…

Kubenetes 监控一站式解决方案:阿里云 Prometheus 免费公测

Prometheus是目前企业级云原生应用的首选开源监控工具。作为云原生计算基金会&#xff08;CNCF&#xff09;第二个毕业的项目&#xff08;第一个是Kubernetes&#xff09;&#xff0c;Prometheus对K8s容器环境有很好的原生支持。近日刚刚发布免费公测的阿里云Prometheus&#x…

SpringBoot2.x Nacos RocketMQ 事务消息

需求背景&#xff1a; 现在有内容中心&#xff08;content-center&#xff09;和 用户中心&#xff08;user-center&#xff09;2个微服务&#xff0c;请求内容中心&#xff0c;发送消息给用户中心&#xff0c;完成为指定用户添加积分操作。 文章目录一、准备工作1. 版本对照2.…