Serverless 选型:深度解读 Serverless 架构及平台选择

作者 | 悟鹏 阿里巴巴技术专家 导读:本文尝试以日常开发流程为起点,分析开发者在每个阶段要面对的问题,然后组合解决方案,提炼面向 Serverless 的开发模型,并与业界提出的 Serverless 产品形态做对应,为开发者采用 Serverless 架构和服务提供参考。 近两年来,Serverless 概念在开发者中交流的越来越多,主题分享呈现爆发趋势,如在云原生领域颇具影响力 KubeCon&CloudNativeCon 会议中,关于 Serverless 的主题,2018 年有 20 个,到 2019 年增长至 35 个。 在 Serverless 产品层面,从最早的 AWS Lambda,到 Azure Functions、Goolge Functions、Google CloudRun,再到国内阿里云 Serverless Kubernetes、Serverless 应用引擎、函数计算等,面向计算的 Serverless 云上基础设施越来越丰富。 新概念、新产品的产生不是凭空出现,它们诞生之初要解决的是当前问题。随着实践者对问题域的理解越来越清晰和深刻,问题的处理方法也会逐步迭代,更接近问题本质的解决方案也会出现。若不从问题域出发来理解解决方案,容易陷入两个极端,即「它能解决一切问题」和「它太超前了,理解不了」。 从日常迭代看 Serverless

图 1 上图是一个常用的项目迭代模型,其目标是满足客户需求。在这个模型中,项目组通过 被动迭代 满足客户提出的需求,同时逐步深刻理解客户需求的本质,通过 主动迭代 和客户一起采用更好的方案或从根源解决面对的问题。每次的需求反馈会加深对客户需求的理解,提供更满足需求的服务。每次的 bug 反馈会加深对处理方案的理解,提供更稳定的服务。 在模型启动后,日常的核心问题就集中在了 如何加速迭代。 如果想要解决迭代加速的问题,就需要了解有哪些制约因素,有的放矢。下述是从开发视角看到的开发模型:

图 2 虽然在实际应用中会采用不同的开发语言和架构,但在每个阶段均有通用的问题,如:

图3 除了要解决上述通用问题,还需要提供标准化的方案,降低开发者的学习和使用成本,缩短从想法到上线的时间。 若将上述过程中不同阶段花费的时间做个分析,在项目整个生命周期中会发现:

  • 部署&运维 占用的时间和精力,会远大于开发&测试

  • 通用逻辑占用的时间和精力,会接近甚至超过业务逻辑

为了加速迭代,需要依次解决占用时间和精力多的部分,如图 4 所示:

图 4 从左至右,通过下放不同层次的运维工作,降低「部署&运维」成本。在降低了运维工作成本后,在「通用逻辑」层面降低成本。二者结合起来,在迭代过程中更深入聚焦业务。该过程也是从 Cloud Hosting 到 Cloud Native 的过程,充分享受云原生带来的技术红利。 由于软件设计架构和部署架构与当时环境耦合度高,面对新的理念和服务、产品,存量应用迭代过程中采用的技术需要有相应调整,即开发和部署方式需要有一定的改造。对于新应用进行开发和部署时,应用新的理念有一定的学习和实践成本。 故上述过程不能一蹴而就,需要根据业务当前的痛点优先级来选择匹配的服务和产品,并根据未来的规划提前进行技术预研,在不同的阶段选择适合的服务和产品。 Serverless 简介 维基百科对于 Serverless 有较为完备的定义: Serverless computing is a cloud computing execution model in which the cloud provider runs the server, and dynamically manages the allocation of machine resources. Pricing is based on the actual amount of resources consumed by an application, rather than on pre-purchased units of capacity. 无服务器计算是一种云计算执行模型,云厂商提供程序运行的服务器,并动态管理机器资源的分配。云厂商基于应用程序消耗的实际资源量进行定价,而不是用户预先购买的容量。 在这种计算模型下,会给用户带来如下收益: Serverless computing can simplify the process of deploying code into production. Scaling, capacity planning and maintenance operations may be hidden from the developer or operator. Serverless code can be used in conjunction with code deployed in traditional styles, such as microservices. Alternatively, applications can be written to be purely serverless and use no provisioned servers at all. 无服务器计算可以简化代码部署到生产环境的过程,且扩缩容、容量规划和运维操作可以做到对开发人员透明化。无服务器代码可以与以传统方式(如微服务)部署的代码结合使用,或者,开发者可以按照无服务器计算的模式编写应用,完全不用提前配置服务器. 概念本质上是对问题域的抽象,是对问题域特征的总结。通过特征来理解概念,可以避免注意力集中在文字描述而非概念的价值本身。 站在用户角度,我们可以抽象出 Serverless 的如下特征:

  • 免运维 (服务器运维、容量管理、弹性伸缩等)

  • 按资源的使用量付费

