Less is More — Serverless
Serverless 一度被追捧为云计算的未来。Gartner 发布报告称,2020 年全球将有 20% 的企业部署 Serverless 架构。
先让我们回顾一下,滚滚历史洪流中,IT 架构是如何演进的?
早期,公司要买机器和带宽,建机房,以及养着一票设备运维人员。早期的云服务商,于是就提供物理机托管服务,来释放客户对硬件的运维。后来,虚拟化的发展使得云服务商开始提供云主机的租用服务,客户通过云上的 IaaS 系统直接管理虚拟机资源。云主机在操作系统层面仍然需要大量的安全补丁和运维工作。
接着,随着容器技术的不断发展和普及,云服务商提供标准的运行环境,客户直接在 PaaS 平台运行应用容器,维护成本进一步得到降低。在大规模的集群中,用户需要考虑容器调度和管理的问题,容器之间网络打通等问题也都是容器平台的基础。
现在,无服务 Serverless 则希望再进一步减少用户运维成本,提供标准的弹性能力、负载均衡方案,应用发布策略等,用户已无需关心服务架构和虚拟机,应用开发者可以更加专注于应用业务逻辑。
01
“无服务器” 真的
不需要服务器吗?
所谓 “无服务器”,并不是不再需要服务器硬件。而是用户无须关心底层服务器的状态、资源(比如 CPU、内存、磁盘及网络)及数量。软件所需的资源由底层的云平台动态提供。Serverless 代表的是用户不要关心运营维护问题,解放研发人员,把部署、流量和弹性相关的问题都交给自动化运维。
Serverless 不是具体的一个编程框架,也不是一个类库或者工具。简单来说,Serverless 是一种软件系统架构的思想方法。
在基于云的环境中,Serverless 环境中部署的应用,一般通过外部事件或触发器(比如 HTTP 请求)触发后才真正执行。所以它还具有按使用付费的特点,降低了成本。目不单单云上有 Serverless,在本地私有化环境中,也有许多商业和开源的选择,可以提供不同形式的本地无服务器服务。
02
Serverless 的优势
减少成本:低运维管理,无须关注支撑应用服务底层运行环境的运维
快速创新:业务部署和研发的周期缩短了,可以更聚焦逻辑开发
按需使用:低成本省开支,即开即用
灵活弹性:业务可以根据配置的条件灵活调配资源
03
什么场景适合
Serverless
现在 Serverless 多在哪些场景下落地呢?常见以下几种:
各类 Web 后端服务。特别是移动互联网的后端,比如小程序等利用率低的长尾应用。
实时数据流处理:视频转码和图片转格式、处理任务,日志分析压缩
人工智能场景:数据传输和分析
IoT 后端服务:告警短信推送、设备状态等
CI/CD 场景
如下是一个调查中,关于 Serverless 落地的应用场景的比例:
比例 | 场景 |
---|---|
32% | Web 和 API 服务器 |
21% | 数据处理:比如批量 ETL |
17% | 集成第三方服务 |
16% | 内部工具链 |
8% | 聊天机器人 |
6% | IoT 物联网 |
场景一:人工智能场景(数据传输及分析)
在工业互联网(IoT)、汽车行业(车联网)、金融领域中,当终端设备在进行相互通信时,会产生大量数据。因此,在边缘终端采集数据后,传输到 Serverless 云端进行训练,得出训练结果后进行返回到边缘节点,边缘节点会给训练后的结果,进行快速响应。比如企业的人脸识别系统和设备。摄像头既可以收集人脸识别数据,同时可以根据训练好的模型进行人脸识别判断。收集信息后,摄像头上传人脸图片到 DX- Serverless 服务器上进行训练。服务器训练后得出训练模型,之后同步最新的模型到终端摄像头上,那么边缘摄像头可自动识别新增加的员工,并自动开门。还有一些访客场景,当朋友、面试者来访时,人事可以在访客来之前把访客照片上传到服务器,这样的话访客可以被自动识别,方便地进入访客区域或者指定面试会议室。
如上图所示,各种终端设备负载信息和数据的收集并上传到云端,这些数据会被放入到云端的人工智能训练任务队列中,由 Serverless 服务训练得出训练模型,最后将训练模型分发到终端上更精确的进行智能判断和分析。
场景二:实时数据流处理(视频转码或图片转格式)
在大文件上传和视频上传场景下,网站都需要实时创建缩略图,转换视频成为各种格式方便不同平台播放,建立文件索引方便搜索查询。在国内,通常还会用审核以及鉴定视频内容等操作。越来越多的网站有 AI 训练会对视频进行分类和自动添加标签等。比如用户上传一个视频,网站视频转码需要进行 1080p 转码、720p 转码、 480p 转码、音频转码、封面截图(通常需要 2-3 个尺寸分别用于不同尺寸的缩略图列表,以及初始画面等)。以上操作都是非常适合使用无服务来进行部署,因为这些场景通常都是在用户上传文件后才需要进行的,同时转码等操作可以有一定的时延,此外,这些场景的高峰流量和日常流量都会有很大差距。
04
私有化 Serverless
部署的意义
众多公有云已经提供了 Serverless 的功能。为什么很多企业还在规划在内部部署 Serverless ?
避免供应商锁定:常被人担忧的如 AWS 的 Lambda 对代码耦合性所带来的云迁移成本。其实也需要考虑云厂商提供的“易用”的“基础设施”(API 网关、事件触发器、云存储)所带来的“架构锁定”和耦合。还有“数据绑定”:云上比如数据库服务、认证服务、支付服务等,也可能会把用户的业务数据、用户数据、支付数据绑定在云厂商之上。
提高基础架构效率:在本地环境下,可以利用 VM 或者容器/Kubernetes 的方式,进行业务复用,提供底层的物理机利用率。毕竟 Serverless “按需启动”的特点,有时可能造成机器“闲时闲死”的浪费状态。
降低安全风险:对于用户的敏感数据,基于云的解决方案总不是首选。并且在多租户的云环境下,任何可能的漏洞和安全风险,都会让数据有泄漏的可能。
架构可控度:公有云具备节约管理成本的优点,但高级用户自己对技术架构的控制力却被大大弱化。
整合性:对于某些业务,其周围的配合模块都是在私有化部署,这时,单单把 Serverless 的部分放到公有云,反而增加整合的难度。另外,在国内 IT 环境下,私有化环境对传统应用的改造也更容易推行下去。
成本:很多企业在业务初期使用公有云,但是在业务发展中,逐步发现公有云成本慢慢不再是最优。即使在公有云,部署的成本也根据应用程序的复杂性和不同特点而有所不同。
相比之下,在私有环境中构建 Serverless 平台就没有那么多顾虑。归功于成熟度很高的容器技术和容器云平台技术,目前已经能够在私有云环境中实现 Serverless 了。
05
基于容器的 Serverless
的好处
目前公有云上主流的 Serverless/FaaS 框架,如 AWS Lambda、IBM OpenWhisk、Iron.io、阿里云函数计算分析来看,其底层的也是多采用容器或类容器的技术来实现的。
以函数为粒度的 Serverless(FaaS)看似非常美好,但是这种函数计算不能解决企业的全部问题。它要求业务以函数为粒度进行拆分、函数之间只通过接口通讯,并且要求高度完成无状态化。对于复杂的业务系统来说,微服务改造、容器化改造都才刚完成,到达函数化改造还道路漫长。而且即便完成了函数化改造,现有的 FaaS 平台对大规模函数协作、编排和管理技术也还不够成熟,很难完全投入生产。
正在容器化道路上的用户,是否需要出门右转、另起炉灶,再一起痛苦地对业务做函数化改造么?能否利用容器的标准、Kubernetes 的编排优势,同时也能 Serverless 带来的低成本和高弹性福利呢?其实这两者并不矛盾。从 PaaS 到 FaaS ,是否需要对应用进行改造?开发语言是否需要变化?移植上 FaaS 成本会不会很大?往往这些是大家会比较顾虑的点。
如 DaoCloud Serverless 平台,就是基于容器的 Serverless。容器性的工作负载不只是 Function, 支持任何编程语言。用户仍然是交付自己熟悉的标准交付件-镜像。
用容器实现的 Serverless,用户可以有如下的好处:
支持任何语言,任何库,任何二进制文件
通过镜像进行封装部署,解决平台锁定问题云原生开发体验,应用容器化部署,统一开发体验
不同于普通的 FaaS,容器化后可以适应各种无服务情况。容器化意味着 可移植,Kubernetes 编排的标准化
日志记录及监控功能
可观测性,丰富的监控指标
06
DX Serverless 发布
目前基于容器的 DX(Daocloud Digital-X) Serverless 已经随着 DCE 4.0 进行发布。并且 DX Serverless 包含有如下特性:
便捷部署
如上文所述,Serverless 旨在帮助开发人员无需关心底层服务器,只需专注于业务应用开发及构建,提供无运维、无服务器体验。DX Serverless 提供简单的命令行和图形界面快速部署并管理服务,进一步提升开发者体验,降低部署管理成本。
自动扩缩容
在 Web 后端服务对外提供访问时,需要应对偶发大流量访问场景,但在 PaaS 平台上,弹性伸缩规则需要手动配置,并且配置规则较复杂。DX Serverless 服务可根据流量自动扩缩容,无需手动配置策略及干预,当访问流量激增时,快速扩容;当流量为 0 时,支持自动将容器数量缩减为 0 ,极大节省资源。
流量切分
业务应用在发布新版本时,需要规避新业务应用版本不可用带来的风险,需要在不停用老版本的前提下,部署新版本并进行测试,当测试无风险后,切换全部流量。DX Serverless 天然具备流量切分能力,可对同一 Serverless 服务设置不同的流量比例,操作便捷易用。并且可以结合指标监控进行版本流量监控。
计量能力
DX Serverless 为您提供计费的计量接口,可基于计量数据进行收费。在 PaaS 到 FaaS 转变过程中,往往客户会有所考虑:1 )移植的成本和代价 ; 2 )是否上了 FaaS 平台后会存在平台锁定情况。目前 DX Serverless 实现云原生化:
应用容器化实现,统一云原生平台开发体验,适配各种无服务化场景。
搭建在 DaoCloud 云原生 PaaS 平台上(DCE)
支持 Kubernetes 标准 OpenAPI
无需管理及配置 HPA,实现自动扩缩容
无需管理及配置 Istio,实现流量切分
应用无服务器化后无需担心应用改造和移植成本,以及平台锁定问题。
07
Serverless 会终结
Kubernetes 吗?
以前常有用户问,想享受 Kubernetes 的技术红利,但是苦恼于 Kubernetes 的学习成本:容器化、部署 YAML、配置负载均衡和灰度发布策略、弹性策略,健康检查容器化、部署 YAML、配置负载均衡和灰度发布策略、弹性策略,健康检查. 对于一个应用开发来说,这些问题看似和应用开发本身毫不相关,他们不得不去学习 Kubernetes 并去探索应用的部署最佳实践。应用开发者一定要成为 Kubernetes 专家才能在 Kubernetes 上部署应用吗?当然不是,Serverless 可以弥补这里的差距。应用开发提供应用容器,完成业务逻辑;Serverless 提供发布和弹性策略配置,以及标准的健康检查。
但是 Serverless 能够取代 Kubernetes 吗?答案又是否定的,无服务框架依然需要一个调度平台,而 Kubernetes 无疑是最佳选择。Serverless 并不会取代 Kubernetes,而是站在 Kubernetes 肩膀上, 为应用提供更简洁的部署方式和自动化运维能力。由于 Serverless 技术目前还处于起步阶段,就像目前 DX Serverless 平台是基于 Kubernetes 的实现的。技术上是延续的,一脉相承。
目前 Serverless 更适合面向简单场景的开放,简单应用的上云在 Serverless 场景会更加方便,甚至可以做到 0 成本,无需改造的地步。Kubernetes 在私有化部署中,通过更多灵活性的强大的功能,带来更多的可能性。
对于没有 Kubernetes 基础的用户来说,Serverless 可以帮助你成为应用运维专家,为您的应用提供天然的流量管理和弹性能力。Serverless 的目标是解放开发和运维复杂度,把流量和弹性相关的问题都交给自动化运维。直接使用 Kubernetes 的研发需要了解和学习相当一部分的运维知识。
在复杂的业务逻辑中,架构师需要借助 Serverless 的事件驱动框架设计更加云原生的应用,对于现有复杂架构的应用的改造仍然是难点。
Serverless 确实是未来几年的技术趋势,它所带来的价值是开发者能够更关注业务逻辑本身,而不是过多的被底层资源和运维工作所困扰。但 Serverless 的前路也不会一路顺风。快跟着 DaoCloud 一起开拓探索吧。
作者简介
Paco Xu.
戴秋萍
DaoCloud 资深产品经理