Serverless 时代下大规模微服务应用运维的最佳实践

本文涉及的产品
简介: 原来的微服务用户需要自建非常多的组件,包括 PaaS 微服务一些技术框架,运维 IaaS、K8s,还包括可观测组件等。SAE 针对这些方面都做了整体的解决方案,使用户只需要关注自己的业务系统,这极大地降低了用户使用微服务技术的门槛。

作者 | 陈涛

微服务架构的优点和痛点

1、微服务架构的诞生背景


1.jpg


回到互联网早期时代,也就是web1.0时代,当时主要是一些门户网站,单体应用是当时的主流应用,研发团队相对较小,这时候的挑战在于技术的复杂度,以及技术人员的匮乏。


到了新世纪互网时代,出现了较大规模的一些应用,比如社交、电商等,流量和业务的复杂度也大幅增加,出现了几百甚至上千人的研发团队,研发团队扩大之后,协作问题成为困扰。SOA 解决方案是互联网的产物,其核心在于分布式、拆分等。但是因为 ESB 这样一些单点的组件,所以没有得到很好的推广。阿里巴巴在当时推出的 HSF、开源的Dubbo 等技术,其实是类似于分布式的一个解决方案,当时就已经有了微服务架构的理念。

微服务架构正式名称的诞生是在移动互联网时代,这时的生活已经实现全面互联网化,各种各样的生活类 APP 涌现,网民以及流量复杂度相对于新世纪互联网时代显著增强。另外,较大规模的研发团队也已成为主流。这时候,大家普遍都对效率有了更高的追求,而不只是原来只有几个巨头需要有这方面的技术。微服务架构以及微服务技术的推出,如 Spring  Cloud、Dubbo 等框架的普及,极大地推广了微服务技术。

现在我们已经进入全面的数字化时代,社会全面互联网化,各种各样的单位(包括政企、相对传统的单位)都需要较强的研发能力。流量的挑战、业务复杂度的挑战、研发团队的扩大等,使得大家对效率有了更高的要求。这时候微服务架构得到了进一步的推广和普及。


微服务架构经过这么多年的发展,是经久不衰的一项技术,为什么它能够有这样持续的发展?


2、微服务架构的优点

2.jpg


我们来回顾一下微服务架构和单体架构的区别,以及微服务架构的核心优势。

单体架构核心的问题在于冲突域太大,包括共享代码库。在研发过程中特别容易冲突;边界和模块的规模不清,使得团队效率也会降低。

而在微服务架构下,核心就在于拆分,包括解耦的研发态,解耦的部署态,极大地释放了团队的研发效率。大道至简,这也是微服务架构为什么能够持续发展的一个原因。

3、微服务时代痛点


3.jpg


根据复杂性守恒定律,我们解决了一个问题,问题会以另一种形式出现,我们又需要去解决。可以看到,微服务时代下会引入非常多的一些痛点,核心就是稳定性。因为从原来的一些本地调用改成远程调用以后,可能会发生稳定性的点激增,包括调度放大,即可能因为底层的一些远程调用问题,造成上层的一些不稳定,以及期间需要做的限流降级、调用链等。

在微服务时代定位一个问题的复杂度,也会成指数级的一个增长,这里面可能还需要服务治理。另外如果没有较好的设计和预先的一些设想,可能会出现微服务应用的爆炸,包括研发人员和测试人员之间的协作也都会成问题。


4.jpg


微服务技术经过这么多年的发展,业界其实已经有了一些解决方案。

如上图显示,如果要比较好地玩转微服务技术,除了开发自己的业务系统以外,可能还要配套地搭建多个系统,包括CI/CD、发布系统、研发流程、微服务组件相关的一些工具,以及可观测性相关的实时监控、告警系统、服务治理、调用链等等,还需要运维基础的 IaaS 资源。在这个时代,为了更好地运维 IaaS 资源,可能还需要自己维护一个K8s 集群。

所以说,在这样的背景下,很多企业会选择搭建一个运维团队,或者中间件团队,或者说由一些后端研发同学兼职。但是试想,有多少企业对自己内部搭建的这套系统是满意的?系统的迭代效率是多少,有没有踩到过一些开源的坑,这些坑现在有没有解决?这些应该是在企业的CTO、架构师心中一个持续的痛点。