在一定规模的公司中,若严格区分开发和运维的角色,这种计算形态其实是已经存在的,并非全新的事物。但目前的技术趋势,是期望借助云的规模和技术红利优势,通过上云来降低业务在技术侧的成本,并通过技术红利反哺业务。故业界对于 Serverless 的讨论,注意力是集中在云上的服务和产品所体现的 Serverless 能力。 Serverless 开发模型 Martin Fowler 的这篇文章站在架构的角度,对 Serverless 开发模型做了充分的阐述,这里做个简单的总结,核心围绕三点:

  • Event-driven 开发模型

  • 自动弹性伸缩

  • OpenAPI

Serverless 开发采用 Event-driven 模型,围绕 HTTP/HTTPS 请求、时间、消息等 Event 的生产和响应进行架构设计。在这样的模型中,Event 的生产、处理流程是核心,通过 Event 驱动整个服务流程,注意力集中在整个处理流程。对业务理解越深刻,Event 类型和业务会越匹配,技术和业务的相互促进作用会越有效。 Event-driven 模型,使得 服务常驻 这种理念从必选项转变为可选项,可以更好应对业务请求量的变化,如自动弹性伸缩。同时服务非常驻,可以降低所需的资源成本和维护成本,加速项目迭代。 通过文章的两幅图可以更直观理解:

图片上传失败

​重试

图 5 图 5 是当前常见的开发模型,Click Processor 服务是个常驻服务,响应来自用户的所有点击请求。生产环境中,通常会多实例部署,常驻 是个关键特征,日常的运维重点在确保常驻服务的稳定性方面。

图 6 图 6 是 Event-driven 开发模型,关注重心前移,集中在 Event 的产生和响应方面,响应服务是否常驻是个可选项。 Serverless 在概念上与 PaaS (Platform as a Service)、CaaS (Container as a Service) 的区别,重点是在是否将 自动弹性伸缩 作为概念诞生之初的核心特征。 结合 Event-driven 的开发模型,Serverless 场景中自动弹性伸缩需要对开发者透明度加深,开发者开发过程对处理能力的关注重心从静态转为动态,更好应对上线后业务请求量的不确定性。 在开发方面,交付时可以采用镜像,也可以采用语言层面的打包 (如 Java 中的 war/jar) ,由平台负责运行时相关的工作。还可以更进一步,采用 FaaS 的理念,依托于平台或标准化 FaaS 解决方案,只提供业务逻辑函数,由平台负责请求入口、请求调用和自动弹性伸缩等运行时事宜。 不论哪种交付方式,在云上均可以使用 BaaS 的理念,将部分逻辑通过云平台或第三方的 OpenAPI 实现,如权限管理、中间件管理等,开发过程中注意力更加聚焦在业务层面。 Serverless 服务模型 Serverless 服务模型关注云厂商对于 Serverless 计算形态的支持,不同的服务和产品形态主要差异点主要集中在对 Serverless 特征的理解和满足程度方面:

  • 免运维 (服务器运维、容量管理、弹性伸缩等)

  • 按资源的使用量付费

在免运维维度,最基本的是免去服务器运维成本,开发者可以按量申请资源。在容量管理、弹性伸缩、流量管理、日志/监控/告警等常规的运维层面,不同的服务和产品会根据自身定位、目标客户特征等,有侧重采用适合的方式来满足。 在计费形态方面,云厂商一方面会根据自身定位确定收费维度,如资源、请求量等,一方面也会根据当前的技术能力确定收费的粒度。 通过上述分析可知,云厂商不同 Serverless 服务模型不是静态的,会伴随产品定位、目标客户特征、技术能力等持续迭代,和客户共同成长。 Serverless 服务模型需要满足实际需求,再回到图 4,云厂商的 Serverless 服务模型可以分为如下几类:

  • 资源实例平台

  • 调度平台

  • 应用管理平台

  • 业务逻辑管理平台

综合起来,即:

图7 业界 Serverless 产品 目前国内外云厂商均提供有不同维度的 Serverless 产品,如下做个简单的总结:

