随着云计算的深入,Serverless 这种全新的架构模式正在受到越来越多人的关注。通过 Serverless,开发者可以从繁杂的底层基础实施中解放出来,专心聚焦于业务实现,快速铺开业务。
本文整理于蓝诀在 mPaaS 自办沙龙 CodeDay#1 现场分享《支付宝小程序 Serverless 服务架构演进》,聚焦我们对于 Serverless 的思考以及小程序 Serverless 平台的相关操作实践。
作者: 蓝诀,蚂蚁金服前端技术专家。
现场视频(复制到浏览器中打开): https://tech.antfin.com/activities/388/review/726
0
小程序开发现状
在传统模式中,当我们需要去开发一个小程序的时候,我们依旧需要采用像开发传统 App 一样的方式进行业务开发。在整体业务开发中,我们需要多个觉得的协同,大致来说,我们需要如下的一些流程:
小程序的技术开发人员开发小程序端上业务,实现小程序 UI,体验端的交互逻辑等。
后台的技术开发人员需要通过相应的后端语言(Java/Node.JS/C#等)来开发后台业务。这里的后台业务包含登录、权限、数据操作、业务逻辑控制等。
前后端人员开发好逻辑后进行部署联调。
服务部署后,需要运维的人员来处理环境问题、监控、容灾等问题,以确保服务的持续可用。
最后,安全的人员需要为应用制定安全规则,搭配相应的安全处理方案,确保服务的安全可靠,不被恶意攻击。
从以上流程我们能看出,在现有的模式中,我们开发一个小程序的成本其实蛮高的。从两个地方来看,一个是人力成本,一个是资源成本。
在上述模式中,我们一个小程序需要 3-4 个角色的参与才能确保我们的小程序能持续稳定的服务。 这对小规模的小程序或者孵化阶段的小程序来说人员投入是非常大的。
在传统的模式中,为了能让我们的小程序稳定运行起来,我们需要购买大量的资源。最常见的就是 ECS * 2 + RDS + SLB + 域名 + 证书 等,如果我们要做安全控制,还需购买云上的安全设施,比如 ddos 防御等。 这些资源不管我们业务量多大,我们都需要持续付费,对用户来说,这个成本是非常高的。
综上,我们能看出,在传统的模式中,人力成本和资源成本两大投入会成为制约小程序快速布局落地的拦路虎。如果我们在小程序业务中还是使用传统的开发模式,那我们业务的整体赋能将会来的不够经济、快速。
所以,我们需要使用一种更加简单、高效的开发方式,这就是业界现在很火热的 Serverless。 接下来我们来看看什么是 Serverless,我们怎么来实现 Serverless。
1
Serverless 定义
Serverless 是一个现在非常火热的词,每个云厂商都在做自己的 Serverless。那么,什么是 Serverless 呢,让我们先看下面这张图:
首先,我们将我们后台开发中常用的云组件分为三部分:
计算能力是后台服务中最核心的能力,通过计算能力,我们可以将后台代码部署到 (物理机/虚拟机/容器) 等之上,以提供服务能力。当我们采用云上的 虚拟机/容器 等方案部署业务的时候,我们来看看我们会面临什么样的问题:
当我们在云上购买 ecs 等计算资源后,我们拿到的是完全初始化的环境。 为了部署后台服务,我们需要按照我们的后端语言去部署相应的技术环境。比如 Java 需要部署 JRE/Nginx、Nodejs 需要部署 Node/Nginx 等。对于新手来说,这是一个非常耗时的操作,成本也比较高。
当使用独立 ecs 搭建服务的使用,我们为了实现高可用需要复杂的配置。 比如请求层负载均衡配合,数据库多机房备份等等,这同样需要很高的资金和人力成本。
存储是中间件是构建后台系统的必备组件,比如常用的数据存储、文件存储、消息中间件等。这块的使用成本相对计算能力来说相对简单一些,不过我们也会面临数据库优化、数据扩容、cdn 配置等各种问题。
网络和安全是平时开发者最容易忽略的恰恰又是最重要的部分,在网络上,我们需要做好流量的管控、流量的调度。在安全上,我们需要做图片、视频等内容的安全控制,接入层的 ddos 防御等。这不仅需要花费我们大量的资金,还需要专业的人花费大量的精力。
综上,目前的后端基础设施给我们带来了如上的问题,那么我们有没有什么好的解法呢?
对于计算能力:将底层环境、部署、可用性、弹性等各种运维操作进行集成化封装。 统一抽象为 Compute 服务。开发者只需将后台代码提交给 Compute,Compute 即会自动构建、部署、弹性。以此解决环境复杂、高可用成本高等各种计算层问题。
对于存储于中间件: 将各种后端能力进行接口服务化封装,形成 BaaS,开箱即用,无需再关心接入、容灾、扩容等各种问题。
对于网络 & 安全: 这是后台服务的基础默认能力,可直接云化,作为支撑,让开发者无需关心即可享受安全可靠的后台基础设施。
基于上述理念就是 Serverless 的本质。Serverless 通过对后台各种能力的云化封装,让后端能力服务化、接口化,开箱即用。大大缩减了开发者的实现成本,让开发者从原有复杂的基础设施中解脱出来,专心聚焦于业务逻辑。
所以,我们对 Serverless 能得到如下定义:
2
蚂蚁金服小程序 Serverless
基于我们对 Serverless 的理解,我们实现了小程序 Serverless 平台。通过小程序 Serverless, 开发者即可零成本使用如上所述的各种方案。
小程序的一个核心特点就是能通过一个小程序快速布局到多个端上,以便快速吸收各个端上的流量,为业务带来红利。
在传统的模式中,如果我们需要将小程序部署到多个端上,那我们需要基于每个端的登录体系实现认证。一般来说就是需要接入各个平台的 Oauth 能力,然后通过 Oauth 认证来实现自己平台的安全认证,整体的复杂性与成本相对较高。
在小程序 Serverless 中,我们将多端的能力进行了聚合和抽象,形成统一的 API。开发者只需接入统一的 API,即可当小程序运行在支付宝时使用支付宝的认证体系,当小程序运行在淘宝时使用淘宝的认证体系,非常便利和高效。
核心服务能力是小程序 Serverless 提供的核心后端能力,主要分为 BaaS 以及 Compute 两个核心部分。
Storage
在现在的移动互联网中,我们有大量的资源需要使用上传、下载。在传统的模式中,我们需要购买存储、CDN、域名、证书等,然后再使用后端服务进行文件的存取操作。
小程序 Serverless 提供了文件存储的 BaaS 服务,小程序封装好的的 SDK 即可一键实现文件的上传。依托于 Serverless 底层的 CDN 组件,小程序只需将文件投放到 Serverless 平台即可享受 CDN 的加速能力,天然具备高并发能力。
Database
Serverless 基于 MongoDB 提供了数据存储的 BaaS 能力,开发者无需购买数据库、管理数据库、运维数据库,通过 Basement 提供的 SDK 即可快速实现数据操作。如果需要事务支持,也可以通过函数计算访问数据存储服务,实现数据的可靠操作。
【多媒体解决方案】
移动 App 中存在着大量的多媒体文件,包含图片、视频、音频等。根据不同的业务场景,我们需要对多媒体文件进行处理,比如图片压缩、图片水印、视频压缩等。
在原有模式中,实现多媒体文件处理需要安装 C++ 等各种组件,采用 BaaS 化方案可以直接通过 API 方式快速接入,大大提升效率
【安全方案】
在业务中我们有大量安全处理需求,比如需要对用户提交的文本信息进行敏感词扫描,对图片视频进行鉴黄等。大量的识别需要基于机器学习的能力,这对于大多数开发者来说是一个非常复杂的问题。对于这种场景,同样可以采用 BaaS 的方案 API 化,开箱即用
通过前面的介绍以及对 Serverless 中计算能力的分析,针对计算能力,我们可以采用 App Service 的方案来进行抽象。针对前面的各项痛点,我们采用如下方案解决:
将所有的环境部署相关问题进行镜像化封装,实现自动化。从开发者提交代码即可自动化构建,然后根据技术栈自动化部署。这样即可解决环境相关的各种部署问题。
【 高可用】
对于高可用,属于服务平台的技术核心能力。将高可用作为云端自带能力,为上层业务默认具备高可用能力是 Serverless 的核心。
函数计算是轻量级的后端执行单元,可通过 http 触发以及事件触发,我们可以将功能封装成一个个独立的函数计算单元,然后通过不同的请求或者事件串接,以达到业务的解耦和快速迭代。
Serverless 官方提供丰富的业务云函数,用户开箱即用,无需再去处理底层复杂的逻辑。比如我们有一个图片水印的函数,专门负责处理图片的水印,我们在上传文件后,只需触发一下水印函数即可对文件实现水印处理,无需我们在应用里进行复杂的处理逻辑,和业务真正解耦。
3
蚂蚁金服大生态
通过开放平台,小程序可以直接分享到蚂蚁生态带来的红利:开发者可以基于信用来做租借,基于支付来做红包等。在传统的方案中,我们在接入蚂蚁生态时成本较高,需要进行很多安全处理。而在 Serverless 模式下,Serverless 和蚂蚁开放平台进行了打通,用户无需再关心原有复杂的接入方式,无需再关心签名等安全措施,只需通过我们的 Funciton SDK,即可直接调用蚂蚁开放接口,大大缩短研发时间。
活动推荐
往期阅读
《 开篇 | mPaaS 服务端核心组件体系概述 》
《 mPaaS 服务端核心组件体系概述:移动 API 网关 MGS 》
《 蚂蚁金服 mPaaS 服务端核心组件:亿级并发下的移动端到端网络接入架构解析 》
《 CodeHub#1 回顾 | DevOps 前世今生 》
《 支付宝移动端 Hybrid 解决方案探索与实践 | mPaaS 线下沙龙 CodeDay#1 分享实录 》