Serverless时代下的解决方案

1、Serverless时代


5.jpg

Serverless 从2012年第一次提出,到 2014年 推出了 Lambda 这样一个引爆性的产品后,短暂地达到了一个影响力的顶峰。但是这样一个新生事物,突然到真实的、复杂的生产环境中,其实有许多不适应,包括需要改善的地方,所以后续几年它可能要进入一个低谷。


但是,Serverless 的“将简单交给用户,复杂留给平台”的理念,其实是非常正确的一个方向。所以在开源界包括业界,其实都在持续性地进行 Serverless 方面的一些探索和发展。

阿里云在2017年推出了函数计算(Function Compute,FC),在2018年推出了Serverless应用引擎 SAE,在 2019年以及后续的这些年,阿里云持续地在 Serverless 领域进行投入,支持了包括镜像部署、预留实力、微服务场景等。


2、Serverless 市场概况


6.jpg


在2021年最新的 Forrester 评测中,阿里云 Serverless 产品能力是中国第一、全球领先,阿里云的 Serverless 用户占比也是中国第一。这侧面说明了阿里云 Serverless 是已经越来越多地进入到企业真实的生产环境中,越来越多的企业认可 Serverless 以及阿里云 Serverless 的能力和价值。


3、SAE解决方案


7.jpg


可以看到,在传统的微服务架构下面,企业要用好微服务相关的技术需要自己研发非常多的解决方案,那么在 Serverless 时代下,在 SAE 这个产品里面是怎么解决的?


我们可以看到,SAE 将 Serverless 这个理念发扬到了极致,不仅仅托管了 IaaS 资源,包括上层的 K8s,另外还集成了白屏化的 PaaS 以及企业级微服务相关的套件和可观测相关的套件。在 SAE 整体解决方案里面,针对这些都进行了很好的集成,给用户提供了一个开箱即用的微服务解决方案,让企业和开发者能够很简单地使用微服务。


1、0 门槛 PaaS


8.jpg


图中可以看到,SAE 在最上层给用户提供的是一个白屏化的操作系统,它的设计理念非常符合企业一般的 PaaS 系统,包括发布系统或者一些开源的 PaaS 系统,这样极大地降低了企业上手 SAE 的门槛,甚至可以说零门槛,包括它也集成了阿里巴巴最佳的一些发布,即发布三板斧——可观测、可灰度、可回滚。


另外它也提供了一些企业级能力的增强,包括命名空间环境隔离、细粒度的权限控制等等。从图中可以看到,在一个企业里面,如果有两个相互比较独立的模块,完全可以通过命名空间进程进行隔离。


2、微服务治理增强


9.jpg


在微服务治理增强方面,特别是在 Java 语言,SAE 采用了一个 agent,对用户来说相当于是无侵入、无感知、零升级,而且 agent 的全面兼容开源,使用户几乎在无修改的情况下,就可以使用无损下限、API 管理、限流降级、链路追踪等等能力。


3、前后端全链路灰度


10.jpg


这里展开两个能力,第一个能力是前后端全链路灰度。SAE 借助前面提到的 agent 技术,从 web请求到网关到 consumer 到 provide 进行了一个全链路的打通,使用户可以通过很简单的白屏化配置,就可以实现一个灰度发布场景。而这样的技术如果企业需要自建,这里面的复杂度大家应该是非常清楚的。


4、CloudToolkit 端云联调


11.jpg


第二个能力就是 CloudToolkit 的端云联调。大家都知道微服务的场景下面应用数量是呈现一个爆炸的趋势,如果本地需要开发,需要启动那么多的应用,如何能够安全便捷地联调云上的一个服务?现在借助 CloudToolkit,用户可以很简单地在本地就打通云上的环境,进行一个端云联调,极大地降低开发测试的门槛。


5、强大的应用监控 & 诊断


12.jpg


