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上托管它的应用,这就要求产品能够降低用户在使用这方面的门槛,后续会建设应用大盘、事件中心等等。

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

极光推送 请检查参数合法性_极光小课堂 | 极光推送在人脸识别终端管理系统中的应用...

项目背景最近开发的一款人脸识别终端管理系统,主要包括运营平台、企业后台管理系统、APP 端、智能人脸识别终端模块。下图是系统的架构图:其中各个模块之间都需要即时通讯,比如:APP 端用户注册完成之后,企业管理员在后…

实时数仓入门训练营:Hologres性能调优实践

简介: 《实时数仓入门训练营》由阿里云研究员王峰、阿里云资深技术专家金晓军、阿里云高级产品专家刘一鸣等实时计算 Flink 版和 Hologres 的多名技术/产品一线专家齐上阵,合力搭建此次训练营的课程体系,精心打磨课程内容,直击当下…

re:Invent大会第十年,亚马逊云科技推出了哪些底层自研技术

编辑 | 宋慧 出品 | CSDN云计算 头图 | 付费下载于视觉中国 一转眼, 亚马逊云科技的云计算已经推出了十五年,亚马逊云科技的年度大会 re:Invent 也举办到了第十年。 今年 re:Invent全球 大会上,亚马逊云科技继续向前,发布系列重…

微信小程序(uniapp)api讲解

Uniapp是一个基于Vue.js的跨平台开发框架,可以同时开发微信小程序、H5、App等多个平台的应用。下面是Uniapp常用的API讲解: Vue.js的API Uniapp采用了Vue.js框架,因此可以直接使用Vue.js的API。例如:v-show、v-if、v-for、comput…

mysql 5.7 binlog 压缩_mysql binlog压缩处理

前一段时间系统mysql压力较大,产生大量binlog,大量的binlog删除后又担心后期出现问题难以调查,保存后又占用本身的空间存储。每天产生的binlog可以多达5-6G。因此考虑是否扩容机器达到目的?经过运维同学 建议,可以压缩…

高度为5的3阶b树含有的关键字个数_第15期:索引设计(索引组织方式 B+ 树)

谈到索引,大家并不陌生。索引本身是一种数据结构,存在的目的主要是为了缩短数据检索的时间,最大程度减少磁盘 IO。任何有数据的场景几乎都有索引,比如手机通讯录、文件系统(ext4xfsntfs)、数据库系统(MySQL…

ARMS企业级场景被集成场景介绍

简介: ARMS企业级场景被集成场景介绍 通过本次最佳实践内容,您可以看到ARMS OpenAPI可以灵活的被集成到客户链路监控场景,并对其进行可视化图形展示监控信息。 1. 背景信息 应用实时监控服务ARMS(Application Real-Time Monitor…

千万并发连接下,如何保障网络性能

过去几十年互联网呈爆发式的增长,内容的丰富以及层出不穷的DDoS攻击等,对网络性能提出了极大的挑战,也同样促进了网络基础设施的快速发展。运营商的带宽越来越大,CPU/网卡等硬件的性能也会越来越强。但在很长时间内,软…

kafka window 启动_Apache Flink结合Kafka构建端到端的Exactly-Once处理

Apache Flink自2017年12月发布的1.4.0版本开始,为流计算引入了一个重要的里程碑特性:TwoPhaseCommitSinkFunction(相关的Jira)。它提取了两阶段提交协议的通用逻辑,使得通过Flink来构建端到端的Exactly-Once程序成为可…

浅谈云原生架构的 7 个原则

简介: 作为一种架构模式,云原生架构通过若干原则来对应用架构进行核心控制。这些原则可以帮助技术主管和架构师在进行技术选型时更加高效、准确,下面将展开具体介绍。 服务化原则 在软件开发过程中,当代码数量与开发团队规模都扩…

深入浅出FlatBuffers原理

简介: FlatBuffers 是一个开源的、跨平台的、高效的、提供了多种语言接口的序列化工具库。实现了与 Protocal Buffers 类似的序列化格式。主要由 Wouter van Oortmerssen 编写,并由 Google 开源。本文将基于高德地图数据编译增量发布使用了FlatBuffers序…

java 反编译class文件_用Java实现JVM第三章《解析class文件》

解析class文件案例介绍本案例主要介绍通过java代码从class文件中解析;class文件、常量池、属性表;作为类(或者接口)信息的载体,每个class文件都完整地定义了一个类。为了使java程序可以“编写一次,处处运行”,Java虚拟…

解放人与设备距离,5G时代的远程操控该如何完成

物联网这个概念早在十多年前便已提出,其主要依托于移动通讯网络来实现其功能的传输。在过去物联网领域的一些设备控制场景中,我们或多或少都见到过远程控制技术的身影,但受限于当时的网络条件和技术场景,大部分应用都属于对设备的…

Spark 大数据处理最佳实践

开源大数据社区 & 阿里云 EMR 系列直播 第十一期 主题:Spark 大数据处理最佳实践 讲师:简锋,阿里云 EMR 数据开发平台 负责人 内容框架: 大数据概览如何摆脱技术小白Spark SQL 学习框架EMR Studio 上的大数据最佳实践 直播…

CNCF TOC 委员张磊:不断演进的云原生给我们带来了什么?

简介: 任何一种云原生技术,它不再是某种能力的弥补,而是更多地将云的能力以某种方式更简单、更高效地透出给我的应用去使用。无论是容器、K8s 还是 Service Mesh,他们都是在不同的环节帮助应用本身能够更好地去使用云服务。 作者…

php url传递参数_互联网系统(APP、网站等)通信基石——会话(PHP版)

一、会话概述1.1、技术背景互联网通信中采用的Http协议(建立TCP连接->Http请求->Http应答->断开TCP连接)本身是无状态的,即Http各请求之间是相互独立、互不相关的,而大量应用需要将各请求关联起来(如:用户登录系统购物、多次购买行为…

十年探索,云上明灯,re:Invent再启掀产业风暴

15年前,IT基础设施有着太多的限制,成本高、反应慢、灵活度低,对于企业的创新与发展有着很大的伤害。当亚马逊推出全球第一个云计算服务简单存储 Amazon S3时,可能没有太多人相信,这些内容将会开启一个新世界的大门&…

用手机「3D探店」是种什么体验?

简介: 未来场景尽在眼前!阿里云3D全景网站通过云端算法技术自动建模,将线下场景1:1真实还原到线上,让用户足不出户就可以感受到真实的3D空间漫游效果。 在手机里用3D探店打卡是种什么样的体验? 走进商场,每…

mysql bin oct_python 讲解进制转换 int、bin、oct、hex

相关免费学习推荐:python视频教程原理十进制转n进制都可以使用倒除法:对十进制进行除n的运算,直到商为0为止,然后将各个步骤中得到的余数倒着写出来.n进制转十进制:(例子:二进制转十进制)101001 > 2^5 …

java设置字体大小和颜色_Java 设置Excel图表背景填充(颜色、图片填充)

本文介绍通过Java程序来设置Excel图表背景填充的方法,填充时,可设置颜色填充或者加载图片填充;填充区域可设置整个图表区域或者绘图区域。设置方法参考以下内容。使用工具:Free Spire.XLS for Java(免费版)…