随着云计算技术的深入发展,无服务器架构正在兴起。2019 年 2 月,加州大学伯克利分校发表了名为《Cloud Programming Simplified: A Berkerley View on Serverless Computing》的论文,对 Serverless 的形成、现状以及未来进行了全面的梳理和总结,指出 Serverless 即将成为下一代云服务的主流形态。值得一提的是,在 2009 年的 《Above the Clouds: A Berkeley View of Cloud Computing》 一文中,伯克利所预测的当时云计算所面临的挑战将会被逐一解决,云计算将会繁荣昌盛起来,如今已一一实现。
Serverless Computing,顾名思义是无服务器计算,无服务器计算将用户从繁琐的底层设备管理和运维配置工作中解放出来,只需关心业务逻辑,这种模式极大地降低了研发门槛,提升业务构建效率,获得了大量开发者的青睐。
尽管无服务器计算带来了极其令人振奋的开发模式,但随之而来的限制阻碍着开发者将更多的应用迁移到无服务器计算平台。
- 性能毛刺
无服务器计算由服务提供方动态分配实例,准备执行环境,实例的伸缩带来了不可避免的延时波动,影响应用性能。 - 价格昂贵
为了保障无服务器应用的弹性伸缩,无服务器计算平台需要维护充足的计算资源,用户势必要为足够的弹性带来的更高单价买单。昂贵的价格阻碍着调用量平稳的大应用迁移至无服务器计算平台,也极大的限制了无服务器计算的应用场景。 - 迁移改造代价大
无服务器计算要求用户按照服务提供放规定的统一接口开发函数,开发者需要针对接口重新进行开发,很难平滑地完成业务迁移。 - 工具不完善
无服务器计算缺少成熟的开发者生态和上下游支持。简单易上手的调试、部署工具的缺失无形中提高了开发门槛;监控报警系统的不完备不直观又降低了开发者对应用的掌控力度。
针对企业应用难以全面迁移至无服务器计算的问题,阿里云进行了持续的探索和研究。阿里云无服务器计算服务 函数计算(Function Compute) 为以上问题交出了答卷!
函数计算 2.0 引入了丰富的资源类型,全新的计费方式,灵活的自定义运行环境和全方位升级的工具链,为开发者消除迁移至函数计算的顾虑,为应用的全面迁移扫清障碍!
- 丰富的资源类型
全新推出 预留实例 功能,支持按量实例和预留实例两种实例类型。
按量实例是指函数实例的分配和释放完全由函数计算系统负责,有函数调用请求时,函数计算动态调度资源,为用户提供弹性可靠的执行环境。但是资源的动态调度不可避免地存在冷启动延时,对于时延敏感的在线业务有一定影响。
预留实例将函数实例的分配和释放完全交由用户管理。通过预留实例,用户能提前预热函数或者长期保持常驻实例,消除实例伸缩带来的延时波动。
根据业务场景,用户既可以单独使用按量实例或预留实例,又可以混合使用两种实例。当混合使用按量和预留实例时,函数计算保证优先使用预留实例。当请求的并发度超过预留实例所能提供的并发度时,函数计算会动态调度按量实例,轻松应对业务的波峰波谷!
使用相同压力对机器学习场景的 猫狗识别器 进行测试,使用预留实例与不使用预留实例的表现效果如下:
由于机器学习的模型很大,冷启动加载代码包需要耗时 20s 左右。
-
只使用按量实例时,函数执行耗时有明显毛刺。
-
使用预留实例,且请求所需实例数小于预留实例数时,函数执行时延相对平稳,基本维持在百毫秒内。
组合使用按量实例、预留实例,可以有效保障应用的性能稳定。
- 全新的计费方式
函数计算提供了预付费和后付费两种计量模式,帮助用户在不同场景下获得显著的成本优势。
预付费 是指用户先判断应用的资源需求,预先购买指定数量的资源消费券后再使用,单价相较于后付费降低 70%!后付费则是根据实际使用的资源按需付费。
建议开发者观察应用的负载情况,针对负载中稳定的部分使用预付费功能预购计算力,预付费计算力可以抵扣实际使用的计算力,预付费计算力无法抵扣的部分使用后付费计费。
灵活使用预付费、后付费计费方式,可以大幅优化成本,节约上云开销。
下表介绍了预留实例的规格和定价:
预留实例规格 | 计算力(CU) | 预付费单价(元/CU-秒) | 后付费单价(元/CU-秒) | 预付费单价(元/CU-小时) | 后付费单价(元/CU-小时) |
---|---|---|---|---|---|
0.67 vCPU,1024 MB 内存 | 1 | 0.00003167 | 0.00011108 | 0.114 | 0.4 |
1 vCPU, 1536 MB 内存 | 1.5 | 0.000047505 | 0.00016662 | 0.171 | 0.6 |
1.33 vCPU,2048 MB 内存 | 2 | 0.00006334 | 0.00022216 | 0.228 | 0.8 |
1.67 vCPU,2560 MB 内存 | 2.5 | 0.000079175 | 0.0002777 | 0.285 | 1 |
2 vCPU,3072 MB 内存 | 3 | 0.00009501 | 0.00033324 | 0.342 | 1.2 |
- 全方位升级的工具链
为了协助开发者更好地开发、调试、部署无服务器应用,函数计算的工具链做了很多努力,希望在函数的开发部署过程中兼有开发者以往的开发调试体验。
工具链家族目前包含资源编排工具 Funcraft,图形化开发调试工具 VSCode 插件 与集成开发环境 WebIDE 。
-
Funcraft 是函数计算的应用部署工具,可以帮助用户快速地构建基于函数计算的弹性高可用无服务器应用。
- fun deploy 可以一键部署应用到云端,真正实现 “一行命令,一触即发”。
- fun local 在本地完全模拟云端运行环境,提供单步调试功能,可以更快地定位问题。
- fun install 将依赖包的安装能力固化到工具中,方便地为用户安装第三方依赖。
-
Aliyun Serverless VSCode Extension 是一款基于 VSCode 的开发调试工具,VSCode 插件是使用传统开发工具开发者的好帮手。
-
VSCode 插件帮助用户,像开发本地应用一样开发云函数。调试/运行完全符合用户的以往的开发认知,拉近了本地与云端的距离。
-
-
WebIDE 是一个基于 H5 支持多语言的集成开发环境。已经与 函数计算控制台 深度集成,提供与 VSCode 体验一致的网页版编辑器。
- 支持文件树的查看,拖拽上传/移动文件
- 支持与 VSCode 一致的快捷键、代码编辑器、命令面板等。
增强的 Funcraft ,便捷的 VSCode 插件,全新的控制台 将有效解决用户调试难,打包难,部署难的痛点,显著提升应用开发和运维效率,大幅提高用户体验。
- 灵活的自定义运行环境
函数计算最新支持 Custom Runtime,完全由用户定义函数的运行环境。
用户即可以基于自定义运行环境定制个性化语言的执行环境,例如函数计算官方推出的 基于 Custom Runtime 打造 golang runtime
又可以将现有的 Web 应用不做任何改造,一键迁移至函数计算,轻松构建弹性高可用的 Serverless Web 应用。
- 复杂状态管理
函数计算拓展了单一云服务的边界,函数工作流拓展了函数计算的边界
函数计算集成了13个云服务,让这些事件源的数据处理变得空前容易。用户可以利用事件触发机制构建松耦合的分布式应用。新发布的函数工作流让用户在 Serverless 的道路上更进一步,让无状态的函数也可以构建有状态的,长时间运行的,多步骤的复杂应用。函数工作流在编排函数的同时也可以通过事件触发和回调机制编排运行在任何地方的分布式任务,触达函数尚未触达之地,让应用构建博采众长。
函数计算 2.0 以用户为中心,持续不断的优化性能、降低成本有效地解决了无服务器计算中难以避免的性能毛刺,价格昂贵,迁移成本高等问题,有效提高用户体验,拓宽无服务器计算的使用场景,为应用大规模迁移至无服务器计算扫清障碍!
至此,无服务器计算的前景更加明朗,Serverless Computing 开启新的篇章!