作者:黛忻
本文主要介绍阿里云 Serverless 应用引擎(以下简称 SAE )如何帮助企业跨越技术鸿沟,从传统应用架构无感升级到 Serverless 架构,以更高效、更经济的方式进行转型,快速进入云原生快车道,让 2 人的研发团队享受 2000 人技术团队的红利。
打破 Serverless 落地边界 SAE 1.0 让大规模微服务 on Serverless 触手可及
早在 2018 年的 11 月,阿里云 SAE 作为业界首款面向应用的 Serverless PaaS 产品孵化诞生,产品初衷是帮助 PaaS 层用户屏蔽 K8s 复杂度、降低成本提升弹性效率。SAE 以应用为中心,提供了面向应用的 UI 和 API,不改变应用编程模型和部署方式,保持了客户在传统服务器上一致的开发部署体验,还能方便的进行本地开发调试/监控,极大地降低了客户使用 Serverless 的门槛,能做到零改造平滑迁移企业在线应用,零门槛容器化。
SAE 的出现帮助 Serverless 从专用到通用,让 All on Serverless 成为可能。它打破了 Serverless 的落地实施边界,使得 Serverless 不再是前端全栈、小程序的专宠,后台微服务、SaaS 服务、物联网应用等一样也可以构建在 Serverless 之上,天然适合企业核心业务的大规模落地。凭借 Serverless PaaS 的先发优势,阿里中间件十几年来在微服务领域的沉淀和 MSE 合作加持,SAE 1.0 深受微服务客户青睐,广受好评。
SAE 2.0 全新升级更快更省更易用,进一步普惠企业和开发者
随着 Serverles 的逐渐普及,更多的企业和开发者跃跃欲试 Serverless,他们对成本越来越敏感、对体验要求更简单、对效率要求更高。五年后 SAE 重磅推出了 2.0 全新版本,重点特性包括:更丰富的适用场景、更极致的弹性效率,更低价的成本、更友好的开发者体验。
更丰富的适用场景: 除支持开源微服务/XXL -job、ElasticJob、Spring Task 等无缝迁移外,SAE 2.0 新增支持 Web 应用类型,从实例托管到流量托管。
更极致的弹性效率: SAE 2.0 中的 Web 应用实现了百毫秒级弹性伸缩,根据流量自适应调整资源使用。
更低价的成本: SAE 2.0 中的 Web 应用提供闲置计费能力,无请求时 CPU 不计费,部分场景下还支持缩容到 0,降本可达 40% 以上,这对于新兴的业务以及一些创新创业的公司更加友好。
更友好的开发者体验: 产品使用简单,零改造迁移,秒级创建应用,一键灰度。提供S2A、CLI 等丰富的平台工程能力,助力研发运维提效 50%。
弹性效率升级:百毫秒弹性能力,完胜开源 K8s HPA/Knative
Serverless 架构的一个巨大技术红利就是弹性能力。弹性从广义上讲,让 IT 能力轻松跟上用户的业务发展;从狭义上讲,则带给用户无与伦比的灵活性。天下武功,唯快不破。SAE 1.0 基于 K8s HPA 做到了 5s+ 左右的弹性效率,满足了绝大多数业务场景的需求。但仍然存在一些延时极其敏感场景:如秒杀、微博热点事件、视频直播等,客户还是存在资源浪费或者稳定性风险。
SAE 2.0 在 1.0 标准 K8s 交付链路的基础上,全新自研了一套极速交付系统,目前先在 Web 应用场景落地。自从上线以来,受到了广大客户的一致好评,都纷纷表示 2.0 创建应用/弹性扩容简直太丝滑了。
弹性响应更极速: 原生 K8s HPA 和 Knative KPA 受限于监控指标采集间隔定期上报的机制,都存在弹性决策动作滞后的问题,SAE 2.0 中通过自研的实时调度模块,实时感知 HTTP 请求数的变化,及时决策扩缩容行为和扩缩容目标。
资源生产更极速: 为了实现百毫秒级交付,SAE 2.0 在 K8s 的基础上专门设计一套全新的资源极速交付系统,相比 K8s 单实例的交付时延降低 95% 以上、集群交付吞吐提升了 20 倍以上。为此 SAE 重点优化了两方面能力:
- 针对安全沙箱容器,2.0 抛弃传统的 Pod 冷启动模式,对沙箱提前池化,在交付时,复用池化沙箱并采用原地规格变配、网络动态绑定等技术快速交付,同时通过沙箱模板,优化了沙箱池化的并发和速度。
- 针对交付链路,相比 K8s 异步资源交付,2.0 的资源极速交付系统在设计采用了同步交付模式,链路更简洁高效,极大提升了资源交付的确定性。
流量接入更极速: 以往在 ECS 模式或者 K8s 架构下,新扩容的实例都会通过 SLB 的 OpenAPI 被自动加到后端虚拟服务器组,整个过程是异步实现,新实例在秒级后才能承接业务流量。SAE 2.0 通过实时的调度系统+流量网关,可以让新实例承载业务流量更及时。
降本策略升级:提供闲置计费和缩容到 0,单实例的生产应用也能降本
降本是企业和开发者越来越关注的话题,没有最便宜只有更便宜。业界通用的弹性能力粒度都是到主机/实例级别,对一些访问量低但又需要生产保活的业务不太友好,通过技术释放的成本红利非常有限。
SAE 2.0 在 Web 应用场景率先提供了闲置计费和缩容到 0 的能力,让单实例的生产应用也能降本 40%。 SAE 2.0 采用实例并发度指标作为默认的扩缩容策略,更好的匹配实际请求和提升资源利用率。基于 HTTP 请求纵向伸缩 VCPU 的实现,在应用有请求时分配 CPU ,无请求时 CPU Freeze 到 0(CPU 不计费),能让一些访问量极少的生产应用节省大量的闲置成本。如果Web应用自身的业务延时非常不敏感或者能接受小概率的流量有损(SAE 本身也会通过延迟销毁实例一定程度上缓解流量风险),还可以直接将应用缩容到 0,将降本进行到底。
开发者体验升级:基于 BuildPacks 自动检测构建,提供一站式 Source to Application 能力
容器改变了传统的应用开发交付模式,如今开发人员不仅要构建应用,还要负责 CD 部署。Dockerfile 的编写和持续维护对一些中小型客户来说上手难度很大,再加上集成对接 Jenkins 时一系列的脚本编写、手动配置和运维工作,非常繁琐,占用了开发人员大量的精力。
SAE 2.0 内置了一站式 Source to Application 能力,构建类型支持 Dockefile 和 BuildPacks 自动检测构建两种,后者也是 SAE 相对其他 CD 平台最大的优势。基于 BuildPacks 技术,绝大多数应用只用配置源码仓库+构建触发规则即可,对应的 Buildpack 能自动检测应用实际的 Runtime 类型(Java/PHP/Python/NodeJS/Go等)+第三方包管理工具(Maven、NPM 等),然后自动初始化初始化依赖,编译代码和构建镜像,导出生成应用的新版本。BuildPacks 模式无需客户编写 Dockerfile,极大的降低了使用门槛,减少了一系列集成配置和运维工作,简化了镜像构建的过程,让开发人员可以更专注于业务开发。
微服务治理能力升级:启动更快,运行更稳,SAE+ MSE 是 Serverless 微服务架构最佳实践
区别开源自建微服务,SAE +MSE 提供了开箱即用的历经双 11 考验的全套微服务治理能力,客户无需考虑框架选型、更无需考虑数据隔离、分布式事务、熔断设计、限流降级等,也无需担心社区维护力度有限二次定制开发的问题。能做到 Spring Cloud/Dubbo 零改造无缝迁移。开源之上,我们还增强了无损上下线、服务鉴权、全链路灰度等高级特性。
SAE 2.0 继续深耕微服务,通过集成 MSE,专项治理了微服务 Agent 启动时长,目前微服务应用启动耗时减少了 50%,效果显著。同时完善了微服务无损上线的小流量预热和延迟注册等一系列能力,让运行时更稳定。通过集成 MSE Serverless 网关+注册中心,主打一个完整的 Serverless 微服务架构最佳实践(从网关-注册中心-应用托管),开箱即用,已成为诸多微服务应用上云的首选。
千行百业选择 SAE,跨越技术鸿沟深度用云像用水电煤一样简单
“我们希望让用户做的更少而收获更多,通过 Serverless 化,深度用云就像用水电煤一样简单” ,这也是 SAE 产品五年以来一直坚持的产品理念:让客户不用修改任何代码,不改变原有应用部署方式,零改造平滑迁移企业在线应用,零门槛容器化和 Serverless化,免运维,开箱即用。 五年来,SAE 成就了阿里云各行各业成千上万家客户的应用架构无感升级,也沉淀了产品侧宝贵的最佳实践:
- 互娱、电商、新零售行业基于 SAE 的极致弹性抗住突发洪峰流量,典型案例如南瓜电影7天内全面 Serverless 化实践。
- 在线教育、地产、互联网行业基于 SAE 实现低门槛微服务架构转型,零门槛容器化,典型案例如广州小迈 Game on Serverless 落地实践 。
- 餐饮出行行业潮汐特性明显,借助 SAE+ECS/SAE+容器混合部署,实现弹性降本。
- 金融科技,传统行业借助 SAE+Jenkins 从 0 到 1 打造云原生 DevOps,典型案例如视野数科等。
未来展望
当然,不少客户也对 SAE 的未来充满了期待:比如平台侧已经自动帮客户把 1.0 微服务应用平滑迁移到了 2.0,客户希望后续两者的成本和使用体验上也能拉齐。再比如继续优化 Java 冷启动时长,SAE 联合上下游数据库、存储、网络等产品提供一套完整的 Serverless 弹性应用架构,更多的释放 Serverless 技术红利。我们正在探索和测试验证中,会继续砥砺前行,让更多的客户上云和深度用云时都践行 SAE First!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。