作者|拉惹萨拉瓦南编译|EthanServerless已经成为企业数字化、现代化进程中越来越流行的范式,无论是国内的阿里云、腾讯云、华为云,还是国外的亚马逊云技术、微软等云计算厂商都在大力投资serverless领域计算。由于Serverless提供微架构,终端客户无需部署、配置、管理服务器服务,代码运行所需的服务器服务全部由云平台提供,为企业提高灵活性的同时降低运维开销和成本.但随之而来的问题是,Serverless架构的高度分布式特性要求开发者重新思考他们的应用程序设计和开发方法。本文为读者介绍几种最佳实践设计模式。众所周知,Serverless是基于微服务架构的自然选择。以依赖于AWSLambda函数的基于AWS的无服务器应用程序为例,这些函数在设计上是无状态且短暂的。Lambda函数旨在运行小段代码以响应其他服务发出的事件。Lambda还集成了一系列可用于在分布式系统中实现常见模式的托管服务,例如消息队列(AmazonSimpleQueueService)、API(AmazonAPIGateway)和事件流(AmazonKinesis)。这将有助于最大限度地减少构建微服务过程中的痛点。为工作负载选择合适的设计模式1。Strangler模式Strangler模式允许开发人员逐渐用微服务(可以用一个或多个Lambda函数实现)替换他们的单体组件,而不是完全关闭或一次性全部关闭性替代。Strangler模式该模式使用扼杀器(例如API网关)来接受对遗留系统的传入请求。然后将它们路由到遗留应用程序或新的无服务器应用程序。因为客户端只与扼杀器交互,他们不知道后端服务受到影响。一旦重构了整个遗留系统并将所有流量路由到新应用程序,就可以安全地弃用前者。2.聚合器模式在基于微服务的架构中,客户端通常需要调用多个后端服务来执行操作。由于这些调用是通过网络进行的,因此客户端和微服务之间的聊天通信可能会增加应用程序的延迟,尤其是在带宽有限的情况下。聚合器模式聚合器模式通过使用单个Lambda函数来接受所有客户端请求,从而减少了客户端需要进行的调用次数。然后,Lambda函数将请求转发到适当的微服务和第三方API,以聚合它们的结果并将单个响应返回给客户端。3.状态机模式在构建应用程序时,业务工作流往往会变得非常复杂。AWS中有一个比较好用的“Step”功能,可以用来协调涉及多个微服务的复杂工作流。“Step”功能包括内置状态管理、分支、错误处理和重试,无需编写样板代码。状态机模式4、Saga模式在基于微服务的应用中,每个微服务通常都有自己的数据库,其中包含与其他微服务数据库中的数据密切相关的数据。Saga模式通过协调相互连接的微服务之间的一系列本地事务来确保数据的一致性。一旦微服务执行了它的本地事务,它就会触发链中的下一个服务来执行它的事务。如果在此过程中有事务失败,则会启动一系列补偿事务以回滚先前事务中所做的更改。Saga模式Saga模式可以通过编排或编排来实现。在编排模型中,每个服务都会发布一个事件来触发下一个服务运行。在编排中,整个事务链由中央协调器管理。5.断路器模式在分布式系统中,满足一个请求涉及多个服务,因此思考如何处理服务故障是至关重要的。一些问题(例如网络延迟)是间歇性的并且会自行解决,可能只需重新调用上游服务即可。然而,更严重的问题或中断需要积极干预,解决它们所需的时间和成本是不确定的。在这些情况下连续重试会消耗关键资源并使依赖同一资源池的其他服务饿死,这可能导致灾难性的级联故障。断路器模式断路器模式允许使用键值存储来跟踪请求失败和断路器状态,并通过Lambda函数根据失败计数来决定是否需要后续调用受影响的服务,从而将容错性构建到系统。总结毫无疑问,云计算正在悄然影响和改变着我们的生活。无论是商业还是科研,无服务器计算正在成为云计算的主流发展方向之一。对于开发者来说,Serverless的部署相对简单,但前提是要借鉴最佳实践模式进行设计,减少不必要的资源浪费。原文链接:https://medium.com/@raja.sk.saravanan/architect-your-microservices-in-serverless-with-right-design-pattern-60ebe674968