在微服务的场景下,因为微服务的急剧发散、调用链路的极度增长,在有问题的场景下面定位问题是非常复杂的。而 SAE 集成了阿里云各种各样的可观测产品,包括Prometheus、IaaS、SLS、基础监控等,在 Tracing Logging Metrics 等方面都提供了丰富的解决方案,包括请求链路的查询,常用的诊断场景的指标分析,基础监控、实时日志、事件通知等等,这些都能极大地降低企业在微服务台运行场景下的一些日常定位问题。

SAE的技术原理和极致弹性建设


前面已经针对三部分,也就是零门槛PaaS、企业级微服务套件、可观测进行了一个讲解。那么现在要介绍 Serverless 的一个核心模块,也就是 IaaS 层面上免运维以及弹性能力的建设。


1、SAE 业务架构


13.jpg


通过这张 SAE 的业务架构图,大家就可以相对比较清晰地看出,在SAE里面 IaaS 资源包括存储、网络等是不需要用户关心的。另外 SAE 也托管了 K8s 这个 PaaS 层的一个组件,相当于用户也不需要自己去运维 K8s 。在 K8s 层之上,SAE 提供了微服务治理、应用生命周期管理等增强的能力。另外在弹性方面,SAE 的弹性能力达到了15秒,相信在很多企业级的场景下,这已经能帮助开发者较好地应对一些突发流量的情况。另外通过多套环境以及一些最佳实践,可以达到一个降本增效的效果。

2、SAE 技术架构


14.jpg

那么 SAE 是怎么建设免运维,对用户来说,相当于不需要托管的一个 IaaS 资源以及 K8s 资源呢?

上图中可以看到,SAE 底层其实是采用了一种安全容器的技术,相比于Docker,安全容器相当于提供了虚拟机级别的一个安全解决方案。在 RunC 场景下,由于共享内核其实在公有云产品上,a用户有可能穿透到 b 用户的一个容器内,造成一些安全风险。采用安全容器的技术,也就是虚拟机相关的安全技术,达到了一个生产级别的安全隔离,包括安全容器也进入了 K8s 以及容器的生态。这样安全容器+容器生态的结合,就实现了较好的安全+效率的一个平衡。


另外在存储和网络的隔离方面,SAE 不仅仅需要考虑传统的 K8s 上的网络隔离,也需要考虑在公有云产品下,大部分用户已经在公有云上有非常多的一些存储资源、网络资源,这些也需要进行一个打通。

SAE 采用了云产品的 ENI网卡技术,将 ENI网卡直通到了安全沙箱内,这样相当于用户不仅仅实现了一个计算层的隔离,也实现了网络层的打通。

15.jpg

可以看到现在主流的安全容器技术有 Kata、Firecracker、gVisor 等等,在 SAE 里面是采用了最早也是最成熟的 Kata 技术来实现一个计算成安全的隔离。另外安全容器不仅实现了一个安全的隔离,也实现了一个性能隔离和故障隔离。

举一个比较好理解的例子,在 RunC 大家共享内核的场景下,一个用户的 Container 造成了一些内核的故障,是直接可能影响到物理机的。在 SAE 使用安全容器基础上就没有这方面的风险,最多只会影响到那一个安全容器。


3、极致弹性 极致成本


下图中可以看到,如果弹性效率达到了一个极致,用户的成本也可以达到一个极致。通过左右两边的图的对比,大家可以理解弹性对用户成本可以达到的一个效果。

16.jpg


1、SAE 极致弹性建设:部署 & 重启


17.jpg


SAE 在弹性方面做了哪些事情呢?可以看到传统的 K8s 的一个 Pod 的创建过程需要经过调度、init container的创建、拉取用户镜像、创建用户容器、启动用户容器、应用运行等等阶段,它虽然符合 K8s 的设计理念和规范,但是在生产环境下,对一些需要相对比较要求效率的场景,其实就不太满足企业级的要求。而 SAE 借助于阿里巴巴开源里面的 CloneSet 组件的原地升级策略,相当于不需要重建整个 Pod,而只需要重建里面的 container 省去了调度以及 innt containr 创建的一个过程,部署效率达到了 42% 的提升。


2、SAE 极致弹性建设:弹性扩容


18.jpg


