Serverless 时代下微服务应用全托管解决方案

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
简介: 本文介绍了 Serverless 时代下微服务的发展以及过程中遇到的相对较复杂的需求,面对这些,阿里云 Serverless 应用引擎 SAE 将“Serverless”的理念发扬到了极致,从最底层的 IaaS、到上层的 K8s、应用 PaaS、CICD、微服务套件集成、可观测增强等等都做了“Serverless”化的托管,实现了 SAE 针对微服务场景的完整的解决方案。

作者:陈昕


Serverless 时代下微服务发展与挑战


1.png


期业务规模比较简单,大多团队开发采用单体应用,已经能够很好地满足团队的业务需求,并且能够快速迭代。但随着业务规模的不断增长,系统变得越来越复杂,单体应用逐渐无法满足线上生产的问题。比如电商业务中,如果将交易、支付,商品等所有功能都集中在单体应用中开发,有可能会出现发布简单商品功能影响到交易,从而对整个电商系统产生影响,给企业造成损失。


这个时候很多团队会把单体应用架构改为微服务的架构,解决单体应用的问题。但随着业务进一步发展,系统愈加复杂,加之新技术的到来,比如云原生时代下成了标准的 K8s 以及 容器镜像 Docker 等,研发运维投入会越来越大,需要保证几十甚至几百个服务正常运行与协作,这给运维带来了很大的挑战:


2.png


1、效率:随着应用规模的扩张,新的研发团队需要面临很多开发和测试中的复杂性问题。在团队协作上,不同应用团队之间如何更好地形成稳定的调用链路,在几十,几百甚至上千个应用的大规模场景里如何进行调用链路上应用的快速部署和灰度。此外,如此多应用的流量的处理、调用链路的跟踪和服务鉴权也非常影响效率。


2、稳定:微服务化之后,会出现调用链路上某核心应用出现问题,导致整体系统发生雪崩,而且有时缺少可视化、可观测性的系统来帮助快速定位分析问题,导致难以快速定位到出现问题的应用,造成长时间的损失;


3、成本:单体应用一般只需部署几台机器;到了微服务时代,随着应用数的剧增,出于可用性的考虑需要为每个应用保持一些冗余,比如一次大促中,一个调用链路会涉及到十几个应用,为了稳定性以及调用链路的安全,会进行整个链路应用的扩容,而实际上很多应用可能长时间没有流量,服务器空闲,导致巨大的成本浪费。 


面对微服务带来的这些问题和需求, Serverless 应用引擎在这方面都做了哪些工作? 带来哪些改变?


SAE 微服务应用全托管解决方案介绍

3.png


SAE 是面向微服务应用的 Serverless PaaS 平台。作为云平台,它能够为微服务应用进行全生命周期的托管。它能将 Serverless 和 K8s 本身的红利集中在一起,让微服务应用快速上线。以产品化的形式快速提供给用户,开箱即用,解决用户常见的微服务问题,提升研发效率。


4.png


SAE 提供了包含但不限于 CI/CD 流水线、微服务框架、 Spring Cloud、 Dubbo 、共享注册中心、K8s 容器以及诸多运维相关的功能,包含调用链、日志、告警、性能监控、流量的治理以及自动弹性等。它是 Serverless 框架与微服务进行深度结合的最佳实践的平台。


SAE 微服务功能和实践


底层能力:微服务功能增强


5.png


在 Serverless 时代下,微服务的趋势是客户端越来越薄,其中与服务治理、业务逻辑无关的部分被沉淀在 Java agent 等组件里,通过字节码的方式注入到业务中,对业务开发无侵入、无感知,并在过程中提供了丰富的微服务治理能力。比如流量管理相关的无损上下线、金丝雀发布、可视化数据上报等能力。


针对非 Java 场景,Java agent 也能够与不同的微服务框架进行通信。此外,与 Sidecar 之间的通信也正在不断完善建设中。


开发态实践:端云联调

image.gif

6.png


Serverless 应用引擎(SAE)基于 Alibaba CloudToolkit 插件+ 跳板机可以实现:


  • 本地服务订阅并注册到云端 SAE内置的注册中心;
  • 本地服务可以和云端 SAE 服务互相调用。 


在实现的时候用户需要有一个 ECS 代理服务器,实际注册的是 ECS 代理服务器到 SAE 的注册中心,IDEA 在安装 Cloudtoolkit 插件以后,在启动进程时,会在本地拉起一个通道服务,这个通道服务会连上 ECS 代理服务器,本地所有的请求都会转到 ECS 代理服务器上,云端对服务的调用也会通过 ECS 代理转到本地,这样就可以以最新的代码在本地断点调试,这就是云端联调的实现。


