微服务和 Serverless 架构-EDAS 主要功能介绍

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 微服务和 Serverless 架构-EDAS 主要功能介绍

开发者学习笔记【阿里云云原生助理工程师认证(ACA)课程:微服务和 Serverless 架构-EDAS 主要功能介绍】

课程地址:https://edu.aliyun.com/course/3112075/lesson/19027


微服务和 Serverless 架构-EDAS 主要功能介绍

 

课程目录

一、创建和部署应用

二、CI/CD部署应用

三、在混合云中部署应用

四、分批发布模式

五、全链路流量控制和灰度发布模式

六、弹性伸缩功能简介

七、限流降级功能介绍

八、EDAS健康检查

九、应用监控功能

十、EDAS应用平台管理

十一、服务鉴权功能介绍

十二、组件中心介绍

十三、日志功能介绍

 

一、创建和部署应用

首先讲解应用的创建和部署,在EDAS里应用的创建和部署主要分为两大类,一类是基层CS集群的部署,也就是基于云服务器进行部署。

第二类是基于K8s集群的部署,也就是基于容器集群架构的部署。
image.png在EDAS环境中这两种环境的区别主要体现在通过EDAS集群方式进行部署,相对来讲会更简单和直观一点,只需要将ECS加入集群,EDAS平台就会在ECS上安装一个EDAS,也就是一个小的代理应用,通过这个代理应用就可以实现服务的部署。

除了自动安装的EDAS应用服务器在使用上和普通ECS并没有什么区别,而K8s集群的准备要比ECS集群更复杂一点,首先要准备ECS集群,再在ECS集群上创造K8s集群,不过EDAS也支持Serverless与容器服务ASK,开发者可以选择通过ASK,在公共计算资源上创建K8s集群,这种方式的复杂度比自建集群要简单很多。

接下来说明两种部署方式的选择,从微服务框架上来看如果我们使用spring cloud或者Dubbo HSF开发的JAVA型应用,那么我们可以同时选择两种部署方式,那么就是说我们可以在ECS集群中直接部署JAR文件,同时也可以打包成镜像文件,以容器的方式部署,如果我们使用其他的语言开发微服务Go等,或者我们需要一些比较复杂的配置,比如我们用JAVA开发的微服五除了一个大包,还有其他的内容需要一起部署,比如说一些配置文件或资源,依赖的第三方应用等。如果是这种情况就建议用容器的方式进行部署,容器方式的兼容性实际上是最好的,但相对来讲他的应用打包比单一的要相对复杂一点。

这两种部署方式实际上底层都会使用微服务组件和弹性伸缩编排来实现各种功能,所以从功能上所以从功能上讲区别不大,在实际开发中可以根据自己应用的实际情况来进行选择更合适的部署方式。

 

二、CI/CD 部署应用

EDAS同时支持应用CI/CD平台进行应用的部署,在这里我们先对CICD的概念做一个简单的讲解。
image.png

CI即持续集成,是指通过自动化的方法快速自动的通过代码生成应用程序,而CD持续交付是指通过自动化的方式快速部署上线应用。为什么要提出这两个概念,前面讲过在现代的微服务开发过程中,由于规模的变小,同时应用迭代的速度也更加的快速,那么应用的生成部署提交频率比传统的瀑布式流程要频繁的太多太多,同时快速地进行集成和部署有助于测试人员能快速地对新开发的功能进行验证。

以及在测试环境中实际运行应用以尽早发现程序中存在的问题,这也是为辅的倡导者所非常推崇的一种方法。和微服务价格一样CI/CD里面对加快应用的迭代速度有着非常多的好处,但是靠传统的人工方式进行交付和提成,效率和准确率上都无法满足需求。

因此为了能在项目中贯彻CI/CD思想,我们就需要自动化持续平台来为我们进行技术支持。而在CI/CD领域比较流行的开源平台,叫Jenkins。同时阿里云也有自己的商业化CI/CD平台云效。相对于开源平台提供了相对更加全面的技术支持,图中以云效平台为例,简单说明了CI/CD开发工具,在整个代码开发周期中的功能,在后面的课程中,会对云效平台做更加深入的讲解。