图 8 资源实例平台 国外 AWS Fargate / Azure ACI、国内阿里云 ECI / 华为 CCI 影响力较大,对用户提供容器组服务。容器组作为一个整体,提供类似 Kubernetes 中 Pod 的概念。用户可以通过 OpenAPI 调用直接创建容器组,不用在部署服务前进行服务器的购买、配置等工作,下放资源相关的容量管理运维工作。用户可以将资源实例平台作为容量足够大的资源池使用,在容器组级别进行细粒度的资源申请,配合动态扩缩容进行应用级别的容量管理。 一般在生产环境中,用户通常不会直接使用此类资源管理服务,而是借助应用编排服务,将这类服务透明化,关注重点放在应用编排维度。 调度平台 Kubernetes 是容器调度的事实标准,国外 AWS EKS、国内阿里云 Serverless Kubernetes 等一方面托管 Kubernetes Master 组件,一方面借助资源管理服务,如 VirtualKubelet + AWS Fargate 或 VirtualKubelet + 阿里云 ECI,提供 Kubernetes Node 层服务。 对于期望直接使用 Kubernetes 能力,同时希望低成本运维 Kubernetes、不保有资源池的用户,此类产品比较契合需求。 应用管理平台 国外 Google GAE / CloudRun、国内阿里云 Serverless 应用引擎等进一步将运维工作服务化,如发布管理 (打包/灰度/分批/回滚/版本控制等)、日志/监控/告警、流量管理、弹性伸缩等,用户可以进一步专注在业务需求,低成本运维。 对于期望零成本改造存量应用、低学习成本使用,又期望最大限度减少运维工作的用户,此类平台与需求匹配度较高。但由于应用管理层面的运维工作在业界暂无标准化方案,不同的项目会存在个性化需求,故采用此类产品过程中需要加强沟通,不断向平台反馈,通过共建的方式磨合 Serverless 平台和自身业务。 业务逻辑管理平台 国外 AWS Lambda / Azure Functions / Google Functions、国内阿里云函数计算 / 腾讯云云函数 / 华为函数工作流等在应用管理的基础上,进一步将开发过程中的通用逻辑透明化,用户仅用关心业务逻辑的实现。这个过程可以类比开发过程中的单元测试编写过程,输入、输出是通用的,仅在处理逻辑存在差异。这类 Serverless 产品也是业界讨论最多的形态,代表业界对于理想的开发流程的抽象,可以进一步加快迭代流程,缩短想法到上线的时间。这类 Serverless 产品与云平台其他类型的产品集成更紧密,以 BaaS 形态使用云平台的服务实现通用逻辑,如存储、缓存等,对云平台产品丰富度有一定隐性需求。 处理过程对外部依赖较少或偏计算类的场景,如前端、多媒体处理处理等,采用此类 Serverless 产品学习和使用成本相对低,易于上手。随着服务、组件的抽象程度越来越高,会有越来越多的业务场景适用,用户的运维工作会更为透明化,同时开发过程中可以直接享受到业界的最佳实践,服务的稳定性、性能、吞吐等方面借助平台的能力做到最大化。 选型 综上,用户在进行 Serverless 产品选型时,需要先整理当前业务技术所处的阶段和痛点,确定对云上方案的需求,然后再根据云厂商的产品形态做对应,选择适合当前阶段的服务和云产品。 该对应关系重点是了解云产品定位是否可以长期满足业务需求,如:

  • 业务技术目前所处的阶段是否与云产品定位匹配

  • 业务快速迭代是否会受限于云产品自身的发展

  • 云产品的稳定如何

  • 云产品是否可以持续为业务带来技术红利

同时还需要了解云产品是否可以伴随业务发展,重点是业务对技术的需求中,哪些是云产品层面由于定位带来的限制,哪些是当前云产品的技术实现带来的限制。 若是云产品定位带来的限制,那么就需要考虑使用和业务需求定位更匹配的云产品。若是当前技术实现的限制,那么有机会和云产品共同成长,及时给云产品反馈,使得云产品可以更好满足自身的业务需求。 除此之外,业务层面还需关注云厂商自身服务类型的丰富性,云厂商自身服务越丰富,规模越大,越会产生规模效应,进而给业务带来更丰富的技术红利和成本优势。 幸运的是,云产品通常都会有丰富的文档,也有相应的用户群,可以直面产品经理和研发,及时反馈需求,以共建的理念协同发展。 小结 Serverless 本质上是一个问题域,将研发流程中非业务核心却影响业务迭代的问题抽象化,并提出相应的解决方案。该概念不是突然产生的,大家或多或少已经将其理念应用到日常的工作中 ,只是伴随着云计算浪潮,云上的 Serverless 服务和产品更系统、更具有竞争力,可以基于规模优势和丰富的产品线,面对问题域持续提供更满足业务需求的服务。 Serverless 理念不仅在中心化的云端蓬勃发展,目前也逐步在边缘端发展,使得服务的运行更加广泛化,更好满足业务自身的客户,提供更低延时、稳定的服务。 本篇文章尝试从项目、开发的日常流程出发,协助读者从日常实践角度来理解 Serverless 概念,根据所处的阶段选择适合的 Serverless 服务和产品。同时作者本人在阿里云 Serverless 应用引擎中负责底层研发工作,尝试从云产品内部的视角,传递云产品和用户共建的观念,通过协同更好传递和创造价值。 References

  • 维基百科对 Serverless 较为完备的定义

  • Serverless Architectures

  • Event-driven 模型

  • BaaS

  • 从 DevOps 到 NoOps,Serverless 技术的落地方式探讨

  • 阿里云弹性容器实例 ECI

  • 阿里云容器服务 ACK

  • 阿里云 Serverless Kubernetes(ASK)

  • 阿里云 Serverless 应用引擎 (SAE)

  • 阿里云函数计算

  • 阿里云 Serverless 工作流

  • Cloud Programming Simplified: A Berkeley View on Serverless Computing

