高德最佳实践:Serverless 规模化落地有哪些价值?
作者 | 何以然(以燃)
导读:曾经看上去很美、一直被观望的 Serverless,现已逐渐进入落地的阶段。今年的"十一出行节",高德在核心业务规模化落地 Serverless,由 Serverless 支撑的业务在流量高峰期的表现十分优秀。传统应用也能带来同样的体验,那么 Serverless 的差异化价值又是什么呢?本文分享高德 Serverless 规模化落地背后的实践总结。
随着 Serverless 概念的进一步普及,开发者已经从观望状态进入尝试阶段,更多的落地场景也在不断解锁。“Serverless 只适合小场景吗?”、“只能被事件驱动吗?” 这些早期对 Serverless 的质疑正在逐渐消散,用户正在更多的核心场景中,开始采用 Serverless 技术达到提效、弹性、成本优化等目的。作为地图应用的领导者,高德为带给用户更好的出行体验,不断在新技术领域进行探索,在核心业务规模化落地 Serverless,现已取得显著成效。
2020 年的“十一出行节”期间,高德地图创造了记录 ——截止 2020 年 10 月 1 日 13 时 27 分 27 秒,高德地图当日活跃用户突破 1 亿,比 2019 年 10 月 1 日提前 3 时 41 分达成此记录。
期间,Serverless 作为其中一个核心技术场景,平稳扛住了流量高峰期的考验。值得一提的是,由 Serverless 支撑的业务在流量高峰期的表现十分优秀,每分钟函数调用量接近两百万次。这再次验证了 Serverless 基础技术的价值,进一步拓展了技术场景。
业务场景
自主出行是高德地图的核心业务,涉及到用户出行相关的功能诉求,承载了高德地图 APP 内最大的用户流量。下图为自主出行核心业务中应用 Node FaaS 的部分场景,从左至右依次为:主图场景页、路线规划页、导航结束页。
随着功能的进一步拓展,高德地图从导航工具升级为出行服务平台和生活信息服务入口,进一步拓展了出行相关的生活信息服务场景,带给用户更全面的用户体验。上图功能为场景推荐卡片,旨在根据用户出行意图推荐信息,提升用户出行体验。此功能需具备快速迭代,样式调整高灵活性的能力。因此,将卡片样式模版存放于云端,通过服务下发的形式渲染至客户端无疑为最优选择,可以满足业务快速灵活迭代的目的。
经过方案评估判断,此场景类型属于无状态服务,基于阿里云 Serverless 成熟的生态,高德最终选择接入 Node FaaS(阿里云函数计算)服务能力,出行前端搭建了场景推荐卡片服务。卡片的 UI 模版获取、数据请求聚合&逻辑处理、拼接生成 Schema 的能力均在 FaaS 层得到实现,客户端根据服务下发的 Schema 直接渲染展示,达到更加轻便灵活的目标。
那么,Serverless 场景在“十一出行节”峰值场景中的具体表现如何?
整体服务成功率均大于 99.99% ,总计 100W+ 次触发/分钟,QPS 2W+,各场景的服务平均响应时间均在 60ms 以下,服务稳定性超出预期。
业务价值
从对以上业务场景的支撑中,我们可以看出 Serverless 的表现非常优秀。当然你也会问,传统的应用也能带来同样的体验,那么 Serverless 的差异化价值又是什么呢?
1. 简单提效
传统 BFF(Back-end For Front-end)层应用会随着时间推移,以及业务需求的增加, 其 BFF 层逐渐变 “富”, 冗余的代码逐渐变多,最后变成开发者的噩梦——“牵一发而动全身”。随着人员迭代变化,模块的开发者也会变化,BFF 层就会慢慢变成一个无人知晓,无人敢动的模块。
当 BFF 层转换成 SFF (Serverless For Front-end) 层之后,会有什么变化?SFF 的职责会变的单一、零运维、成本更低,这些是 Serverless 本身自带的能力,而这些能力可以帮助前端进一步释放生产潜能。开发者不再需要一个富 BFF 层,而只需一个接口或一个 SFF 就可以实现功能,天然解决了“牵一发而动全身”的问题。如果接口停服或者没有流量,那么所用的实例会自动缩零,也就很容易分辨出是哪一个接口函数,后期就可以删掉此接口的函数,有效提升资源利用率。
高德在 Serverless 应用上非常先进,实现了 FaaS 层与研发体系的完全对接,因此,应用从开发、测试、灰度、上线的全生命周期,到具备流控、弹性、容灾等标准化能力,所用的时间较以前缩短了 40%,大大提高了人效。
2. 弹性以及成本
通过流量趋势数据,我们可以观察到地图场景流量特点——高峰与低峰的落差十分明显。按照传统应用的资源准备,我们需要根据最高峰的流量进行资源准备,所以到了流量低峰期,多准备的机器会有很多冗余,这就造成了成本的浪费。
针对以上情况,高德使用了阿里云函数计算,可以根据流量变化自动扩缩容。然而,提升扩缩容速度的复杂性较大,一直是大企业的专属,但函数计算可以通过毫秒级别的启动优势,将快上快下的扩缩容能力普及给用户,轻松帮助用户实现了计算资源的弹性利用,并且大大降低了成本。
3. 可观测性
可观测性是应用上线诊断平台的必备属性,要让用户观察到 RT 变化、资源的使用率、系统应用的全链路调用,从而快速诊断出系统应用的瓶颈问题。阿里云函数计算率先与日志服务、云监控、tracing 平台以及函数工作流编排做了完美的融合,用户只需要配置一次,就可以完完整整的享受到以上这些功能,大大降低了用户的学习成本,实现了对应用程序的快速诊断。
Serverless 规模化落地的序幕已经拉开, 更多场景正在各行各业中解锁。Serverless 在高德的规模化落地,对于业务方来而言,业务迭代更快更灵活了,为业务创新创造了前提条件;对于前端开发者而言,进一步激活了开发者的生产潜能,提升了极大的能力自信。高德出行业务从 2020 年初的能力试点到“十一出行节”的自主出行核心场景,期间接入了阿里云函数计算,积累了非常宝贵的云原生落地经验,为未来业务整体上云打下了良好基础。
作者简介:何以然(以燃) 阿里巴巴前端技术专家,2016 年入职高德地图,目前负责高德出行业务研发以及 Serverless 相关技术落地。
高德最佳实践:Serverless 规模化落地有哪些价值?的更多相关文章
- Serverless 如何在阿里巴巴实现规模化落地?
作者 | 赵庆杰(卢令) 来源 | Serverless 公众号 一.Serverless 规模化落地集团的成果 2020 年,我们在 Serverless 底层基建上做了非常大的升级,比如计算升级到 ...
- 基于ABP落地领域驱动设计-04.领域服务和应用服务的最佳实践和原则
目录 系列文章 领域服务 应用服务 学习帮助 系列文章 基于ABP落地领域驱动设计-00.目录和前言 基于ABP落地领域驱动设计-01.全景图 基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践 ...
- 基于ABP落地领域驱动设计-05.实体创建和更新最佳实践
目录 系列文章 数据传输对象 输入DTO最佳实践 不要在输入DTO中定义不使用的属性 不要重用输入DTO 输入DTO中验证逻辑 输出DTO最佳实践 对象映射 学习帮助 系列文章 基于ABP落地领域驱动 ...
- 前端如何真正晋级成全栈:腾讯 Serverless 前端落地与实践
Serverless 是当下炙手可热的技术,被认为是云计算发展的未来方向,拥有免运维.降低开发成本.按需自动扩展等诸多优点.尤其是在前端研发领域,使用 Node 开发云函数,可以让前端工程师更加专注于 ...
- 生产环境容器落地最佳实践 --JFrog 内部K8s落地旅程
引言 Kubernetes已经成为市场上事实上领先的编配工具,不仅对技术公司如此,对所有公司都是如此,因为它允许您快速且可预测地部署应用程序.动态地伸缩应用程序.无缝地推出新特性,同时有效地利用硬件资 ...
- 基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则
目录 前言 聚合 聚合和聚合根原则 包含业务原则 单个单元原则 事务边界原则 可序列化原则 聚合和聚合根最佳实践 只通过ID引用其他聚合 用于 EF Core 和 关系型数据库 保持聚合根足够小 聚合 ...
- 基于ABP落地领域驱动设计-03.仓储和规约最佳实践和原则
目录 系列文章 仓储 仓储的通用原则 仓储中不包含领域逻辑 规约 在实体中使用规约 在仓储中使用规约 组合规约 学习帮助 围绕DDD和ABP Framework两个核心技术,后面还会陆续发布核心构件实 ...
- 构建高效Presubmit卡点,落地测试左移最佳实践
樊登有一节课讲的挺有意思,说中国有个组织叫绩效改进协会,专门研究用技控代替人控的事情.其用麦当劳来举例子,他说麦当劳其实招人标准很低,高中文凭就可以,但是培养出来的人,三五年之后,每一个都是大家争抢的 ...
- 全球IT管理最佳实践之DevOps Master 认证
原文:http://soft.chinabyte.com/30/13940030.shtml 作者:国际最佳实践管理联盟 孙振鹏 关键字: DevOps.DevOps认证.DevOpsDays.Dev ...
随机推荐
- 深入研究webpack之Tree Shaking相关属性sideEffects用处
Tree Shaking我原来也只是了解,这次碰巧深入研究了下,就写个博客记录一下,网上有很多讲Tree Shaking的,我写的这篇跟他们侧重点不一样 Tree Shaking相关的基础知识 1 w ...
- Vue.JS快速上手(组件生命周期)
一.什么是组件 组成网页独立功能基本单元(片段), 复用.维护.性能, Vue.js中的组件就是一个Vue的实例,Vue中的组件包含data/methods/computed. 一个Vue.js的应用 ...
- excel快捷键如下:
ALT+ 空格键,然后按下 X ALT+ 空格键,然后按下 R 首先打开表格,在A1对角用鼠标左键单击,界面会全部选中,然后调整字体大小框里的数字,回车,表格就变大了. 同时按Alt和E,再按L ...
- QT如何发布应用程序和图标
1.程序图标 ①创建一个图标格式的文件,可以网上在线将普通的图形格式转成.ico 格式的图标文件 http://www.faviconico.org/ 这个网站可以在线转换png.jpg.gif文件为 ...
- 矩阵BFS
leetcode 1091矩阵BFS 在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1). 一条从左上角到右下角.长度为 k 的畅通路径,由满足下述条件的单元格 C_1, ...
- npm 设置同时从多个包源加载包的方法
随着前后端分离技术的发展成熟,越来越来越多的后台系统甚至前端系统采用前后端分离方式,在大型前后端分离系统中,前端往往包含大量的第三方js 包的引用,各个第三方包又可能依赖另外一个第三方包,因此急需要一 ...
- JAVA反序列化漏洞基础原理
JAVA反序列化漏洞基础原理 1.1 什么是序列化和反序列化? Java序列化是指把Java对象转换为字节序列的过程: Java反序列化是指把字节序列恢复为Java对象的过程: 1.2 为什么要序列化 ...
- 优雅的编码,使用Optional代替if-else
Optional是JAVA8引入的类,它其实是一个包装类,可以对所有对象进行包装, 包括null,这个特性使得我们编码可以优雅的解决空指针异常. 先编写一些测试类 class Student { pr ...
- ZBLOG PHP调用相关文章列表以及上一篇下一篇文章代码
如果是比较小的个人博客.专题类网站项目,老蒋还是比较喜欢使用ZBLOG PHP程序的,无论是轻便度还是易用性上比WordPress简单很多,虽然WP的功能很强大,比如强大的插件和主题丰富功能是当前最为 ...
- centos7 下安装 mysql5.7
由于CentOS7的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件. 下载命令: wget https://dev.mysql.com/get/mysql57-commu ...