之前,开发者想要开发一个小程序,常规流程是:要考虑买什么样的服务器,匹配哪些资源(如存储应用、数据库等),此外,还要考虑各种初始化,与服务端口关联等问题。这些工作全部梳理完成可能要花费数天时间。有了“小程序 · 云服务”以后,开发者不用考虑后端复杂的技术操作,并且开发过程非常简单,在几分钟之内就能完成后端环境的搭建,也能在 1、2 天内开发一个小程序。为进一步了解小程序 · 云服务适用的业务场景、系统架构与架构演进等,InfoQ 专访了支付宝小程序·云服务团队,揭秘支付宝小程序·云服务如何帮助开发者快速地开发小程序。
蚂蚁金服拥有海量的实名制优质用户,并通过支付宝 App 构建起各种商业和生活服务场景,同时支付宝体系内也积累了数千万 B 端商户,对于商户而言,如何服务好客户是关键。在这样的背景之下,构建一个能帮助商户提升用户体验的平台就至关重要。而支付宝小程序就提供了这样一个平台。对于支付宝小程序,开发者最初采用传统的研发模式。传统的研发模式只解决了小程序前端界面的问题。后端服务还是需要开发者自行购买服务器、证书、数据库、CDN 等基础资源,并且需要进行部署和运维。如果需要使用支付宝的服务(比如获取访问用户的信息),还需要对接支付宝开放平台,进行授权和程序配置。这一系列问题导致了开发者还没接触代码,就已经消耗了大量的时间和资源在服务器和配置环节上。
小程序 · 云服务是针对小程序提供的基于云端的服务,提供云应用和 Serverless 后端云服务两大解决方案,目的是解决小程序后端服务的问题。小程序·云服务让开发者不需要关心证书、运维、扩容,不需要关心被黑客攻击,只需要专注写好自己的代码和业务逻辑即可。
云应用是一个有服务器解决方案,利用蚂蚁金融科技应用 PaaS 平台等基础能力,为开发者提供成熟的技术服务,比如一键构建云端环境(应用、服务器、数据库、域名、HTTPS 证书等),IDE 中一键发布部署,应用资源监控等。云应用保持原有开发者熟悉的模式,使开发者快速开发运维云端应用。
Serverless 后端云服务是一个无服务器解决方案,开发者只要开通服务就能使用函数计算、数据库、文件 CDN 等核心服务。Serverless 后端云服务因其具备 Serverless 优势,可以实现弹性提供服务资源,对商户而言节省了大量的硬件资源。开发过程中也无需关心服务器的运维、部署和配置,并且天然可以调用支付宝的服务接口,是真正的开箱即用服务。
云应用和 Serverless 后端云服务两种解决方案相对应的开发架构并不相同。
云应用依托于蚂蚁金融科技的应用 PaaS 平台、监控分析平台以及分布式中间件平台,针对小程序的场景进行封装优化。应用 PaaS 平台提供完善的环境资源管理、发布部署(灰度发布、蓝绿发布)、弹性伸缩等能力。监控分析平台提供物理资源监控预警,应用日志监控预警等核心能力。分布式中间件提供常用的分布式中间件,比如消息中间件,微服务治理平台等。在 IDE 和 Web 控制台端,云应用对上述能力进行封装,以最简洁的方式提供给用户,并同时针对小程序场景提供自动分配二级域名及证书,云服务器内置 MySQL 数据库、IDE 自动生成调用蚂蚁开放平台开放能力(支付、信用、安全等)的代码等功能。如果用户希望更深度地使用蚂蚁金融科技的能力,也可以直接在蚂蚁金融科技的官网中进行更加复杂的运维操作如分组发布、灰度发布等。
云应用架构图
云应用在 IDE 端提供了丰富的插件能力,让开发者在 IDE 端可以直接和后端云服务进行无缝交互。这些插件能力包括:一站式开通蚂蚁金融科技、一站式构建云端测试和生产环境、一键发布部署应用代码、重启、停止应用、日志查看等能力。
对于 Node.js 应用类型,这些能力直接集成在了蚂蚁小程序开发者工具当中。对于 Java 应用类型,这些能力以插件的形式,集成到开发者熟悉的 IntelliJ IDEA 中。
除了将云端能力集成进 IDE 当中,云应用还提供了 Web 控制台,供开发运维人员在 Web 页面上对应用进行运维操作。在 Web 控制台上,用户可以对测试生产环境、资源、应用进行管理,同时提供可视化的监控页面,对应用资源进行监控预警。对于测试生产环境的管理,云应用提供了构建、删除测试和生产环境。对于服务器,云应用提供了重启、修改密码、Webshell 等功能。对于应用,云应用提供了上传发布包、发布回滚应用、查看发布历史等功能。
云应用为后端开发者提供了足够的灵活性,目前支持三种类型的技术栈:Node.js (Egg)、Java(Spring Boot)、Java (Sofa Boot)。如果选择了 Sofa Boot,就可以使用 SOFAStack 金融级分布式中间件的能力,比如消息中间件等。SOFAStack 在云应用中的定位是解决大型分布式应用对于分布式中间件的需求,这些中间件都经过了“双十一”的检验,具备金融级的高可用性。
Serverless 后端云服务依托于蚂蚁金融科技底层的容器、计算、存储、中间件等产品,针对小程序场景进行优化封装,为用户提供完善的小程序 Serverless 开发体验。
Serverless 后端云服务架构
接入能力:
Serverless 后端云服务提供了安全可靠的多渠道接入能力。通过统一多渠道接入方案,Serverless 后端云服务目前实现了高德、支付宝小程序的接入支持,开发者无需关心端上的差异,只需按标准方式开发小程序即可将小程序投递到高德以及支付宝的客户端。同时,Serverless 后端云服务为开发者提供了统一的域名和证书,开发者无需单独购买,开箱即用。
为了给小程序提供安全可靠的运行环境,Serverless 后端云服务在全链路签名的同时,也在接入层做了统一的 DDoS 防御以及蚂蚁金服的流量镜像管控,实时管控请求流量,助力小程序安全稳定运行。
核心能力:
基于 MongoDB 提供的数据存储,基于 CDN 和 OSS 提供的文件储存,基于 SMS 提供的短信等 BaaS 服务,为了给开发者提供更多的能力,Serverless 后端云服务后续还会提供更多的 BaaS 服务,便于开发者实现快速开发。
基于蚂蚁金融科技的 Knative 方案,Serverless 后端云服务提供了函数计算以及应用引擎的能力,在为用户提供服务托管、弹性伸缩等能力的同时,还采用了按量计费的方式为用户节省后端成本。
基于蚂蚁金服多年的风控和安全积累,Serverless 后端云服务为用户提供了 DDoS、防火墙、内容安全、风控识别等安全能力的集成,让开发者在托管服务端的同时还能享受到安全可靠的防护体系,保障业务的安全。
基于蚂蚁金服多年的容灾思想,Serverless 后端云服务对所有的能力都进行了同城双机房的部署,对于所有数据都进行实时备份。同时,基于蚂蚁金融科技强大的中间件体系,实现了应用层的容灾切换能力,全方位保障客户服务的稳定可靠。蚂蚁开放能力是蚂蚁多年的技术、业务积累,能帮助小程序拓宽更多的业务边界。为了简化开发者的授权以及接入开放平台的成本,Serverless 后端云服务和开放平台进行互信打通,让开发者无需再处理繁琐认证流程即可快速使用蚂蚁开放能力。
Serverless 后端云服务需要将用户原有的运维、容灾、安全等业务都进行统一的集成管控,整体的复杂度较高。
小程序·云服务于 2018 年 7 月初启动,最初的方向是提供一站式的云服务,让小程序开发者可以更加方便地为小程序开发后端代码。小程序·云服务的第一个版本于 2018 年 9 月在云栖大会上亮相,当时已经具备了云应用和 Serverless 后端云服务两种开发模式。但是用户在试用云服务的过程中,需要经常在 IDE 和 Web 控制台之间来回切换,不太方便。经过内部多轮讨论之后,确定了以开发者为中心的模式,用极致简洁的思路,将尽可能多的能力集成到 IDE 中,实现开发者不用脱离 IDE,就可以轻松使用后端云服务。后续开通蚂蚁金融科技、构建应用测试生产环境等功能都会在 IDE 中进行开放。
为了兼顾不同的后端开发者群体,云服务提供了云应用和 Serverless 后端云服务两个版本,其中云应用是有服务器的后端开发,并提供了 Node.js (Egg)、Java(Spring Boot)、Java(Sofa Boot)三种开发框架,给后端开发者提供尽可能多的灵活性。同时,随着 Serverless 的概念越来越被开发者接受,云服务也提供了 Serverless 后端云服务,这是一个无服务器的版本,目前支持 Node.js 开发语言。相较于云应用,Serverless 后端云服务更加轻量级,无需开发者介入过多即可实现后端运维操作。Serverless 后端云服务提供了 BaaS + FaaS 的能力,目前主要存在两大技术瓶颈:一个是 MongoDB 的调度,一个是容器的冷启动。
针对 MongoDB 的调度问题,为了平衡成本与资源使用率,Serverless 后端云服务把 MongoDB 池设置为不同规格的实例。对业务量较小的用户提供小实例,随着用户业务量的增长,当小实例无法满足业务需求时,为用户提供更大的实例。所以,基于业务情况开发一套 MongoDB 的调度体系,每隔几小时监测一次业务情况,如果业务增长到一定阈值,就将其自动迁移到规格更高的 MongoDB 实例中,保障 DB 服务的使用性能。
容器的冷启动在函数计算和云引擎中是一个不能避免的问题,Serverless 后端云服务基于 Knative 的思想,对容器冷启动进行优化。核心点是提供 Runtime 的预热池,当有请求进来时,从预热池找到对应的 Runtime,然后挂载代码后直接运行。运行后保持 2min,如果 2min 内无请求,则将 Runtime 返回预热池。
开放是小程序·云服务的一个重要的业务变革方向,随着用户数和业务数的增加,如何保证小程序的安全性呢?小程序·云服务团队给出的解决方案是:
(1)在控制台上,云服务集成了蚂蚁的风控能力,保障控制台不会被恶意用户入侵。
(2)在访问链路上,对所有的请求都进行了签名,避免被篡改。所有的访问链路都采用 https 方式,避免中间人攻击。同时,所有的请求都需要基于支付宝 OAuth 登录态进行验证,确保匿名身份无法访问服务。
(3)在接入层上,接入了云端的防 DDoS 能力以及蚂蚁的流量镜像能力,对流入流量进行控制,避免请求的恶意攻击。
(4)对于文件上传,会对所有的文件都进行安全扫描,避免上传涉黄、涉政等文件。
小程序·云服务对于开发者的价值
小程序·云服务的目的是为构建小程序的后端提供极致的便利性,将蚂蚁金融科技的能力通过最简洁的方式带给开发者去使用,通过提供云应用(有服务器)和 Serverless 后端云服务(无服务器)两种方式,并将产品能力集成在了 IDE 当中,实现开发者接入成本的最小化。
云应用主要为开发者提供如下能力:
(1) 极简构建云端环境(应用、服务器、域名、HTTPS 证书等);
(2) IDE 一键部署、启停云端应用;
(3) 灵活的语言框架(Java、Node.js);
(4) 应用资源监控预警;
(5) 深度集成蚂蚁金服开放能力(支付、信用、安全等)。
为了让开发者更方便地使用蚂蚁金服的开放能力(支付、信用、安全等),云应用在 IDE 插件中可以根据用户签约的能力包,自动生成调用相应开放能力的代码,显著降低用户在这方面的开发成本。
云应用在提供各种便利性的同时,也给开发运维人员提供了完全自主可控的能力,开发运维人员可以登录到云端服务器上去查看日志、排查问题,有完全的自主权。
Serverless 后端云服务作为原生服务,已经集成在小程序开发者工具中。作为开发者首先要拥有支付宝账号,然后创建或加入小程序应用,下载安装支付宝小程序开发者工具,便可以开始开发。
在小程序开发者工具中,使用 Serverless 后端云服务提供的 API(对开发者而言是一个全局变量),可以直接调用数据库、文件存储和云函数服务,还可以免配置直接调用支付宝开放平台的海量 OpenAPI。支付宝优质的用户群体和蚂蚁金服提供的开放能力对于开发者而言非常重要,尤其是 Serverless 后端云服务无需配置就能连接几亿用户资源和使用这些服务。
Serverless 后端云服务的数据存储沿用了 MongoDB 的语法,云函数基于 Node.js 进行开发,这些都是现在非常流行的编程语言,对开发者来说学习成本低,易于上手。为了帮助开发者完成更加复杂的程序,Serverless 后端云服务陆续会增加更多服务类型,与新技术结合,从而更好服务开发者。