在镜像预热场景 SAE 也实现了一个并行的调度。可以看到,在标准的场景下,调度到用户拉取镜像是一个串行的过程。那么在此做了一个优化,就是在识别到 pod 即将调入到单个物理机的时候,它就会并行地开始拉取用户的镜像,这样也可以达到一个弹性效率 30% 的提升。


3、SAE 极致弹性建设:Java启动加速


19.jpg


那么在应用启动这个阶段,我们也做了一些弹性效率能力提升的事情。比如说 Java 的应用,在 Serverless 场景下其实一直有启动慢的痛点,核心在于 Java 需要一个个加载。而在一些企业级的应用里面,针对成千上万的 class 的加载,这肯定是一个相对较缓慢的过程。


SAE 结合阿里巴巴开源的 Dragonwell 实现了 App CDS 的技术,它会在应用第一次启动的时候,将 class 加载打到一个压缩包中,后续的应用加载,只需要加载压缩包即可,免去了大量 class 的一个串行化的加载,实现了部署效率 45% 的一个提升。


4、SAE极致弹性建设


20.jpg


最后在应用运行态,我们也做了一些弹性方面的增强。微服务的应用通常会需要配置非常多的一些线程,这些线程通常和 Linux 的底层线程是一一对应的。在高并发场景下,这里面就会有较大的线程切换的开销。SAE 结合阿里巴巴开源的 Dragonwell,WISP 线程的技术,将上层的几百个线程对应到了底层的十几个线程,极大的降低了线程切换的一个开销。


上图中是我们一个压测的数据。红线就是使用了 Dragonwell、WISP 的技术,可以看到运行效率有 20% 左右的提升。


以上就是 SAE 在 Serverless、IaaS 托管以及 K8s 托管方面,还有在弹性效率方面建设的一些技术原理和效果。


总结和展望


原来的微服务用户需要自建非常多的组件,包括 PaaS 微服务一些技术框架,运维 IaaS、K8s,还包括可观测组件等。SAE 针对这些方面都做了整体的解决方案,使用户只需要关注自己的业务系统,这极大地降低了用户使用微服务技术的门槛。


后续 SAE 针对每个模块也会持续地的做能力的建设。包括:


  • 在零门槛 PaaS 方面,微服务会持续做一些云产品的集成,包括 CICD 工具链。另外也会做企业级的能力增强,比如审批流等。


  • 在 Serverless 免运维、极致弹性方面,我们也会提供越来越多的弹性能力、弹性指标、弹性效率,这些也都会持续地建设。另外也会提供类似 AI 预测这样的弹性解决方案,降低用户设置弹性指标的时候的心智负担。


  • 在微服务生态方面,我们也会和微服务的企业套件做更多的集成,进一步降低大家使用微服务技术的门槛,比如说混沌工程、远程调试能力增强等。


最后在可观测方面,SAE 相当于运维了用户的应用。那么可观测对于 SAE 本身或者说对平台本身也是一个非常重要的能力,在这方面我们会持续地做相应的一些监控告警,包括预案和灰度建设等等。对用户来说,也需要在SAE上托管它的应用,这就要求产品能够降低用户在使用这方面的门槛,后续会建设应用大盘、事件中心等等。