我们的EDAS平台,现在现在对Jenkins和云效两个平台都有非常好的支持,开发者只需要通过Jenkins或者云效平台提交代码,平台插电就可以自动编译生成应用,并将应用部署到EDAS中,简化了开发者的部署流程。

 

三、在混合云中部署应用

image.png

EDAS开发部署的另一个亮点功能就是混合云部署,所谓混合云的概念是指对于一些大型的企业,或者存在敏感数据的企业他们在上云的时候一般不会把所有的业务全部移动到云服务厂商等平台上,而是会把其中一些重要的核心数据留在自己的服务器上,或者虽然采用了云服务厂商的技术,但是会采用私有云的形式也就是说由云服务厂商为他们专门制定和公有云环境有所区别的单独地云环境,而这种结合了公有云、自建ADC和私有云的复杂应用环境就称为混合云,在这种环境下的部署,如果单靠人工进行多种平台的部署其效率和安全性也是一个重大的风险,那么针对这种情况,EDAS的专业版或者铂金版就推出了混合云部署应用。
具体开讲,不论是自建机房还是私有云,只要通过高速通道产品连接到阿里云平台,实现和阿里云没网的互联互通,并且在服务器上安装了EDAS 那么就可以通过平台向管理平台ECS服务器一样,对这些外部服务器统一进行部署和管理。

对于这些数据敏感企业来讲,实现了安全性和便利性的两全其美,需要注意的是,EDAS的弹性伸缩功能,因为涉及到对ECS资源的调度,所以暂时只能在阿里云功能云的ECS实力上进行应用,这也是一个需要注意的小区别。

 

四、分批发布模式

image.png

EDAS的应用服务发布,应用部署和应用发布的区别在于,应用部署是将应用,复制到对应的运行环境中,而应用发布是将应用实例真正的激活,并使之能对外提供服务,在实际的企业及应用里,应用的发布尤其是升级发布,是一个很容易出现未知风险的环节,因此升级分布通常会采取比较谨慎的方法进行,而不是简单的应用替换。

业界通常采用的发布当时有,蓝绿发布、分批发布、灰度发布等,具体的定义做一个简单的讲解。其中蓝绿发布又称AB发布,其特点是准备两套生产环境,一套为备用当有新版本需要发布时,在备用环境中部署好新版本,然后通过负载均衡将所有流量一次性由旧版本切换到新版本服务器上,这种方式的优点是发布简单,但是缺点也非常明显首先,开发者需要准备比实际多一倍的应用资源,其次新版本一旦有问题,会导致所有用户都受到影响,因此在大规模应用企业中并不十分推荐。

分批发布又称滚动发布,是指在生理过程中并不一下启动所有的新版本,而是将服务器进行分批,先在一批的一台或几台服务器里部署新版本然后将同样数量的旧版本应用下架,等待一段时间新版本服务正常工作以后在更新下一批服务器同时下架旧应用,循环往复的进行。一旦升级中出现问题,迅速回滚到旧版本中,这种发布方式无论是资源消耗还是稳定性比蓝绿发布都有了很大的提升,用户也不再需要准备多一倍的计算资源。
同时新版本中有风险则可以在升级过程中及时发现不至于影响到全部用户,不过这种发布方式的稳定性还是存在一定的问题,一旦开始滚动升级后,用户流量将直接进入新版本中,虽然数量较小但对于迭代速度越来越快和质量控制越来越高的互联网应用还是显得略有不足。

 

五、全链路流量控制和灰度发布模式

image.png

为了近一步将应用发布的风险,也在分批发布的基础上又提出了一种新的发布模式,称为灰度发布,又称为金丝雀发布。金丝雀发布的名称,来源于中世纪的采矿工人发现金丝雀对瓦斯气体非常敏感,因此狂欢,会在下井之前先放一只金丝雀到井里。
如果金丝雀不叫了那就证明井下的瓦斯浓度较高,矿工就会避免下井。金丝雀发布和分批发布的区别在于,金丝雀发布在升级之前会讲新版本的流量近一步调小,通常会从一台服务器负载的5%到10%开始进行测试,如果新版本应用执行稳定,则逐步增加流向新版本的流量,直到达到正常生产环境的流量水平如果这个状态仍然稳定,后面再采取分批发布的方式逐步上限。

