小程序 Serverless: 解放生产力,驱动研发效能提升
**摘要**:以“数字金融新原力(The New Force of Digital Finance)”为主题,蚂蚁金服ATEC城市峰会于2019年1月4日于上海如期举办。ATEC移动开发专场分论坛上,蚂蚁金服前端技术专家袁收纳带来了主题为《小程序 Serverless: 解放生产力,驱动研发效能提升》的精彩分享。
演讲中,袁收纳分享了蚂蚁金服Serverless架构的技术特点及设计框架。对比目前小程序的传统开发流程,展示了Serverless架构高效简洁的优势。
![在这里插入图片描述](https://file.lsjlt.com/upload/202306/02/hjwxgbsztkf.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)
**袁收纳 蚂蚁金服前端技术专家**
## 小程序开发现状
首先来看一下在目前小程序开发的情况下应该如何处理。
![在这里插入图片描述](https://file.lsjlt.com/upload/202306/02/dtz25rjyec0.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)
在传统模式中,当我们需要去开发一个小程序的时候,我们依旧需要采用像开发传统 app 一样的方式进行业务开发。在整体业务开发中,我们需要多个角色的协同,大致来说,我们需要如下的一些流程:
1. 小程序的技术开发人员开发小程序端上业务,实现小程序 UI,体验端的交互逻辑等。
2. 后台的技术开发人员需要通过相应的后端语言(java/nodejs/c#等)来开发后台业务。这里的后台业务包含登录、权限、数据操作、业务逻辑控制等。后台的技术开发人员需要通过相应的后端语言(java/nodejs/c#等)来开发后台业务。这里的后台业务包含登录、权限、数据操作、业务逻辑控制等。
3. 前后端人员开发好逻辑后进行部署联调
4. 服务部署后,需要运维的人员来处理环境问题、监控、容灾等问题,以确保服务的持续可用前后端人员开发好逻辑后进行部署联调 服务部署后,需要运维的人员来处理环境问题、监控、容灾等问题,以确保服务的持续可用服务部署后,需要运维的人员来处理环境问题、监控、容灾等问题,以确保服务的持续可用前后端人员开发好逻辑后进行部署联调 服务部署后,需要运维的人员来处理环境问题、监控、容灾等问题,以确保服务的持续可用
5. 最后,安全的人员需要为应用制定安全规则,搭配相应的安全处理方案,确保服务的安全可靠,不被恶意攻击最后,安全的人员需要为应用制定安全规则,搭配相应的安全处理方案,确保服务的安全可靠,不被恶意攻击
从以上流程我们能看出,在现有的模式中,我们开发一个小程序的成本其实蛮高的。从两个地方来看,一个是人力成本,一个是资源成本。
**人力成本**
在上述模式中,我们一个小程序需要 3-4 个角色的参与才能确保我们的小程序能持续稳定的服务。这对小规模的小程序或者孵化阶段的小程序来说人员投入是非常大的。
**资源成本**
在传统的模式中,为了能让我们的小程序稳定运行起来,我们需要购买大量的资源。最常见的就是 ecs * 2 + rds + slb + 域名 + 证书 等,如果我们要做安全控制,还需购买云上的安全设施,比如 ddos 防御等。这些资源不管我们业务量多大,我们都需要持续付费,对用户来说,这个成本是非常高的。
综上,我们能看出,在传统的模式中,人力成本和资源成本两大投入会成为制约小程序快速布局落地的拦路虎。如果我们在小程序业务中还是使用传统的开发模式,那我们业务的整体赋能将会来的不够经济、快速。
所以,我们需要使用一种更加简单、高效的开发方式
## 更简单的Serverless开发方式
通过上述的分析,我们能看到传统模式不利于我们小程序的快速布局,我们需要采用一种更高效的研发方式来实现快速布局,这种方式就是 Serverless 模式。采用蚂蚁的 Serverless 产品 后端云服务,我们可以用更高效、简单的方式快速实现稳定、可靠的小程序后台服务。
![在这里插入图片描述](https://file.lsjlt.com/upload/202306/02/zwggkz033ep.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)
**BaaS**
模块后端级服务。一般情况下,在开发小程序的后台数据服务时,开发团队需要在云上购买相关的短信服务来供前端使用。在有了BaaS之后,开发团队可以通过小程序本身直接操作,例如发送短信的功能,现在可以直接通过小程序完成,而不需要后端参与,因此大大节省了开发成本。
**服务托管**
目前的情况下,无论是前端应用还是后端应用,都需要后台来处理很多东西,开发者还会去购买云ECS、购买域名并进行域名备案等工作,以上这些步骤都是不可避免的。在服务托管模式中,数据库、域名、证书以及整套安全防控均为服务性体系。在这种模式下,开发者只需要把自己业务逻辑实现好提交给平台,平台会完成系统部署并挂到网关上。简而言之,开发者无需再关心底层环境、数据以及服务器的各种配置等,取而代之的是把代码提供给小程序平台,由平台完成这一系统操作。
**函数计算**
函数计算是比较简单的计算单元,我们可以采用函数计算来处理一些简单的异步、批处理操作,例如批量化操作、批量化处理图象以及处理一些比较耗资源的数据。基于异步事件以及按量付费的函数计算,我们无需再搭建大规模的计算集群,只需通过函数计算即可快速、低成本地实现计算能力,串接业务。
## **蚂蚁小程序 Serverless服务结构**
Serverless的服务大结构分为如下图所示四层:
![在这里插入图片描述](https://file.lsjlt.com/upload/202306/02/kxgvb0icpi3.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)
**第一层,阿里生态支持层。**
Serverless支持所有阿里的生态,为开发者提供十分灵活的接入方案无缝接入支付宝高德等服务,并允许开发者直接使用这些服务。
**第二层,统一接入层。**
小程序的一个核心特点就是能通过一个小程序快速布局到多个端上,以便快速吸收各个端上的流量,为业务带来红利。
在传统的模式中,如果我们需要将小程序部署到多个端上,那我们需要基于每个端的登录体系实现认证,这个对开发者来说成本还是蛮高的。
在蚂蚁 Serverless 服务中,我们提供了统一接入能力,客户不再需要去处理各个端上的认证差异,通过 Serverless 服务提供的统一 api 即可快速实现认证,大大缩减开发时间。
**第三层是Serverless架构的核心层**,其具有文件储存,数据储存,服务托管,函数计算等诸多能力。接下来就为大家详细介绍这以上几种能力。
**文件储存;**
在现在的移动互联网中,我们有大量的资源需要使用上传、下载。在传统的模式中,我们需要购买存储、cdn、域名、证书等,然后再使用后端服务进行文件的存取操作,整体还是比较复杂的。同时,当用户在移动端情况下做营销或红包投放时,用户资源的访问量是很大的,会出现后台承载量有限、开发成本昂贵等问题。
基于这个场景,小程序 Serverless 平台为开发者提供了基于 CDN 的文件 BaaS 服务,通过我们封装良好的 SDK,开发者只需将文件通过接口上传,即可直接享受到 CDN 的能力,为文件带来最佳的访问性能以及海量的访问量。
**数据储存;**
在数据储存方面,小程序 Serverless 服务针对不同的小程序场景提供了不同的解决方案。
对中小型小程序来说,小程序可以通过客户端的SDK操作数据库里的数据,无需服务端参与,即可完成数据的存取操作。在此过程中,平台为用户的数据提供了严格的管控以及灵活的 DSL 配置,开发者可以根据自己的业务需求定义数据的访问策略,让客户端可以安全、灵活地访问数据
DSL 样例如下:
```
{
// 规则的范围是 comment 这个集合
"comments": {
// 所有人可读".read": true,
// 只有当操作者(请求来源)和资源所有者是同一个人时可写
".write": "request.auth.userId == resource.auth.userId",
// 所有人可以进行其他操作
"*": true
},
// 规则的范围是所有集合
"*": {
// 所有人可以进行任何操作
"*": true
}
}
```
对于复杂后端逻辑的小程序来说,小程序 Serverless 提供了基于服务托管的后端解决方案,通过服务托管,开发者可以获得和开发后端应用一样的体验,开发者可以对数据持有最大的自由操作权,可以完全按照自己的业务体系定义。
**服务托管;**
在传统模式中,开发者需要花费大量的精力去做环境的搭建、系统部署、运维等事项,同时,还需花费很高的成本去实现高可用等可用性方案,成本高,性价比低。
基于这个场景,小程序 Serverless 服务提供了服务托管的解决方案。通过服务托管,开发者无需再关系底层环境、后端运维的各种细节。开发者只需将业务代码提交到云端即可,云端会自动完成代码的构建、部署等各种事项。让开发者真正的无需关心底层运维即可快速实现后端业务。
使用服务托管模式,开发者可以获得如下优势:
开发者无需单独购买域名证书,无需再进行域名备案,大大缩短新项目上线周期
开发者无需关心云上复杂后端环境的搭建,只需将精力集中在业务逻辑的开发上即可,大大缩短研发时间
服务托管方案为后台服务提供了弹性伸缩的能力,以及跨机房容灾的能力,开发者不再需要花费大量精力大量资源去搭建复杂的容灾伸缩机制,只需接入服务托管即可一键具备可靠的容灾能力。
服务托管采用按量付费机制,只在有真实业务产生时才会产生费用,和 ecs 相比,成本能大大缩减。
**函数计算;**
函数计算是一种更轻量的服务托管,是一个个单一的后端计算单元。通过函数计算,开发者可以将原有的复杂计算逻辑拆分为多个计算函数,然后通过事件或者http 方式串接起计算业务,在实现对业务解耦的同时也能缩短对后端资源成本的依赖。
我们平台官方即将提供丰富的业务云函数,用户开箱即用,无需再去处理底层复杂的逻辑。比如我们有一个图片水印的函数,专门负责处理图片的水印,我们在上传文件后,只需触发一下水印函数即可对文件实现水印处理,无需我们在应用里进行复杂的处理逻辑,和业务真正解耦。
**数据分析能力;**
基于蚂蚁金融科技的数据能力,我们为用户提供多样化的数据分析能力。基于我们提供的数据能力,用户可以更好地对业务进行决策,对系统进行优化,实现更高的业务价值。
**安全管控能力:**
基于蚂蚁多年的安全积累,小程序 Serverless 服务为运行其上的应用提供了专业的安全管控。从接入层的防 ddos, 到链路层的证书验证,再到数据层的内容安全控制。我们为客户提供了全方位的安全控制,保障用户的业务能持续安全运行,免受恶意攻击。同时,蚂蚁专业的安全团队也在不断监控管理,为用户服务的安全做更进一步的防控
**第四层,蚂蚁的生态能力层:**
通过开放平台,小程序可以直接分享到蚂蚁生态带来的红利,开发者可以基于信用来做租借,基于会员来做红包等。在传统的方案中,我们在接入蚂蚁生态时成本较高,需要进行很多的安全处理。在小程序 Serverless 服务中,平台和蚂蚁开放平台进行了打通,用户无需再关心原有复杂的接入方式,无需再关心签名等安全措施,只需通过我们的sdk,即可直接调用蚂蚁开放接口,大大缩短研发时间。一笔支付的时间,可以从四五个小时,缩短到十分钟,甚至对比较熟练的用户,五分钟就可以搞定。
## Serverless后端解决方案
![在这里插入图片描述](https://file.lsjlt.com/upload/202306/02/a5pq5euvmnj.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)
基于函数计算与服务托管,小程序 Serverless 服务提供了一整套的后端解决方案,旨在为开发者提供最简洁高效的后端研发模型。
对小程序开发者来说,通过小程序 Serverless 服务的后端解决方案开发将会变得非常简单,只需执行如下的操作即可:
在 ide 中编写后台服务代码以及 function 代码后将代码通过 ide 提交到云端
根据业务需求配置 function 触发器
在小程序端通过 sdk 直接请求后台的服务接口
整个过程开发者无需关心云上基础设施的搭建以及相关的运维管控,只需实现实现业务逻辑即可,简单高效
## Serverless客户端解决方案
对于一些轻量化的场景,我们只需执行简单的一些数据操作即可。基于这种场景,小程序 Serverless 服务提供了客户端解决方案。
![在这里插入图片描述](https://file.lsjlt.com/upload/202306/02/yhji0djd5ki.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)
区别于后端解决方案,客户端解决方案的核心是平台把后面的服务通过服务化能力直接输送给小程序,小程序可通过客户端的方案直接操作相应的服务而无需后端的参与。
假如一个商家给顾客发促销短信,通过平台的SDK不需要经过任何服务器,发短信发推送等功能小程序都可以直接实现。实现过程中,通信链路接入安全防控体系,通过这条链路的数据将都有安全保障。
## Serverless与蚂蚁开放能力
在原有模式下,建立一个芝麻信用或者建立一个支付可能需要半天或者一天的时间, 其中涉及到认证、授信、鉴权等多种复杂操作。 为了给开发者提供便利,小程序 Serverless 平台和蚂蚁开放平台进行了互信打通,开发者通过平台开发时无需再关心原有的复杂认证流程,只需采用我们的 sdk 调用相应接口即可,简洁高效。
![在这里插入图片描述](https://file.lsjlt.com/upload/202306/02/cyediwodwtf.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)
## Serverless带来的优势
Serverless方式会为开发者带来多方面的优势:
**研发率的提升**
在传统模式中,我们需要大量的资源、人力投入。协同成本高,时间周期长。比如在传统的方案中,我们需要备案域名,购买证书,这部分至少需要 40 天的时间,这部分时间无法节省,成本非常高。在具备域名的情况下,由于用户还需处理庞大的后端底层业务,按目前的统计情况来看,实现一个中小规模的小程序还需 21 天左右,整体基本需要2 个月时间。
在 Serverless模式中,由于复杂的底层逻辑都已托管,域名等也已由平台提供,用户只需完成自己业务逻辑的开发即可,整体的开发时间能从以往的 21 天缩短到 5 天,大大提升了研发效率。
![在这里插入图片描述](https://file.lsjlt.com/upload/202306/02/5tlhumleds2.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)
**安全性的保证。**
对于一般规模的团队来说,安全是一个比较容易忽略的话题。但是现在互联网时代攻击无处不在,我们的业务可能随时会受到别人的恶意攻击,提供一套安全可靠的防控保障业务的健康尤为重要。
在传统模式中,实现系统的安全可靠我们需要有专业的安全人员介入,并且需要在云端购买大量的安全资源。和实现高可用一样,我们需要投入很多的资源和成本,性价比很低。
得益于蚂蚁多年来的安全积累,小程序 Serverless 服务为用户的服务提供了全方位的安全管控,全方面保障用户业务的安全。举例来说,我们为用户提供了如下安全控制:
- 接入层控制: 在接入层控制上,平台为所有应用提供了 ddos 的流量防护以及防火墙的防护,保障业务流量的安全性。 内容安全控制:
- 针对所有上传到平台的资源,我们都会自动做风险识别,对于涉黄、涉政、暴力等有法律风险、舆论等风险的资源进行实时管理,确保不会给用户业务带来风险。
- 访问控制: 针对客户端的 BaaS 服务,我们为开发者提供了基于 DSL的安全控制策略,开发者可以根据业务需求对数据进行强管控,保障数据不发生非法访问以及泄漏。比如数据存储服务的规则如下 控制台控制:
- 对于用户的控制台操作,我们接入了蚂蚁专业的风控体系,对登录用户进行精确的风控校验,即使用户非法获取到账号密码也无法直接操作控制台,确保用户后台不会被恶意操作。
对于安全方案,basement 正在不断补充优化,通过 basement,用户无需单独支付费用,即可享有专业的安全控制,性价比极高
![在这里插入图片描述](https://file.lsjlt.com/upload/202306/02/jm2gnkx3mz3.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)
**产品的可靠性。**
在传统的模式中,由于受限于成本、技术等限制,大多数的应用都是单节点、单机房运行。这种情况的容灾能力是很弱的,如果宕机或者机房网络异常都会造成服务的中断,势必会影响到业务。
如果要实现高可用,在传统模式中,我们需要投入大量的底层资源、开发、运维资源,实现复杂度高,成本高,对于一般规模的应用来说性价比很低
在使用小程序 Serverless的模式中,平台原生支持了同城多机房的容灾能力。所有服务的数据都会进行多机房的互备,同时在应用层,我们也提供了动态的切换能力,可以保障用户的服务在单机房故障时能持续可靠继续服务,保障业务的稳定性。
同时,平台为上面运行的所有服务提供高可用能力的同时不针对高可用收费,用户无需付费即可享受到专业的高可用服务,性价比极高
![在这里插入图片描述](https://file.lsjlt.com/upload/202306/02/gimyxfkycme.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)
**更低的成本**
在传统模式中,我们需要大量的人力投入,资源投入,这对公司来说是一笔不小的成本,我们从两个方面来看:
人力成本
在传统模式中,我们需要前端 + 后端 + 运维 + 安全等多个角色的协同,人力投入大,成本高
在 Serverless 模式中,只需一个全栈的前端工程师即可完成小程序的开发,人力投入小,成本低,收益高
资源成本
在传统模式中,不管业务是否在运行,都需要为底层的众多资源付费。这些资源包含服务器、数据库、负载均衡、监控、安全等产品,对于 dau 不高或者访问集中化的应用来说,这种付费方式成本很高。
在 Serverless 模式中,所有的资源都是按量付费,只有真正发生了使用才会收费。同时,对于安全、高可用等能力,用户无需付费。所以,在使用小程序 Serverless 服务的情况下,用户只需花费原有模式 50% 以下的资金投入即可快速实现一个可靠、稳定、安全的小程序服务。
![在这里插入图片描述](https://file.lsjlt.com/upload/202306/02/qn3ztq042po.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)
## 混合部署模式
对于已有服务的开发者来说,可以采用两种方式接入到蚂蚁小程序 Serverless 服务中,我们称之为混合部署模式:
对于现有自购 ecs 的开发者,可以通过服务托管的形式直接将应用部署到平台中即可直接使用。
对于稍大规模的商家或者SV,在后台已经搭建了整个集群,这样的业务是没有办法直接迁移的。对于这种情况平台提供了通过后端服务或者函数直接调用现有服务的方案。通过这些方式,把用户现有的后端的代码直接部署到平台中,并通过平台投放到多个渠道上面,让业务能快速落地。
![在这里插入图片描述](https://file.lsjlt.com/upload/202306/02/iq4ydlxywtp.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNjU4OQ==,size_16,color_FFFFFF,t_70)
## 总结
总体来说Serverless方案能给开发者带来以下优势:首先能够带来人力上、时间成本上、资金成本上的节省。更重要的是方案可以让用户能以最简单最高效的方式上线业务,在目前电子商业瞬息万变的节奏中,先发制人,达到最快占领市场份额并攻城略地的效果。
点击[阅读更多](https://tech.antfin.com/articles?chInfo=zh),查看更多详情
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341