解决方案咨询技术交流群:搜索钉钉群号 31704055 加入,可获取云原生详细解决方案资料与专家答疑。*进群后请备注:公司-职位-姓名

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
2月前
|
Kubernetes 开发者 Docker
构建高效微服务架构:Docker与Kubernetes的协同应用
【5月更文挑战第30天】 在当今软件开发领域,微服务架构已成为实现系统模块化、提升可维护性及扩展性的关键策略。本文深入探讨了如何通过Docker容器化技术和Kubernetes集群管理,共同构建一个既高效又可靠的后端微服务环境。我们将剖析Docker和Kubernetes的核心功能,以及它们如何相辅相成,支撑起现代化的云原生应用程序部署和管理。文章还将提供具体实践案例,帮助开发者理解将理论应用于实际开发过程中的步骤和考虑因素。
|
5天前
|
存储 消息中间件 API
“论微服务架构及其应用”写作框架,软考高级,系统架构设计师
论微服务架构及其应用近年来,随着互联网行业的迅猛发展,公司或组织业务的不断扩张,需求的快速变化以及用户量的不断增加,传统的单块(Monolithic)软件架构面临着越来越多的挑战,已逐渐无法适应互联网时代对软件的要求。在这一背景下,微服务架构模式(MicroserviceArchitecturePattern)逐渐流行,它强调将单一业务功能开发成微服务的形式,每个微服务运行在一个进程中;采用HTTP等通用协议和轻量级API实现微服务之间的协作与通信。这些微服务可以使用不同的开发语言以及不同数据存储技术,能够通过自动化部署工具独立发布,并保持最低限制的集中式管理。
|
4天前
|
Kubernetes 测试技术 持续交付
深入理解微服务架构及其在现代后端系统中的应用
本文将深入探讨微服务架构的核心概念、设计原则以及如何在现代后端系统中实现和优化它。我们将从微服务的定义开始,逐步展开讨论其优势、面临的挑战,以及如何克服这些挑战。同时,文章还会涉及微服务与容器化技术、持续集成/持续部署(CI/CD)的协同作用,以及微服务架构的未来发展趋势。读者将获得对微服务架构全面而深刻的理解,并能够识别在实施过程中可能遇到的陷阱和解决方案。
24 1
|
11天前
|
机器学习/深度学习 人工智能 Java
【Sping Boot与机器学习融合:构建赋能AI的微服务应用实战】
【Sping Boot与机器学习融合:构建赋能AI的微服务应用实战】
17 1
|
4天前
|
消息中间件 监控 Java
使用Java构建微服务架构的最佳实践
使用Java构建微服务架构的最佳实践
|
2月前
|
机器学习/深度学习 设计模式 计算机视觉
深度学习在图像识别中的应用与挑战构建高效微服务架构:后端开发的新范式
【5月更文挑战第30天】 随着计算机视觉技术的飞速发展,深度学习已成为推动该领域进步的关键力量。本文旨在探讨深度学习在图像识别任务中的核心技术和面临的挑战,通过分析卷积神经网络(CNN)的结构和优化策略,以及新兴的对抗性网络和迁移学习等技术,揭示深度学习如何提高图像识别的准确性和效率。同时,文章还将讨论数据偏差、模型泛化能力和计算资源限制等问题对实际应用的影响。 【5月更文挑战第30天】 在本文中,我们将探讨一种现代软件工程实践——微服务架构。通过分析其核心原则和设计模式,我们旨在为开发者提供一个关于如何构建可扩展、灵活且高效的后端系统的指导。文章将详细讨论微服务的优势,挑战以及如何克服这些
|
2月前
|
存储 消息中间件 运维
单体应用与微服务的优缺点
单体应用(monolith application)就是将应用程序的所有功能都打包成一个独立的单元,可以是 JAR、WAR、EAR 或其它归档格式。
36 0
|
10天前
|
运维 监控 API
打造高效后端:微服务架构在现代应用中的实践
本篇文章探讨了微服务架构在现代应用中的实际应用,重点介绍了其优势、挑战以及最佳实践。通过具体案例和技术细节,我们将深入了解如何设计、实现和维护一个高效的微服务架构,以满足不断变化的业务需求。
23 0
|
2月前
|
监控 数据管理 持续交付
探索现代微服务架构的最佳实践
【5月更文挑战第28天】 随着软件开发的复杂性增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构应运而生,提供了模块化、独立部署的解决方案。本文将深入探讨微服务设计的核心原则,分析其优缺点,并分享构建和维护微服务系统的最佳实践,包括服务划分、通信机制、数据管理等关键领域。通过实例分析和经验总结,旨在为开发者和企业提供可靠的技术指导,以实现系统的可扩展性、弹性和易维护性。
|
15天前
|
设计模式 消息中间件 运维
微服务架构在后端开发中的应用与挑战
微服务架构作为一种现代软件开发方法,带来了灵活性、可扩展性和高效性,但同时也引发了诸如复杂性管理、数据一致性等新的挑战。本文深入探讨了微服务架构在后端开发中的应用场景,以及应对这些挑战的策略。
23 0

热门文章

最新文章

相关产品

  • 函数计算