发布态实践:无损下线


在版本更换的过程中,SAE 是如何保证旧版本的微服务流量可以无损地下线掉?


7.png


上图是微服务注册和发行的整个流程,图中有服务消费者和服务提供者,服务提供者分别有 B1、B2 两台实例,服务消费者分别有 A1、A2 两台实例。


B1、B2 把自己注册到注册中心,消费者从注册中心刷新服务列表,发现服务提供者 B1、B2,正常情况下,消费者开始调用 B1 或者 B2,服务提供者 B 需要发布新版本,先对其中一个节点进行操作,如 B1,首先停止 Java 进程,服务停止过程又分为主动销毁和被动销毁,主动销毁是准实时的,被动销毁的时间由不同的注册中心决定,最差的情况可能需要一分钟。如果应用是正常停止,Spring Cloud 和 Dubbo 框架的 ShutdownHook 能正常被执行,这一步的耗时基本上是可以忽略不计的。


如果应用是非正常停止,比如说直接 Kill-9 的一个停止,或者是 Docker 镜像构建的时候,Java 进程不是一号进程,且没有把 Kill 信号传递给应用的话,那么服务提供者不会主动去注销节点,它会等待注册中心去发现、被动地去感知服务下线的过程。


当微服务注册中心感知到服务下线以后,会通知服务消费者其中一个服务节点已下线,这里有两种方式:注册中心的推送和消费者的轮巡。注册中心刷新服务列表,感知到提供者已经下线一个节点,这一步对于 Dubbo 框架来说不存在,但对于 Spring Cloud 来说,它最差的刷新时间是 30 秒。等消费者的服务列表更新以后,就不再调用下线节点 B。从第 2 步到第 6 步的过程中,注册中心如果是 Eureka,最差的情况需要消耗两分钟;如果是 Nacos,最差的情况需要消耗 50 秒。


在这个时间内请求都有可能出现问题,所以发布的时候会出现各种报错。


8.png


经过上面的分析,在传统的发布流程中,客户端有一个服务端调用报错期,这是由于客户端没有及时感知到服务端下线的实例造成的,这种情况主要是因为服务提供者借助微服务,通知消费者来更新服务提供的列表造成的。


9.png


那能否绕过注册中心,服务提供者直接通知服务消费者?答案是肯定的。SAE 做了两件事情,第一,服务提供者在应用发布前,会主动向服务注册中心注销应用,并将应用标记为已下线状态,将原来停止进程阶段的注销变成了 preStop 阶段注销进程。


接收到服务消费者的请求时,首先会正常处理本次请求,并且通知服务消费者此节点已经下线,在此之后消费者收到通知后,会立即刷新自己的服务列表,在此之后服务消费者就不会再把请求发到服务提供者 B1 的实例上。 


通过上面这个方案,就使得下线感知时间大大缩短,从原来的分钟级别做到准实时的,确保你的应用在下线时能够做到业务无损。


运行态实践:可观测


10.png


运行态的实例,服务的运行过程中会出现这样或者那样的问题,怎么去排查和解决它?


排查和解决的前提是必须具有强大的应用监控能力和诊断能力,SAE 集成了云产品 ARMS,能够让跑在上面的 Java 微服务看到应用的调用关系拓扑图,可以定位到你的 MySQL 慢服务方法的调用堆栈,进而定位到代码级别的问题。


比如一个请求响应慢,业务出现问题,它可以定位到是哪个请求、哪个服务、服务的哪行代码出现了问题,这样就能为解决问题带来很多便利。总的来说,就是我们要先有监控报警的能力,才能帮助我们更好地诊断服务运营过程中的问题。


客户案例

11.png


总结

本文介绍了 Serverless 时代下微服务的发展以及过程中遇到的相对较复杂的需求,面对这些,阿里云 Serverless 应用引擎 SAE 将“Serverless”的理念发扬到了极致,从最底层的 IaaS、到上层的 K8s、应用 PaaS、CICD、微服务套件集成、可观测增强等等都做了“Serverless”化的托管,实现了 SAE 针对微服务场景的完整的解决方案。


