做者 | 赵庆杰(卢令)
来源 | Serverless 公众号前端
2020 年,咱们在 Serverless 底层基建上作了很是大的升级,好比计算升级到了第四代神龙架构,存储上升级到了盘古 2.0,网络上进入了百 G 洛神网络,总体升级以后性能提高两倍;BaaS 层面也进行了很大的拓展,好比支持了 Event Bridge、Serverless Workflow,进一步提高了系统能力。数据库
除此之外,咱们还与集团内十几个 BU 进行了合做共建,帮助业务方落地 Serverless 产品,其中包含 双11 核心的应用场景,帮助其顺利经过 双11 流量峰值大考,证实了 Serverless 在核心的应用场景下,依然表现得很是稳定。后端
为何在集团内部能快速实现规模化地落地 Serverless?首先咱们有两大前提背景:安全
第一个背景是上云,集团上云是重要的前提,只有上云才能享受到云上的弹性红利,若是仍是本身内部的一朵云,后续的起效降本其实很是难达成,因此 2019 年双十一阿里实现了核心系统 100% 上云,有了上云前提,Serverless 才有了发挥很是做用的空间。服务器
第二个背景是全面云原生化,打造了一个强大的云原生产品的云家族,对集团内部业务进行赋能,帮助业务达成了在上云基础上的两个主要目标:提升效能和下降成本, 2020 年天猫双十一核心系统全面云原生化,效率提高 100%,成本下降 80%。
网络
一个标准的云原生应用,从研发到上线到运维,须要完成上图中全部标橙色的工做项,才能完成正式的微服务应用上线,首先是 CI/CD 代码构建,另外是系统运维的可视化工做项目,不只要配置、对接,还需对总体数据链路进行流量评估、安全评估、流量管理等,这显然对人力门槛要求已经很是高。除此之外,为了提高资源利用率,咱们还须要对各个业务进行混部,门槛会进一步的提升。前端工程师
能够看出,总体的云原生传统应用,要实现微服务上线所须要完成的工做项,对于开发者来讲很是艰难,须要由多个角色进行完成,可是若是到 Serverless 时代,开发者只要完成上图中标蓝色的框 coding,后续剩下的全部工做项,Serverless 的研发平台能够直接帮助业务完成上线。
架构
提升效能主要指的是人力成本的节省,而下降成本则针对的是应用的资源利用率。普通应用咱们须要为峰值预留资源,但波谷就会形成极大浪费。在 Serverless 场景下,咱们只须要按需付费,拒绝为峰值预留资源,这是 Serverless 下降成本的最大优点。框架
以上两大背景和两大优点,符合技术上云的趋势,因此集团内部的业务方一拍即合,一些大的 BU 已经把 Serverless 落地升级为战役层面,加速业务落地的 Serverless 场景。目前在集团落地的 Serverless 场景已经很是丰富,涉及到了核心的一些应用、个性化推荐、视频处理,还有 AI 推理、业务巡检等等。
less
目前,集团内前端场景是应用 Serverless 最快、最广的场景,包含淘系、高德、飞猪、优酷、闲鱼等 10+ 以上 BU。那为何前端场景适合 Serverless 呢?
上图是全栈工程师的能力模型图,通常的微应用中须要有三个角色:前端工程师、后端开发工程师,运维工程师,三者共同完成应用的上线发布。为了提升效能,最近几年出现了全栈工程师的角色,做为全栈工程师,他要具有这三个角色的能力,不只须要前端的应用开发技术,还须要后端系统层面的开发技能,而且要关注底层的内核、系统资源管理等,这对于前端工程师来讲门槛显然很是高。
最近几年 Node.js 技术兴起,可以替代后端开发工程师角色,前端工程师只要具有前端开发能力,就能够充当两个角色,即前端工程师和后端开发工程师,但运维工程师仍然没法被取代。
而 Serverless 平台,解决的就是上图三角形结构中的底部三层,极大下降了前端工程师转变为全栈工程师的门槛,这对前端业务开发者来讲很是有诱惑力。
另一个缘由是业务特性符合,大部分的前端应用具备流量洪峰的特性,须要业务评估前置,存在评估成本;同时前端场景更新迭代快,快上快下,运维成本高;且缺少动态扩缩能力,存在资源碎片及资源浪费。而若是使用 Serverless,平台会自动帮你解决以上全部的后顾之忧,因此 Serverless 对前端场景的诱惑力很是大。
上图列举了前端落地的几个主要场景和技术点:
BFF 转换成 SFF 层:BFF 主要是 Backend For Frontend,前端工程师作主要运维,但到了 Serverless 时代,运维彻底交于 Serverless 平台,前端工程师只须要写业务代码,就能够完成这项工做。
瘦身:把前端的业务逻辑下沉到 SFF 层,由 SFF 层去作逻辑的复用,把运维的能力也交给 Serverless 平台,实现客户端轻量化,提效功能下沉。
云端一体化:一处代码多端应用,这是很是流行的开发框架,一样须要 SFF 做为支撑。
CSR/***:经过 Serverless 知足服务端渲染、客户端渲染等,来实现前端首屏的快速展示,Serverless 结合 CDN 总体能够做为前端加速的解决方案。
NoCode:至关于在 Serverless 平台上作了封装,只需拖拽几个组件,就能够搭建一个前端页面,每一个组件均可以用 Serverless 进行包装、功能聚合等,达到 NoCode 的效果。
中后台场景:主要是单体的富应用场景,单体应用能够彻底用 Serverless 模式进行托管,完成中后台应用上线,这一样也能够节省运维能力、减小成本。
在前端场景应用 Serverless 以后,coding 有哪些变化呢?
对前端有必定了解的都知道,前端通常分三层:State、View 和 Logic Engine,同时会把一些抽象的业务逻辑下沉到 FaaS 层云函数上,而后用云函数做为 FaaS API 来提供服务,在代码编写上能够抽象各种 Aaction,每一个 Aaction 能够有 FaaS 函数 API 提供服务。
以一个简单的页面为例,页面左侧是一些渲染接口,能够获取商品详情、收货地址等,这是基于 Faas API 实现的;右侧的是一些交互逻辑,好比购买、添加等,这也是 Faas API 能够继续完成的任务。
页面设计中,全部的 Faas API 不是只能为一个页面所使用,它能够为多个页面复用。复用这些 API 或者进行拖拽以后,就能够完成前端页面的组装,这对于前端来讲是很是方便的。
在前端应用 Serverless 以后,咱们把 Serverless 对前端的研发效能的提效简单总结为 1-5-10,其含义是:
1 分钟的快速开始:咱们把各种主要场景作一个总结,将其归类为应用模板,每一个用户或者业务方新起一个业务时,只须要选择相应的应用启动模板,就会帮助用户快速生成业务代码,用户只须要写本身的业务函数代码就能够快速开始。
5 分钟上线应用:彻底复用 Serverless 的运维平台,利用平台自然能力,帮助用户完成灰度发布等能力;而且配合前端网关、切流等完成金丝雀测试等功能。
10 分钟排查问题:基于上线以后的 Serverless 函数,提供业务指标或系统指标的展现,经过指标不只能够设置报警,还能够在控制台上给用户推送错误日志等,帮助用户快速定位问题、分析问题,10 分钟内掌握整个 Serverless 函数的健康状态。
前端实现 Serverless 的场景后效果如何?咱们将 3 款 APP 在传统应用研发模式下所须要的性能和工时与应用 Faas 场景以后进行对比,能够明显看到,在原有的云原生基础上,效能还能提高 38.89%,这对于 Serverless 应用或前端应用来讲效果很是可观,目前 Serverless 场景已经几乎覆盖整个集团内部,帮助业务方实现 Serverless 化,实现提升效能和下降成本两个主要目标。
在集团的 Serverless 落地过程当中,咱们发现了不少新的业务诉求,好比存量业务如何快速实现迁移并节省成本?执行时间是否能够调大或者调长?资源配置是否能够调高?等等,针对这些问题咱们提出了一些解决方案,基于这些解决方案咱们抽象出了产品的一些功能,接下来介绍几个比较重要的功能:
自定义镜像主要目的是实现存量业务的无缝迁移,帮助用户实现零代码改造,而且把业务代码彻底迁移到 Serverless 平台上。
存量业务的迁移是很是大的痛点,在一个团队内,不可能长期存在两种研发模式,这会形成极大内耗。想让业务方迁移到 Serverless 研发体系下,必须推出完全的改造方案,帮助用户实现 Serverless 体系改造,不只须要支持新业务使用 Serverless,还要帮助存量业务实现零成本快速迁移,因此咱们推出了自定义容器功能。
传统 Web 单体应用场景特性:
函数计算 + 容器镜像优点:
自定义容器功能,可让传统 Web 单体应用(好比 SpringBoot、Wordpress、Flask、Express、Rails 等框架)不需任何改造,就能够以镜像的方式迁移到函数计算上,避免低流量业务独占服务器形成资源浪费。同时也能够享受到无需为应用作容量规划、自动伸缩、免运费等效益。
高性能实例,减小使用限制,拓展更多场景。好比:代码包从原来的 50M 上升到 500M,执行时间从原来的 10 分钟提升到 2 小时,性能规格比原先提高 4 倍多,可以最大支持 16G 和 32G 的大规格实例,来帮助用户运行一些很是耗时的长任务等等。
函数计算服务了不少场景,在服务过程当中咱们收到了不少诉求,好比约束条件多、使用门槛高、计算场景资源不足等问题。因此针对这些场景,咱们推出了性能实例功能,目标是减小函数计算应用场景的使用限制,下降使用门槛,而且在执行时长上、各类指标上,用户能够灵活配置、按需配置。
目前咱们支持的 16 核 32G 彻底具有与同规格 ECS 如出一辙的计算能力,能够适用于高性能的业务场景如 AI 推理、音视频转码等。这个功能对后续拓展应用场景来讲很是重要。
挑战:
目标:
作法:
主打场景:
计算型任务、long-running 任务、弹性伸缩不敏感任务。
优点:
性能实例除放宽限制外,仍保留当前函数计算产品所具有的全部能力:按量付费、预留模式、单实例多请求、多种事件源集成、多可用区容灾、自动伸缩、应用的构建部署及免运维等。
链路追踪功能包括:链路还原、拓扑分析、问题定位。
一个正常的微服务,不是一个函数就能完成全部工做,须要依赖上下游服务。在上下游业务都是正常的状况下,通常不须要链路追踪,可是若是下游服务出现了异常,如何定位问题?这时就能够依赖链路追踪功能,迅速分析上下游的性能瓶颈或者定位问题的发生点等。
函数计算也调研了不少集团内外的开源技术方案,目前已经支持 X-trace 功能,而且兼容了开源方案,拥抱开源,提供了兼容 OpenTracing 的产品能力。
上图是链路追踪的 Demo 图,经过计算 tracing 能够可视化看到后端服务的数据库访问开销,避免大量服务间的复杂校验关系增长问题排查的难度等。函数计算还支持函数代码级的链路分析能力,帮助用户优化冷启动、关键代码实现等。
Serverless 产品在业务角度上带来了巨大收益,可是封装也带来了一个阶段性难题——黑盒问题。当咱们向用户提供链路追踪技术,同时也把黑盒问题暴露给用户,用户也能够经过这些黑盒问题提高自身的业务能力。这也是 Serverless 将来提升用户体验的方向,后续咱们会在这方面继续加大投入,下降用户使用 Serverless 的成本。
挑战:
FC + x-trace 主要优点:
在 Serverless 场景下,咱们提供了离线任务处理、消息对立消费等功能,在函数计算中这类功能的使用率占比 50% 左右。在大量消息消费中,存在不少异步配置问题常常被业务方挑战,好比,这些消息是从哪里来?又去到哪里?被什么服务消费?消费的时间?消费的成功率如何?等等。这些问题的可视化/可配置,是目前须要主要解决的重要课题。
上图为异步配置的工做原理,首先从用户指定的事件源开始触发异步调用,函数计算当即返回请求 ID,同时也能够调用执行函数,返回执行结果到函数计算或者消息队列 MNS 里面。而后经过事件源可配置触发器等等,这些效果或者主题消费,能够进行消息的再次消费。好比,若是一个消息处理失败了,能够配置一下进行二次处理。
典型的应用场景:
做者简介:
赵庆杰(卢令),目前就任于阿里云云原生 Serverless 团队,专一于 Serverless 、PaaS,分布式系统架构等方向,致力于打造新一代的 Serverless 技术平台,把平台技术作到更加普惠。曾就任于百度,负责内部最大的 PaaS 平台,承接了 80% 的在线业务,在 PaaS 方向,后端分布式系统架构等领域有丰富的经验。
本文整理自【Serverless Live 系列直播】1 月 26 日场
直播回看连接:https://developer.aliyun.com/topic/serverless/practices