如果以采矿工人的例子来讲,分批发布是对于有危险的矿井一队矿工一个一个分批下井避免风险,而金丝雀发布是在矿工分批下井之前先放入一只小小的金丝雀来检测可能遇到的风险,但是分批发布从技术上来讲只需要做好应用的上下限和负载均衡的切换等工作,而金丝雀发布需要对传入的流量实现精确的管控,这就需要应用框架必须提供相应的技术支持,而EDAS提供了全链路流量控制功能,可以根据流量的灰度识别特征讲,流量精确的切换到不同的应用分组中,而这种精确的流量控制技术,就可以很好的帮助开发者实现灰度发布。

全链路流量控制功能,不但可以实现灰度发布还可以实现线上用户诊断功能,当某些用户出现特定问题而难以大规模复现的时候,可以根据该用户的身份特征为他创建灰度流量标识。将该用户的所有请求倒入到链条集群的服务环境中,在链条环境中针对他的问题进行精确的定位和排查,对于提高用户体验降低小概率化等是非常重要的一种技术手段。

 

六、弹性伸缩功能简介

image.png

刚才介绍了应用发布中的一些常用功能,下面介绍另一个非常重要的功能,弹性伸缩。在这之前先介绍一下互联网企业应用的一些场景特点。
首先绝大多数的互联网应用,都存在明显的时间分布不均的情况,也就是一天24小时之内用户的活跃,往往只集中在特定的一部分时间内。而其他的时间用户流量相对较小,比如像游戏应用,通常集中在中午午休、晚上下班到临睡之前的时间。而网课应用一般集中在课程表规定的开课时间内,这就导致了用户的服务器存储在一个明显的冷热不均的情况,如果按照峰值流量去配置计算资源则绝大多数时间服务器都处于闲置状态,造成资源浪费。同时互联网应用还存在着用户流量难以预测的情况。

例如经常社会上出现某些热点情况会导致微博微信等社交平台出现瞬间爆增的流量,而某些直播场景,也很难预测用户实时在线人数。在这些场景下如何保证服务质量的前提下更有效地提高计算资源的利用率,直接影响企业在设施上的投入性价比,而靠传统的人工运维手段,一是享用速度化及时,同时人工运维的成本和风险都会比较高。

基于此种需求业界推出了弹性伸缩的概念,所谓弹性伸缩就是指平台将实时监控服务的运行状态和用户流量,一旦用户流量达到某个预值,或者服务所在的运行环境负担过重计算资源将消耗殆尽,则自动增加服务的实例个数,并调整负载均衡组件,将流量平均分布在全部实例。而当用户流量或服务所在的运行环境资源充足时,则自动下线一部分服务,减少资源的消耗,通过这种无需人工干预的自动运维调整手段,就保证了服务的高并发性能,和性价比之间的双赢。

EDAS平台所包含的弹性伸缩组件,源自阿里巴巴内部的技术实现。历经了历年双11海量流量洪峰的严苛考验,具有多种弹性伸缩扩容配置模式,通过用户界面的配置就可实现全自动扩缩容。

 

七、限流降级功能介绍

image.png

刚才讲解了通过弹性伸缩来应对流量瞬间增大的情况,但是在实际的企业应用开发中单纯的弹性伸缩有时候并不能完全避免过快的流量洪峰,对后端服务的压力,因此除了弹性伸缩外,互联网下的企业应用通常还会引用限流降级组件,为服务提供安全保障。

先简单介绍限流和基本概念,如图左边,一般来讲在服务提供者前面会加入一个限流模块,也就是常说的限流熔断器,当服务的消费者发起请求时,熔断器会检查当前服务提供者的流量压力,如果请求速度过快则限流模块会将服务请求排队,而如果排队时间过长,则后来的请求会被直接返回失败,这样就保证了服务提供者不会被过多的流量压垮,同时服务消费者也不会因为提供者的阻塞而导致长时间的等待这种模式就被称之为限流。而限流可以说是服务实例很重要的安全保障。