未来,SAE 会在微服务场景下做持续的能力增强,做出端到端的解决方案,降低开发者在面对微服务技术的时候的门槛,比如故障注入、全链路压测,多语言微服务为等等;在 Serverless 场景下,其实是将复杂度由用户交给了平台,所以怎么运维好这么多应用也是我们的核心能力,我们会持续投入,不断完善。

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
11天前
|
存储 人工智能 Serverless
函数计算进化之路:AI 应用运行时的状态剖析
AI应用正从“请求-响应”迈向“对话式智能体”,推动Serverless架构向“会话原生”演进。阿里云函数计算引领云上 AI 应用 Serverless 运行时技术创新,实现性能、隔离与成本平衡,开启Serverless AI新范式。
202 12
|
6月前
|
SQL 分布式计算 Serverless
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
鹰角网络为应对游戏业务高频活动带来的数据潮汐、资源弹性及稳定性需求,采用阿里云 EMR Serverless Spark 替代原有架构。迁移后实现研发效率提升,支持业务快速发展、计算效率提升,增强SLA保障,稳定性提升,降低运维成本,并支撑全球化数据架构部署。
553 56
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
|
4月前
|
存储 编解码 Serverless
Serverless架构下的OSS应用:函数计算FC自动处理图片/视频转码(演示水印添加+缩略图生成流水线)
本文介绍基于阿里云函数计算(FC)和对象存储(OSS)构建Serverless媒体处理流水线,解决传统方案资源利用率低、运维复杂、成本高等问题。通过事件驱动机制实现图片水印添加、多规格缩略图生成及视频转码优化,支持毫秒级弹性伸缩与精确计费,提升处理效率并降低成本,适用于高并发媒体处理场景。
218 0
|
6天前
|
人工智能 运维 安全
聚焦 AI 应用基础设施,云栖大会 Serverless AI 全回顾
2025 年 9 月 26 日,为期三天的云栖大会在杭州云栖小镇圆满闭幕。随着大模型技术的飞速发展,我们正从云原生时代迈向一个全新的 AI 原生应用时代。为了解决企业在 AI 应用落地中面临的高成本、高复杂度和高风险等核心挑战,阿里云基于函数计算 FC 发布一系列重磅服务。本文将对云栖大会期间 Serverless+AI 基础设施相关内容进行全面总结。
|
17天前
|
人工智能 Kubernetes 安全
重塑云上 AI 应用“运行时”,函数计算进化之路
回顾历史,电网的修建,深刻地改变了世界的经济地理和创新格局。今天,一个 AI 原生的云端运行时的进化,其意义也远不止于技术本身。这是一次设计哲学的升华:从“让应用适应平台”到“让平台主动理解和适应智能应用”的转变。当一个强大、易用、经济且安全的 AI 运行时成为像水电一样的基础设施时,它将极大地降低创新的门槛。一个独立的开发者、一个小型创业团队,将有能力去创造和部署世界级的 AI 应用。这才是技术平权的真谛,是激发全社会创新潜能的关键。
|
运维 Cloud Native 关系型数据库
活动回顾|阿里云 Serverless 技术实战与创新成都站回放&PPT下载
7月29日“阿里云 Serverless 技术实战与创新”成都站圆满落幕。可免费下载成都站|阿里云 Serverless 沙龙演讲 PPT。
|
人工智能 弹性计算 运维
阿里云宣布 Serverless 应用引擎 SAE2.0 将公测上线,多款产品全新升级
阿里云宣布 Serverless 应用引擎 SAE2.0 将公测上线,多款产品全新升级
70539 53
|
人工智能 Serverless 开发者
阿里云丁宇:云上开发成为主流,Serverless 定义新范式
阿里巴巴研究员、阿里云智能云原生应用平台总经理丁宇,在阿里云峰会·粤港澳论坛上的发言。
阿里云丁宇:云上开发成为主流,Serverless 定义新范式
|
人工智能 弹性计算 运维
阿里云容器服务 Serverless 版(ACK Serverless)全新升级
阿里云容器服务 Serverless 版(ACK Serverless)全新升级
1743 10
|
弹性计算 人工智能 运维
阿里云宣布 Serverless 应用引擎SAE2.0 将公测上线
7月31日,阿里云智能云原生应用平台负责人丁宇宣布,Serverless 应用引擎 SAE2.0 将于8月7日公测上线,开源版将于9月30日发布。本次升级围绕极简体验、标准开放、极致弹性三大优势展开,应用冷启动全面提效,支持缩容到 0,应用成本下降 40% 以上。
阿里云宣布 Serverless 应用引擎SAE2.0 将公测上线

相关产品

  • 函数计算