要讲 Serverless,我们首先要了解传统的单体应用架构是如何一步一步发展到如今火爆的云原生架构的。
十多年前的主流应用架构是单体应用。
随着业务的增长,这种
架构面临两个问题:
1、可用性较低
2、无法承载过大流量
将单体应用同时部署到多台服务器上。
需要人工协调,研发效率低下。
把单体应用拆分成可以独立开发、测试、部署的微服务应用,服务之间通过 API 通讯。
运维要求较高、系统容错、网络延迟、接口调整成本高、重复劳动等。
Serverless架构
根据CNCF的定义,Serverless是指构建和运行不需要服务器管理的应用程序的概念。Serverless的中文含义是“无服务器”,但是它真正的含义是开发者不用过多考虑服务器的问题,而不是完全去除服务器,是依靠第三方资源服务器后端,来执行代码。
Serverless架构可分为Backend as a Service(BaaS)和Functions as a Service(FaaS)两种技术,Serverless是由开发者实现的服务端逻辑运行在无状态的计算容器中,它是由事件触发,完全被第三方管理的。
FaaS(函数即服务,Function as a Service):将函数代码托管给云厂商,以服务形式运行,支持事件触发。代表产品有腾讯云SCF、AWS Lambda等。
BaaS(后端即服务,Backend as a Service):指云平台提供的后端组件整合,开发者无需开发和维护后端服务,通过API/SDK的调用便可获得例如数据存储(对象存储、云数据库、云中间件等)、消息推送、账号管理、地图定位、AI、IoT等能力。
免运维:无需管理基础设施
可以专注业务开发
按量计费:闲时不计费
降低成本
弹性伸缩:峰时自动扩容
无需考虑可用性问题
杨政权
腾讯云 Serverless
中心专家架构师
Serverless 和传统的通用计算平台相比,能够真正做到按用量付费,可以大幅度节省服务器开销和运维成本。
云函数 SCF 是腾讯云 Serverless 产品,在不需要购买虚拟机的情况下,就可执行代码,目前支持所有的主流的编程语言,包括 Node.js、Python、Java 等等,主要有以下几个特点:
1. 节省服务器开销的节约,根据历史经验大概可以节省 10%-20%,具体的收益具体需结合业务场景、使用案例判断。
2. 节省人工运维成本,与 Serverless 节省服务器成本相比,带来更大的价值在于降低人工运维成本。之前大量的保障可用性、可伸缩性的运维工作可以直接托管给云厂商来处理。
Serverless 发展将有两个趋势
一是“Serverless + X”:未来动态伸缩、按量计费的 Serverless 产品矩阵会越来越丰富。
二是“Serverless 作为应用的执行引擎”:由于 Serverless 提供成本、可维护性、可扩展性等方面有巨大优势,Serverless 可以作为支撑 SaaS 等应用的底层驱动和引擎,进一步提升产品自身的竞争力。
不瞋
阿里云高级技术专家
当下 Serverless 的落地场景主要有:
小程序 / Web / Mobile / API 后端服务大规模批处理任务处理基于事件驱动架构的在线应用和离线数据处理运维自动化。
未来,Serverless 将无处不在,并与容器生态融合得更加紧密。同时,Serverless 将通过事件驱动的方式连接云及其生态中的一切,并将持续提高计算密度,实现最佳的性能功耗比和性能价格比。
李啸川
腾讯云 Serverless
技术产品专家
目前 Serverless 在可以预见的阶段内,是计算平台的一个必然的演进方向,也是目前可预见的最终方向。
Serverless 分成两个阶段:第一个阶段是 容器化的 Serverless,再下一个阶段是 FaaS Serverless 的平台。
Serverless首先可以简化运维,能够提供稳定运行环境,支持多场景、弹性伸缩的服务;Serverless还可以按需付费,减少冗余资源的计费,降低成本;通过 Serverless 这种面向事件的编程模式,可以极大地简化架构设计,简化不同规范、不同标准的团队协作。快速地将业务落地,快速投放到市场做验证。
通过将 Serverless 的理念与当前 Serverless 实现的技术特点相结合,Serverless 架构可以适用于各种业务场景。
Web应用
Serverless 架构可以很好地支持各类静态和动态Web应用。如 RESTful API 的各类请求动作(GET、POST、PUT及DELETE等)可以很好地映射成 FaaS 的一个个函数,功能和函数之间能建立良好的对应关系。通过 FaaS 的自动弹性扩展功能,Serverless Web 应用可以很快速地构建出能承载高访问量的站点。
移动互联网
Serverless 应用通过 BaaS 对接后端不同服务而满足业务需求,提高应用开发的效率。前端通过FaaS提供的自动弹性扩展对接移动端的流量,开发者可以更轻松地应对突发的流量增长。在 FaaS 的架构下,应用以函数的形式存在。各个函数逻辑之间相对独立,应用更新变得更容易,使新功能的开发、测试和上线的时间更短。
物联网
物联网(Internet of Things,IoT)应用需要对接各种不同的数量庞大的设备。不同的设备需要持续采集并传送数据至服务端。Serverless 架构可以帮助物联网应用对接不同的数据输入源。
多媒体处理
视频和图片网站需要对用户上传的图片和视频信息进行加工和转换。但是这种多媒体转换的工作并不是无时无刻都在进行的,只有在一些特定事件发生时才需要被执行,比如用户上传或编辑图片和视频时。通过 Serverless 的事件驱动机制,用户可以在特定事件发生时触发处理逻辑,从而节省了空闲时段计算资源的开销,最终降低了运维的成本。
数据及事件流处理
Serverless 可以用于对一些持续不断的事件流和数据流进行实时分析和处理,对事件和数据进行实时的过滤、转换和分析,进而触发下一步的处理。比如,对各类系统的日志或社交媒体信息进行实时分析,针对符合特定特征的关键信息进行记录和告警。
系统集成
Serverless 应用的函数式架构非常适合用于实现系统集成。用户无须像过去一样为了某些简单的集成逻辑而开发和运维一个完整的应用,用户可以更专注于所需的集成逻辑,只编写和集成相关的代码逻辑,而不是一个完整的应用。函数应用的分散式的架构,使得集成逻辑的新增和变更更加灵活。
要讲 Serverless,我们首先要了解传统的单体应用架构是如何一步一步发展到如今火爆的云原生架构的。
支持的编程语言 | 部署方式 | 定价模型和计费因素 | 功能函数触发类型 | 执行时间和并发数 | |
---|---|---|---|---|---|
AWS Lambda | Python、Node.js、Java、C#、Visual Basic、F# | Lambda 控制台配置和部署 | 每月100万个请求和每秒400,000 GB的计算时间(computing time)免费。 | 通过API提供已配置的触发器类型。使用API网关作为API触发器,通过Amazon S3作为基于文件的触发器,以及通过DynamoDB来执行动态触发。 | 并发数为1,000个,其最长执行时间为15分钟。 |
Azure Functions | JavaScript、Node.js、C#、F#、Python、PHP、Bash、Batch、Powershell | 外部包 URL、压缩部署、Docker 容器、Web 部署、源代码管理、本地 Git等 | 提供免费的套餐 | 通过API提供已配置的触发器类型。Azure建议使用其他的Microsoft服务、Azure事件中心和Azure存储,来实现Web API触发和计划性调用。 | 通过API提供已配置的触发器类型。Azure建议使用其他的Microsoft服务、Azure事件中心和Azure存储,来实现Web API触发和计划性调用。 |
腾讯云SCF | 主流编程语言和自定义运行环境 Python、Node.js、PHP、Golang、Java 及 Custom Runtime;目前SCF已经支持通过容器镜像的方式启动应用 | 支持控制台部署,命令行部署,SDK/API部署,Web IDE直接部署以及镜像部署 | 支持按1ms时间粒度计费;每月免费额度:100万次函数调用,40万GBs资源使用量 | 支持事件触发与 HTTP 请求触发两种触发模式;Web Function支持原生的Socket监听的方式触发,改造成本更低 | 默认最大并发:默认可支持1,000并发, 可选择使用预置并发进行预热,降低冷启动时间;首创异步执行模式,解锁长时重计算,可支持长达24小时的计算任务;默认账号的地域级别扩容速度为每分钟可500个函数实例,可通过工单申请提升以上的配额限制。 |
阿里云FC | Node.js、Python、PHP、Java 等等 | 控制台、Funcraft、VSCode | 每月前100万次函数调用免费。 每月前400,000(GB-秒)函数实例资源使用量免费。 | IoT触发器、表格存储(OTS)触发器、日志服务(SLS)触发器、消息队列(MNS)触发器、内容分发网络(CDN)触发器 | 函数计算一个地域(Region)中按量实例数的上限默认值为300,一个地域可以同时处理的最大请求数为“300×InstanceConcurrency”。 |
企业需要评估现有软件资产及发展目标。如果企业中已经拥有不少云资产,应明确列出现有部署方案、具体使用哪些云服务商以及对应的可用区。
分布全球各地而且对延迟要求严苛的服务,则特别适合部署在多可用区或边缘端点之上。
如果您的企业已经拥有丰富的Kubernetes使用经验,不妨考虑选择Kubernetes的各类开源无服务器平台。但如果没什么Kubernetes经验,最好还是选择原生云FaaS基础设施。
如果企业所构建的无服务器应用程序依赖于云数据库或流媒体服务,则应考虑将它们部署在同一云环境内,最大程度降低应用程序之内各组件间的延迟。但是,这不会对无服务器框架选择造成太大影响。
在大多数情况下,您的应用程序可能与常见用例颇为相似、甚至完全相同。这时候,大家就应认真评测目标无服务器平台的示例和库资源,看看有没有能够拿来就用的参考架构。
事实上,大部分函数即服务系统并不需要编写大量代码:FaaS拥有丰富的可重用代码资源,而且架构本身也经过良好测试及验证。无需大量调试,企业就可以将其化为己用、大大提升工作效率。
腾讯云:全力推进Serverless落地,助力企业加速实现云端创新
通过多年的积累,腾讯云Serverless开发者规模已达百万+、日均资源调用量达亿+GBs、日均调用量达百亿+次,服务行业覆盖IT服务、电商、教育、游戏等行业。
点击查看详情产品、社区、生态,三轮驱动,腾讯云要实现All in Serverless
腾讯云从产品、社区和生态三个方面发力,使得 Serverless产品架构完全可以承担一个企业的全部云计算的需求,实现All in Serverless,必将推动Serverless技术在全球的应用和发展。
点击查看详情云原生赛道,金山云的打法越来越清晰
金山云的Serverless容器服务(Kingsoft Cloud Serverless Kubernetes,KSK),则是一款无服务器的Kubernetes集群产品,以容器和 Kubernetes 为基础提供Serverless 服务。
点击查看详情