在Serverless环境中如何设计微服务?

译文 精选2022-09-06 10:29:27Serverless 体系结构的高度分布式特性,要求开发人员重新思考其应用程序设计和开发方法
已成为企业在数字化、现代化升级过程中越来越流行的范式,不管是国内的阿里云、腾讯云、华为云,还是国外的亚马逊云科技,微软等云计算厂商,都正在大力投入无 服务器 计算领域。由于 Serverless 提供了一个微型的架构,终端客户无需部署、配置或管理服务器服务,而且代码运行所需要的服务器服务皆由云端平台来提供,这就为企业提高了灵活性,同时降低了运营开销和成本。但与之而来的问题在于,Serverless 体系结构的高度分布式特性,要求开发人员重新思考其应用程序设计和开发方法。本文介绍几个最佳实践设计模式,以飨读者。
众所周知,Serverless 是基于微服务体系结构的自然选择。以基于 AWS 的 Serverless 应用程序为例,它依赖于 AWS Lambda 函数,这些函数在设计上是无状态和短暂的,Lambda 函数被设计为运行小块代码以响应其他服务发出的事件。Lambda 还与一系列可用于实现分布式系统中常见模式的托管服务集成,如消息队列(Amazon 简单队列服务)、API(Amazon API 网关)和事件流(Amazon Kinesis)。这将有助于将构建微服务过程中的痛点最小化。
为工作负载选择适当的设计模式
1、扼杀器(Strangler)模式 Strangler 模式允许开发人员用微服务(可以用一个或多个 Lambda 函数实现)逐步替换其单体组件,而不是完全关闭或一次性替换。
此模式使用 strangler(如API网关)来接受对遗留系统的传入请求。然后,再将它们路由到遗留应用程序或新的 Serverless 应用。因为客户端只与 strangler 交互,所以他们不知道后端服务受到影响。一旦整个遗留系统被重构,并且所有流量都被路由到新应用程序,则可以安全地弃用前者。
2、聚合器(Aggregator)模式
在基于微服务的架构中,客户端通常需要调用多个后端服务来执行操作。由于这些调用发生在网络上,客户端和微服务之间的聊天通信可能会增加应用程序延迟,特别是在带宽有限的情况下。
聚合器模式通过使用单个 Lambda 函数来接受所有客户端请求,减少了客户端需要进行的调用数量。然后,Lambda 函数将请求转发给适当的微服务和第三方 API,来聚合它们的结果,并向客户端返回单个响应。
3、状态机模式(State Machine) 构建应用程序时,业务工作流往往会变得非常复杂。AWS 中的有一个比较好用的“Step”功能,可以用于协调涉及多个微服务的复杂工作流。“Step”功能包括内置的状态管理、分支、错误处理和重试功能,无需编写样板代码。
4、Saga 模式
在基于微服务的应用中,每个微服务通常都有自己的数据库,其中包含与其他微服务数据库中的数据密切相关的数据。Saga 模式通过协调互连微服务中的一系列本地事务来确保数据一致性。一旦微服务执行其本地事务,它就会触发链中的下一个服务执行其事务。如果一个事务在此过程中失败,将启动一系列补偿事务,以回滚以前事务中所做的更改。
Saga 模式可以通过 choreography 或 orchestration 来实现。在 choreography 模型中,每个服务发布一个事件,触发下一个服务运行。而在orchestration 中,由中央协调器管理整个事务链。
5、断路器(Circuit breaker)模式
在分布式系统中,在满足一个请求时涉及多个服务,思考如何处理服务故障是至关重要的。有些问题(如网络延迟)是间歇性的,可以自行解决,可能只需上游服务的重调用即可。然而,更严重的问题或停机,就需要主动干预,解决所需的时间成本都是不确定的。在这些情况下连续重试可能会消耗关键资源,并导致依赖同一资源池的其他服务匮乏,这可能导致灾难性级联故障。
断路器模式允许使用键值存储来跟踪请求故障和断路器状态,而且通过 Lambda 函数来决定是否需要基于故障计数对受影响的服务进行后续调用,从而在系统中构建容错能力。
毫无疑问,云计算正在悄无声息的影响着改变着我们的生活。不论是商业,还是科研,Serverless 计算正在成为当下云计算的主流发展方向之一。于开发者而言,Serverless 的部署比较简单,但前提是,我们应该借鉴最佳实践模式来设计,减少不必要的资源浪费。
手机电池上为什么有三个金属片?作用是什么?座充充电时我该怎么接?
从左到右:第一个金属片为电池正极,第二个为接地,第三个为负极.座充充电时,你把你的座充的两个pin脚接触电池的正负极就可以充电了.就是接反了也没关系,座充充电器有正反调试的功能,按一下那个开关就行了.
河南万向系统有限公司是不是国有企业
河南万向系统制动器有限公司是万向集团所属汽车制动器专业公司,是河南省“九五”期间百户重点扶持企业,公司创建于1973年,是国内集设计、开发、生产安装和服务于一体的汽车制动器骨干企业。主要生产重、中、轻、微、轿汽车制动器总成
CPU的工作原理是什么?
主流CPU的工作原理CPU的基本构成CPU的内部结构可分为:控制单元、逻辑运算单元、存储单元(包括内部总线和缓冲器)三大部分。 1.指令高速缓存是芯片上的指令仓库,这样微处理器就不必停下来查找计算机的内存中的指令。 这种快速方式加快了处理速度。 2.控制单元它负责有整个处理过程。 根据来自译码单元的指令,它会生成控制信号,告诉运算逻辑单元(ALU)和寄存器如何运算、对什么进行运算以及怎样对结果时处理。 3.运算逻辑单元(ALU)是芯片的智能部件,能够执行加、减、乘、除等各种命令。 此外,它还知道如何读取逻辑命令,如或、与、非。 来自控制单元的讯息将告诉运算逻辑单元应该做些什么,然后运算单元将寄存器中提取数据。 以完成任务。 4.寄存器是运算逻辑单元(ALU)为完成控制单元请求的任务所使用的数据的小型存储区域。 (数据可以来自高速缓存、内存、控制单元)5.预取单元根据命令或将要执行的任务决定,何时开始从指令高速缓存或计算机内存中获取数据和指令。 当指令到达时,预取单元最重要任务是确保所有指令均按正确的排列,以发送到译码单元。 6.数据高速缓存存储来自译码单元专门标记的数据,以备运算逻辑装单元使用,同时还准备了分配到计算机不同部分的最终结果。 7.译码单元是将复杂的机器语言指令解译运算逻辑单元(ALU)和寄存器能够理解的简单格式。 8.总线单元是指令从计算机内存流进和流出的处理器的地方。 CPU的工作原理 一个工厂对产品的加工过程: 进入工厂的原料(程序指令),结过物资分配部门(控制单元)的调度分配,被送往生产线(逻辑运算单元),生产出的成品(处理后的数据)后,再存储在仓库(存储单元)中,最后等着拿到市场上去卖(交由应用程序使用)。 CPU的工作原理: 从控制单元开始,CPU就开始了正式工作,中间的过程是通过逻辑运算单元来进行运算处理,交到存储单元代表工作结束。 首先,指令指针会通知CPU,将要执行的指令放置在内存中的存储位置。 因为内存中的每个存储单元都有编号(称为地址),可以根据这些地址把数据取出,通过地址总线送到控制单元中,指令译码器从指令寄存器IR中拿来指令,翻译成CPU可以执行的形式,然后决定完成该指令需要哪些必要的操作,它将告诉算术逻辑单元(ALU)什么时候计算,告诉指令读取器什么时候取数值,告诉指令译码器什么时候翻译指令等等。 根据对指令类型的分析和特殊工作状态的需要,CPU设置了六种工作周期,分别用六个触发器来表示它们的状态,任一时刻只许一个触发器为1,表时CPU所处周期状态,即指令执行过程中的某个阶段。 1.取指周期(FC)CPU在FC中完成取指所需要操作。 每条指令都必须经历取指周期FC,在FC中完成的操作与指令操作码无关的公共操作。 但FC结束后转向哪个周期则与本周期中取出的指令类型有关。 2.源周期(SC)CPU在SC中完成取源操作数所需的操作。 如指令需要源操作数,则进入SC。 在SC中根据指令寄存器IR的源地址信息,形成源地址,读取源操作数。 3.目的周期(DC)如果CPU需要获得目的操作数或形成目的地址,则进DC。 在DC中根据IR中的目的地址信息进行相应操作。 4.执行周期(EC)CPU在取得操作数后,则进入EC,这也是第条指令都经历的最后一个工作阶段。 在EC中将依据IR中的操作码执行相应操作,如传递、算术运算、逻辑运算、形成转移地址等。 5.中断响应周期(IC)CPU除了考虑指令正常执行,还应考虑对外部中断请的处理。 CPU在向应中断请求后,进入中断响应周期IC。 在IC中将直接依靠硬件进行保存断点、关中断、转中断服务程序入口等操作,IC结束转入取指周期,开始执行中断服务程序。 传送周期(DMAC)CPU响应DMA请求后,进入DMAC中,CPU交出系统总线的控制权,由DMA控制器控制系统总线,实现主存与外围设备之间的数据直接传送。 因此对CPU来说,DMAC是一个空操作周期。 为了简化控制逻辑,限制在一条指令结束是判断有无DMA请求,若有请求,将插入DMAC;如果在一个DMAC结束前又提出新的DMA请求,则连续安排若干DMA传送周期。 如果没有DMA请求,则继续判断有无中断请求,若有则进入IC。 在IC中完成需的操作后向新的FC,这表明进入中断服务程序。
发表评论