课程推荐 为了更多开发者能够享受到 Serverless 带来的红利,这一次,我们集结了 10+ 位阿里巴巴 Serverless 领域技术专家,打造出最适合开发者入门的 Serverless 公开课,让你即学即用,轻松拥抱云计算的新范式——Serverless。 点击即可免费观看课程:https://developer.aliyun.com/learning/roadmap/serverless “阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的公众号。”

原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

CSDN 星城大巡礼,长沙“科技之星”年度企业评选正式开启

2020年,长沙市委主要领导发出“软件产业再出发”的号召,颁布了软件三年行动计划。今年5月,CSDN 作为专业的 IT 社区,与长沙高新区签约,将全国总部落户长沙,这一战略决策,让CSDN与长沙的联结进一…

企业微信H5_集成消息解密类,消息推送Get及Post回调处理

文章目录一、 验证URL有效性1. 阅读文档2. 文档分析3. 加解密方案说明4. 下载加解密算法5. 案例分析二、实战集成2.1. 工具类拷贝2.2. 依赖引入2.3. 案例1集成2.4. 参数处理2.5. 重启项目2.6. 验证URL有效性2.7. 验证三、消息接收与处理3.1. 文档阅读3.2. 案例2拷贝3.3. 参数处…

新一代高效Git协同模型AGit-Flow详解

【以下为分享实录,有删节】 Git工作流概述及AGit-Flow的优势 目前,Git已成为源代码管理的标准和基础设施。“为什么Git能这么成功”?Git的创建者Linux在Git十周年的一次采访中,道出了其中的奥秘: The big thing abo…

云原生人物志|APISIX温铭:让API网关“666”

云原生已无处不在,《云原生人物志》是CSDN重磅推出的系列原创采访,我们关注云原生中每一个技术人、公司的身影。知微见著,窥见云原生价值与趋势。 作者 | 宋慧 出品 | CSDN云计算 头图 | 付费下载于IC Photo 第一期,我们采访了唯…

xshell和Xftp连接Linux

xshell和Xftp连接Linux 简单介绍下这两种工具: Xshell :远程连接linux,执行命令行; Xftp :远程连接linux,可视化的实现windows和linux之间的文件传输; 2.关于如何获知linux的ip地址 在虚拟机中登录用户,输入用户名,密码: 此处注意一点:注意区分密码的大小写!!!,因为你在设置密…

企业微信_客户联系,获取客户及客户群列表及详情

文章目录一、调试接口1. 阅读文档2. 权限配置3. 指定应用二、POSTMAN调试接口2.1. 获取配置了客户联系功能的成员列表2.2. 获取客户列表2.3. 获取客户详情2.4. 获取客户群列表2.5. 获取客户群详情三、实战演练代码拆解3.1. 获取配置了客户联系功能的成员列表3.2. 获取客户列表3…

Flink 与 Hive 的磨合期

有不少读者反馈,参考上篇文章《Hive 终于等来了 Flink》部署 Flink 并集成 Hive 时,出现一些 bug 以及兼容性等问题。虽已等来,却未可用。所以笔者增加了这一篇文章,作为姊妹篇。 回顾 在上篇文章中,笔者使用的 CDH 版…

使用arthas排查cpu飙高问题

文章目录一1. 下载arthas2. 启动3. 选择指定jvm进程4. 筛选线程5. 日志分析一 官方文档:https://arthas.aliyun.com/doc 1. 下载arthas curl -O https://arthas.aliyun.com/arthas-boot.jar2. 启动 直接用java -jar的方式启动: java -jar arthas-bo…

oracle 数据库 字符串函数