再看右边的图,相对于服务提供者前面工作的限流模块,降级模块一般工作在服务消费者一侧降级模块主要负责处理当服务提供者无法正常提供服务的一种情况,无法提供服务包括了被限流,也包括一些其他的情况。比如说无法想到服务,服务异常等。
这种情况下如果直接返回错误可能会导致整个调用链路都因为一个微小的错误而失败,这种情况下对于一些核心功能一般的做法是提供一个备用的降级方案作为替代。

当主方案返回失败时,并不是直接向上级返回失败,而是再次尝试请求备用的降级方案尽量保证非核心业务功能的失败不会对主业务流程产生影响这种模式就是降级,是实现大型系统的重要手段,EDAS原生支持限流降级组件,同时在阿里云上也提供商用版本Ahas,后面会进一步讲解。


八、EDAS 健康检查

image.png健康检查是指由EDAS Agent 针对容器和应用的运行状态定时进行检查,并将结果进行汇总和反馈的过程,简单来说就是EDAS Agent 会定时对应用环境进行两部检查。
首先先检查Ali-Tomcat 是否存活,以便判断整个运行的安全状态,然后再根据用户设定好的健康检查URL 去访问为服务实例,判断微服务实例是否仍然还在运行当中,以便微服务实例出现崩溃或锁死时,用户能及时获得异常信息并进行还原现场Bug 保存运行环境等诊断时操作。
同时健康检查的状态结果也会汇总到EDAS应用管理平台中使开发者对整个集群下的服务状态有一个更直观的了解,总的来说健康检查是一个非常实用的诊断工具。

 

九、应用监控功能

image.png

EDAS中另一个重要的诊断功能就是应用监控功能,在微服务架构中无论是微服务的种类还是微服务的实例其数量都会比单体应用有了极大的增长,同时企业应用运行除了受服务自身的状态,服务所在运行环境的CPU、内存、网络、JVM等指标的影响也离不开其他云上中间件。如数据库、缓存、消息队列等组件以及CDN网络传输、运行解析、客户端嚼文解析等一系列流程,任何一个环节出现问题都会导致应用的享用不及时卡顿或者逻辑错误甚至整个应用不可用。因此对应用整体建造状态的实时监控是应用运维中一个必不可少的日常工作,EDAS集成了阿里云的应用监控系统ARMS 企业,整合了微服务应用、运行环境、阿里云组件、外部资源等各方面的统计数据,可以使用户非常方便的了解到整个系统服务的运行状态。

另外由于分布式系统天生的远程调用特性,其失败概率远远大于单一系统的进程内调用而远程调用又无法将近程调用一样通过调用堆占来显示模块之间的等级关系。因此一旦出现错误开发人员往往难以获得错误的上下关联信息,从而导致排查错误的真正原因变得非常困难。因此ARMS还提供了全链路调用跟踪服务,对于每一次异部调用发者都可以查看服务调用者服务提供者的名称ip 地址以及耗时是否异常调用类型等信息。可以实现如单一调试堆占一般的调用信息查看,具体内容在后面ARMS中会有详细的讲解,这里仅做简单介绍。

 

十、EDAS 应用平台管理

上面讲解了EDAS的主要功能,包括应用部署、应用发布、弹性扩容、限流降级、应用监控这几部分,下面再介绍EDAS中几个非常实用的应用管理功能。

 image.png

EDAS在2015年推出的时候拥有一套主子账号管理系统,实现了资源的购买和使用分离,2016年7月份升级以后EDAS开始支持阿里云通用的访问控制RAM账号系统,主要设计思想是通过设置权限策略集中管理用户以及控制用户可以访问哪些资源。例如可以限制用户只拥有对某一个EDAS应用的独权限。以图为例,EDAS内置的权限为子账号分配资源后所有的权限都会匹配这些资源。例如当授权子账号APP1 APP2的资源后,如果在授予子账号部署应用和停止应用的权利那么该子账号就有权限对APP1和2进行部署和停止。资源力度较为粗糙不能更精细的控制权限。

