针对无状态的应用提供了最为轻量的FC架构,通过APIGW + FC + NAS等通用组合可实现自动弹性扩缩容、多版本共存、灰度与a/btest、文件持久化以及局部状态保存,满足大多数简单业务场景,当前线上应用大多为此种架构,以Web服务、云函数(天猫精灵)的形式运行。基于FC的架构向开发者屏蔽了底层PAAS部分,仅需在Cloud IDE中开发、调试代码,测试通过后在Cloud IDE部署到对应环境即可。
无状态的应用是指应用(函数)是运行在第三方提供的无状态计算容器中,并且在不复用容器的情况下应用(函数)可能会存在冷启动并且可以正常对外服务,这个时候应用(函数)可以认为是无状态,因此如果应用依赖本机的crontab、内存数据库亦或是本地文件存储等,都是有状态的应用,是需要做一些改造才可以使用基于FC的架构
针对有状态或者微服务应用云开发平台提供了服务型SAE架构,可解决应用启动有状态的问题(通过SLB与docker镜像),并可兼容Spring Cloud、Dubbo、HSF等主流的微服务开发框架,完成服务注册、发现、调用与统计。
服务型ASK架构则是为更为专业的企业团队进行企业级Kubernetes容器化应用的生命周期管理而设计的,这里不做重点陈述。
云开发平台力图透过常见业务场景的表象抽象出几种普适的云端Serverless架构,在众多云产品的选择困难和搭配与架构的痛苦抉择中给予开发者或企业些许帮助或启发。基于云开发平台“生长出来”的产品是Serverless架构的,释放了架构师与运维人员的生产力,一切架构由“云开发平台”来完成,开发者负责端侧与服务端通用业务,一切有偿资源均按量付费。
搬站搬站就是存量项目迁移到云开发平台上,直接升级为Serverless架构。理想中的搬站是不需要开发者修改任何代码就可以直接升级,但现实往往是残酷的:由于不同语言有不同的特性及特点,因此针对常见的语言云开发平台在性价比的权衡下提供了不同的搬站策略:
基于Serverless框架的零代码搬站:Nodejs(全框架支持)与Python(同步与异步WSGI均支持)
基于容器的低(零)代码搬站:Python、Java与PHP
Serverless框架Serverless框架是云开发平台抽象的一层抹平不同语言框架、语言运行时底层API(非FC运行时)的腻子,摆脱了FC只能运行简单函数的限制,将复杂用户层代码(非简单函数)通过代理的形式与FC运行时打通,实现业务侧代码零改动迁移。
基于Serverless框架的项目迁移其实对用户的业务进程模型有一定要求:
单机对应单个业务进程
无长连接需求
应用无状态
仅支持七层转发
采用Serverless框架迁移的项目,仅提供对HTTP与HTTPS协议的支持,对TCP或UDP服务暂不支持。
基于容器的低代码搬站容器是云时代重要标志之一,基于容器统一的交付标准,云开发平台支持存量应用部署到三种Serverless(FC、SAE、ASK)中的任一计算服务当中。云开发平台提供基于各种语言基础镜像,让存量应用以尽少的修改来完成部署,成为云原生Serverless应用。
只需要提供一个镜像就可以运行在三套不同的架构下,在使用云开发平台提供不同语言的镜像前提下仅需修改相关前置配置文件即可实现迁移。
针对Serverless应用无法即时调试的问题,云开发平台提供了另一种解决方案:Cloud IDE调试环境预置,在开发态即可模拟线上运行时。这样开发者便可以做到实时开发应用、实时预览、实时查阅日志。
若要针对不同技术栈提供不同的运行时容器,这需要依赖抽象的通用适配层来解决不同类型request及path处理机制、模拟“冷启动”环境初始化、测试域名安全性保证和私密性与超时策略、APIGW返回兼容处理;需要依赖存储层实现运行时容器的热更新与拉取策略灵活定制;而这一切则是通过操作IDE的workbench扩展无感知运行的,让开发者体验云端测试的便利,争取更长时间的云端留存。
云端断点调试是云开发平台的另一个优势。通过attach功能,Cloud IDE可以调试任意端口的服务,这也正好为调试运行时所用。通过与调试运行时打通,可实时查看运行时输出日志与context,获得与传统开发相同的体验。