oracle 数据库 字符串函数 介绍oracle对字符串的操作函数,如图所示,测试字段为:STUDENT 表的 STUNAME 字段 ps:oracle字符串索引从1开始 1.定位索引函数:instr() instr(str,char,begin,n) str:源字符串 char:目标字…

jvm如何排查生产环境cpu飙高的问题

文章目录一、生产环境 cpu 飙高产生的原因?1. CAS 自旋没有控制自旋次数2. 死循环3. 阿里云 Redis 被注入挖矿程序4. 服务器被 DDOS 工具攻击二、windows环境下如何排查cpu飙高问题2.1. 任务管理器2.2. jvisualvm三、环境下如何排查cpu飙高问题3.1. 监控命令3.2. 使…

云原生人物志|华为云CTO张宇昕:云原生已经进入深水区

云原生已无处不在,《云原生人物志》是CSDN重磅推出的系列原创采访,我们关注云原生中每一个技术人、公司的身影。知微见著,窥见云原生价值与趋势。 作者 | 宋慧 出品 | CSDN云计算 头图 | 华为云网站 云原生成为云计算领域当之无愧的最热门技…

开箱即用,Knative 给您极致的容器 Serverless 体验

作者 | 冬岛 阿里巴巴技术专家 导读:托管 Knative 开箱即用,您不需要为这些常驻实例付出任何成本。结合 SLB 云产品提供 Gateway 的能力以及基于突发性能型实例的保留规格功能,极大的节省您的 IaaS 开支,您支付的每一分钱都没有浪…

oracle 11g 数据库cmd修改用户名密码及创建用户

oracle 11g 数据库cmd修改用户名密码及创建用户1. 数据库oracle 11g cmd命令修改用户名和密码1.1. 前言1.2. cmd窗口登录oracle1.3. 更改system用户的密码1.4. 测试修改成果2. 创建新用户并赋予权限2.1. cmd窗口登录oracle2.2.创建用户2.3.分配权限2.4.oracle用户权限等级1. 数…

全国交通智慧升级,阿里云视频上云打造高速公路“视觉中枢”

2019年底,交通运输部办公厅发布《全国高速公路视频联网监测工作实施方案》和《全国高速公路视频联网技术要求》,全面加快推进可视、可测、可控、可服务的高速公路运行监测体系建设。2020年底,基本建立全国高速公路视频联网监测管理机制和制度…

mysql 与 redis 如何保证数据一致性问题 ?

1.先更新 mysql 数据, 再手动清除 Redis 缓存 , 最后重新查询最新的数据同步到Redis中,保证最终一致性。 2.更新 mysql 数据, 在采用 mq 异步的形式 同步数据到 Redis 中 。 缺点: 延迟概率就比较大 优点&#xff1a…

赠书 | 隐私计算:让你的数据信息不再“裸奔”

来源 | 人民数字FINTECH责编 | 晋兆雨头图 | 付费下载于视觉中国*文末有赠书福利在互联网时代,数据隐私泄露到底有多严重?近日,微博大V袁启聪发布微博称,两周前接到一个私人手机号码来电,来电者自称是招商银行的&#…

阿里云开放平台微前端方案的沙箱实现

导读 微前端已经成为前端领域如今比较火爆的话题,关于微前端价值的讨论,可以参考克军的《拥抱云时代的前端开发框架——微前端》。微前端在技术方面,有一个始终绕不过去话题就是前端沙箱。本篇具体探讨一下,在微前端领域如何实现前…

idea全局搜索快捷鍵ctrl+shift+F失效

idea全局搜索快捷鍵ctrlshiftF失效 1.确认是否修改了默认的快捷键配置: file-settings-keymap,在右边的放大镜中搜索find in Path 确认快捷键设置的是:ctrlshiftF 2.快捷键冲突(常见的就是和输入法快捷键冲突) 以我的win10自带…

生产环境遇到难题,你是如何解决的?

文章目录1. 生产环境 cpu 飙高产生的原因?2. 生产环境如何排查cpu 飙高问题?3. 生产环境遇到了报错,你是如何定位解决的呢?4. 调用接口如果服务器端一直没有响应怎么解决?5. 你在开发过程中,遇到哪些难题&a…

OpenKruise v0.5.0 版本发布,支持无损的流式分批发布策略

作者 | 酒祝 阿里云技术专家 导读:OpenKruise 是阿里云开源的大规模应用自动化管理引擎,在功能上对标了 Kubernetes 原生的 Deployment/StatefulSet 等控制器,但 OpenKruise 提供了更多的增强功能如 优雅原地升级、发布优先级/打散策略、多可…