相比EDAS内置的权限管理,外部的权限控制更为精细。每条权限都可以配置所拥有的资源例如阿里云账号可以授权RAM用户部署APP和停止APP的权限。同时部署APP的权限上资源APP1和2停止的权限上配置资源2和3此时RAM用户可以部署1和2不能部署3,可以停止2和3不能停止1。

 

十一、服务鉴权功能介绍

image.png

当开发者的某个微服务应用有安全性的要求,不希望其他所有应用都能调用的时候,可以对调用该应用的其他应用进行健全,仅允许匹配健全规则的应用调用,保证调用的安全同时基于性能的考虑。EDAS采用分布式健全方式会将健全数据下发到每一个服务提供者所在的运行环境避免单独点健全带来的性能瓶颈和单点风险。

服务健全这个概念相对比较容易理解,需要强调的是如果开发大规模分布式系统建议大家在有条件的情况下尽量采用服务健全的方式进行安全管控。在现代的网络安全管理体系内比较推崇的一种理念是零安全信任理念,所谓零安全信任理念他的核心思想是假定网络环境在已经被攻陷的情况下来设计和开发系统,也就是无论网络位置处在公网还是内网,通信要尽量保证安全。同时对所有的访问采用最小授权原则,这样可以有效的防止恶意的外部攻击和内部服务无意中的破坏行为。

 

十二、组件中心介绍

image.png

接下来看组件中心,使用EDAS一个非常重要的好处就是EDAS本身基于阿里庞大的生态体系而阿里云的生态体系中包含了很多对微服务开发非常有帮助的组件和功能,EDAS的组件中心

甚至将这些功能梳理出来,将微服务开发最为紧密的一些功能集成到EDAS中,免去了开发和运维人员的跨组件维护工作。

这里筛选了四个和微服务开发最为紧密的应用进行讲解,其中CSN涌现,之前已经讲了,它本身可以看作是微服务核心组件中的微服务网关的升级产品,提供了与微服务网关更为强大的协议转换链路集成功能。
关于CSB的功能,在后续高级课程中会有详细讲解,而应用实时监控系统ARMS之前也做了详细的介绍,基本上ARMS也可以算作微服务开发中必不可少的组件之一,具体详情后面讲解,第三个组件是日志模块,这个功能在下一页做详细讲解。
最后一个功能是分布式调用SchedulerX ,之前也提到过,在分布式调用中本身调用的失败率比单体应用高的多,这种情况下对于一些需要同时成功或同时失败的操作,例如银行转账的场景下,扣款方和收款方的账户可能存在不同的微服务之中,这时转账业务就应该做到要么转账成功扣款和加款同时成功,要么失败扣款和加款同时失败,这种操作就叫做同步受损操作。

在分布式条件下的同步试用操作实际上涉及到了比较复杂的数学问题业界也提出了各种各样的理论,例如CAP 原则,应用开发者如果想自己开发一套综合考虑各种情况的分布式同步事务组件,实际上难度是非常大的,因此遇到需要事物型操作的时候一般建议选用比较成熟的分布式事务框架,以便在实际情况中出现各种复杂情况。

 

十三、日志功能介绍

image.png

最后讲解一下日志服务,阿里云的日志服务SLS是一个单独的应用,而EDAS组件中心同SLS做了比较完善的结合,在应用开发中断点调试和日志输出是两种最常见的问题诊断手段,而在生产系统中断点调试难度很大,因此对于生产环境的系统内部流程的监控就需要通过应用中的日志输出进行完成。

相对于ARMS更侧重于应用模块外部环境的监控,日志是应用模块内部模块的重要监视手段,开发者使用日志系统时只需要配置微服务相应的日志输出目录SLS就可以将所有微服务实例的日志以及EDAS本身的系统日志整合到一起,便于开发者在统一的平台中进行管理,而在SLS日志平台中不但可以查看过往的日志,还可以设置多种条件的日志搜索。

相关文章
|
2天前
|
Serverless 云计算 Docker
SAE是全场景Serverless计算平台,深度融合微服务
【5月更文挑战第2天】SAE是全场景Serverless计算平台,深度融合微服务,提供SAE Job任务场景解决方案,具备便捷、节省、稳定、透明和省心的特点。而ECI是Serverless容器运行服务,结合云计算理念,仅需Docker镜像即可运行,支持细粒度资源计费,旨在降低成本和提升效率。SAE侧重应用管理和运营,ECI专注于优化容器资源使用。
11 0
|
6天前
|
运维 Serverless 对象存储
Serverless 应用引擎产品使用之阿里函数计算中X-Fc 影响到 CDN 的功能和性能如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
8 2
|
6天前
|
运维 监控 Serverless
【专栏】引领未来科技发展的无服务器架构(Serverless)
【4月更文挑战第28天】无服务器架构,一种云计算模型,让开发者专注编写代码而不必管理服务器。它基于事件驱动,自动扩展资源并按需计费。优势包括缩短开发周期、优化资源利用、降低成本、提高可用性及简化维护。然而,冷启动延迟、调试困难、性能监控、安全性和学习曲线等挑战仍需解决。随着技术进步,无服务器架构将在科技发展中发挥更大作用。
|
12天前
|
存储 运维 Serverless
Serverless架构在图像处理领域展现出了强大的优势
【4月更文挑战第22天】Serverless架构在图像处理中表现出显著优势:弹性伸缩自动适应负载变化,节省成本;按需付费减少费用,适合需求波动场景;简化运维让开发者专注应用创新;快速迭代部署提升市场响应速度;高可用性和容错性保证服务稳定性;跨平台支持增强兼容性;丰富生态加速开发进程。因此,Serverless是图像处理的理想选择。
14 1
|
13天前
|
存储 弹性计算 Serverless
Serverless架构在图像处理的优势
Serverless架构在图像处理的优势
17 2
|
16天前
|
弹性计算 安全 Serverless
图像处理场景下的Serverless架构
【4月更文挑战第15天】图像处理场景下的Serverless架构
|
18天前
|
人工智能 Serverless 数据处理
利用阿里云函数计算实现 Serverless 架构的应用
阿里云函数计算是事件驱动的Serverless服务,免服务器管理,自动扩展资源。它降低了基础设施成本,提高了开发效率,支持Web应用、数据处理、AI和定时任务等多种场景。通过实例展示了如何用Python实现图片压缩应用,通过OSS触发函数自动执行。阿里云函数计算在云计算时代助力企业实现快速迭代和高效运营。
52 0
|
23天前
|
监控 算法 Serverless
Serverless架构在图像处理中的优势
随着信息时代的到来,图像处理在各个领域发挥着越来越重要的作用,无论是在数字媒体、医学影像、安防监控还是人工智能等领域,图像处理都扮演着关键的角色,尤其是在应对图像处理的复杂性和高并发需求时,Serverless架构作为一种新兴的解决方案,正在迅速崭露头角。Serverless架构的出现彻底改变了传统的软件架构模式,将开发者从繁琐的服务器管理中解放出来,使其能够更专注于业务逻辑和算法的优化。还有就是在图像处理领域,Serverless架构的优势体现得尤为明显,它能够根据实际需求动态分配计算资源,实现弹性扩展,满足高并发和波动性需求,以及Serverless架构的按需付费模式也能够帮助开发者降低成
35 2
Serverless架构在图像处理中的优势
|
24天前
|
运维 安全 Serverless
Serverless架构在图像处理中的优势探讨
Serverless架构在图像处理中的优势探讨
16 1
|
1月前
|
关系型数据库 Serverless 分布式数据库
【公测】PolarDB PostgreSQL版Serverless功能免费使用​!
【公测】PolarDB PostgreSQL版Serverless功能免费使用​,公测于2024年3月28日开始,持续三个月,公测期间可以免费使用!

相关产品

  • 企业级分布式应用服务
  • 函数计算