原文地址:https://dzone.com/articles/performance-patterns-in-microservices-based-integr
微服务性能模式
前言:基于微服务系统越来越普遍。下面我们就来看看五种常见的特定微服务性能的挑战,以及如何应解他们
背景:在IT界微服务架构为基础的系统越来越多, 每一个应用系统都集成了不同的组件和服务,几乎所有的特定业务应用程序都需要集成一个或更多的应用服务。但是一个综合性系统集成不同的服务这无疑是一个巨大的挑战。随着基于微服务架构的发展,集成点和接触点的数量大量增加,许多系统基于微服务提供的服务或功能开始进行系统自身的分解。这反过来又增加了性能挑战,影响系统的整体功能。本文主要讨论一些能影响以微服务为基础系统的性能的关键性挑战,也提出了一些能够避免这些问题的技术和模式;
系统集成面临的挑战
分布式计算本来就有它自己的挑战,所有这些挑战不仅有据可查,而且还几乎每天都在分布式系统上工作的专业人士都经历过。尤其在集成环境中接触点超过了“正常点”,就会变得更糟糕。如果我们的应用程序没有设计优雅地处理这种情况,这对我们的应用程序的性能和稳定性将产生不利影响。当连接到其他微服务(在同一界范围内或者远程的,外部系统)时,很多事情都可能出错,可能导致微服务的连接速度变慢甚至奔溃。在本节中,我们将讨论一些方法和设计方面的决策,这可以帮助我们在微服务为基础的环境中实现更好的性能,增强系统的弹性和整体稳定性。
一、Throttling 节流模式
节流是一种技术,可用于避免任何由于行为异常或“胭脂”应用,发送的请求超过我们的应用程序处理的荷载,而导致的系统过载或奔溃。实现节流的一个简单方法是限定单个应用程序的连接数。考虑有两个厂商调用我们的微服务从账户中取钱。如果一个供应商是一个很大的应用程序像亚马逊,那么它调用应用的次数要比一个拥有小用户群体的供应商要多的多。因此,我们可以提供这两家厂商两个独立的专门“切入点”专用节流进行连接限制。这样,大量来自亚马逊未来的请求不会妨碍从第二个供应商来请求。此外,我们可以调节各个合作伙伴,这样发送请求速度就不会超过我们的处理速度了。来自外部负载均衡器或HTTP服务器同步请求或其他这样的切入点就是节流。
二.Timeouts 超时
如果请求的微服务回应比较迟钝,这会导致系统的一次请求需要花费很长时间。甚至应用程序线程在很长的时间内处于忙碌状态。这可能对我们的应用程序中的级联影响,导致应用/服务器成为完全哽咽/响应。大多数库/APIs/框架和服务器都为各种特定的请求超时提供配置。您可能需要设置读取请求/写请求/等待超时/保活超时超时/连接池等待超时等。这些超时值只能通过适当的性能测试/验证SLA等确定
三.Dedicated Thread Pools/Bulkheads 专门的线程池/舱壁模式
另一个重要的设计是:让不同任务请求通过自个专门的线程池请求到各自微服务,像舱壁一样对资源进行隔离; 假设这么个场景,在应用中你需要使用REST通过HTTP连接五个不同的微服务,使用一个普通的线程池去维持这些连接,如果五个服务中其中一个服务由于某种原因出现异常,所有的池成员都将精疲力尽的等待服务器响应,为了最大限度地减少的影响,它始终是一个很好的做法,定制个性化服务话服务始终是一个号的做法。这可以减少某个异常影响对其他服务的影响,从而使您的应用程序其他部分继续执行。这种模式俗称的舱壁。
下图描述了实施舱壁的简单的示例场景:在左侧,微服务A,用同一个连接池去请求X和Y两个服务。如果服务X或服务的Y其中任何一个行为异常,这会影响连接池的整体行为。如果舱壁模式实现,如该图所示的右侧,即使微服务X被错误操作,只有池X将受到影响。微服务Y可以继续为应用程序提供服务.
四.Circuit Breakers 断路器(CircuitBreaker)设计模式
断路器是一种设计模式,它是用来减少任何下游的不可访问或系统故障(由于计划内或计划外的中断的)影响。断路器用于检查外部系统/服务的可用性,一旦外部系统或服务奔溃了,断路器应用程序就可以阻止发送请求到这些外部系统。这种做法作为一种安全措施,在超时/舱壁,其中一个可能不希望,甚至等待超时所规定的期限上。如果下游系统宕机,那是没有用的等待超时时间为每个请求,然后获得超时异常的响应。相反,请求应甚至不尝试连接到这些系统中,在时间,当这些下降。断路器可有内置的逻辑来执行外部系统进行必要的健康检查,并开始转发请求,一旦这些系统和做工精细。
五.Asynchronous Integration 异步集成
将各个微服务之间的通信进行解耦可以避免多数的集成性能问题,异步集成方法就是实现解耦的一种机制,如果您的系统是基于微服务系统设计的,而且各个微服务之间都是点到点的整合,那么这就值得认真思考了。任何标准的消息代理系统都可用于提供发布 - 订阅功能。
总结
在本文中,我们谈到了一些基于微服务系统集成性能所面对的挑战。同时也提供了避免这些问题的一些设计,我们讨论了限制,超时,舱壁和断路器模式以及异步集成方法。
简而言之,异步集成应该是首选,只要有可能。其他的设计模式,我们应该根据集成场景去使用,来避免异常引起下游系统的级联副作用。
相关推荐
接着,文章详细解释了十多种关键的微服务设计模式,如按业务能力和子域分解、扼杀者模式、API网关模式、聚合器模式、每个服务一个数据库、命令查询职责分离(CQRS)、 Saga模式、日志聚合、性能指标、分布式跟踪、...
- 为了确保微服务的健康和性能,可观测性模式涉及日志记录、监控和跟踪,以提高服务的可见性和诊断能力。 5. **交叉关注模式**: - 这些模式处理微服务架构中普遍存在的跨领域问题,如安全性、配置管理和版本控制...
### 微服务架构及其设计模式解析 #### 一、微服务架构概述 微服务架构(Microservices Architecture, MSA)是...通过采用这些模式,不仅可以优化系统的性能和稳定性,还能提高开发效率,使组织更加敏捷地响应市场变化。
### 微服务模式与实践 #### 一、引言 微服务架构作为一种现代软件开发方法,近年来受到了广泛的关注。它通过将单个应用程序拆分为一组小型、独立的服务来实现复杂系统的构建,每个服务都可以独立部署、扩展和维护...
在实践中,PPTV积累了丰富的经验,包括如何优化容器性能、如何处理服务间的依赖关系、如何设计健壮的微服务架构等。这些经验对于其他希望采用类似技术的企业具有很高的参考价值。 8. **下半年工作计划** PPTV未来...
通过从每个微服务收集日志并将它们集中起来,系统提供了一个统一的视图,能够快速进行故障排除,并对用户行为和系统性能进行全面分析。 2. **通俗解释**: - 日志聚合设计模式将来自多个应用程序或服务的日志数据的...
【Azure 无服务器与微服务治理模式】 在云计算领域,Azure提供了丰富的服务来帮助企业构建现代化的应用程序,其中包括无服务器计算和微服务架构。这两种技术在提高应用可伸缩性、灵活性和运维效率方面发挥着重要...
为了解决这些问题,OCTO提出了服务注册发现代理模式,即SG_Agent,采用本地进程、标准化接口和策略热更新的方式,具有高可用、低消耗、标准化部署等特点。 HULK是美团点评的容器集群管理和弹性伸缩平台,专注于面向...
所有微服务架构模式中的能力,只有一个客户端且只用http协议。采用 solon 框架,采用 water 一站式服务治理中台(完整支持 solon cloud 接口定义),采用 wood ORM框架,采用集成式网关,集成大量常用网关拦截器,...
本课程是对分布式微服务架构设计模式进行讲解,以亿级QPS的电商网站为例对常见的技术架构进行分析,从高性能,高可用的角度比较各种方案的优劣点,重点讲解使用CQRS模式怎么进行高性能的微服务架构设计,读者学习本...
总的来说,PPTV的实践展示了如何通过容器和微服务架构来优化流媒体服务的性能、可扩展性和运维效率,同时也展现了大数据处理和云平台在流媒体业务中的关键作用。通过这些技术的组合运用,PPTV能够为用户提供流畅的...
标题中的“后台管理(微服务模式框架)+ pcWeb(vue) + appWeb(vue)”揭示了整个项目的核心组成部分。 首先,我们来看“后台管理(微服务模式框架)”。微服务架构是一种将单一应用程序分解为一组小型、独立的服务的...
1. 云原生微服务概念:云原生微服务是指基于云计算环境下的一种微服务架构模式,它将应用程序拆分成多个小型、独立的服务单元,以提高系统的灵活性、可扩展性和可维护性。 2. 阿里云云原生微服务平台:阿里云云原生...
微服务架构是当前互联网应用开发中的一个热门模式,它将单一应用程序划分成一组小服务,每个服务运行在其独立的进程中,服务间通过轻量级的通信机制(通常是HTTP RESTful API)进行交互。微服务架构提高了应用的可...
微服务分布式追踪旨在监控和跟踪请求在微服务架构中流经不同服务的过程,提供对性能、依赖关系和故障的洞察。 ## 二、详细解释及实际示例 1. **实际示例**: - 在电子商务平台中,分布式追踪用于跟踪客户从将商品...
3. Service Mesh 架构:Service Mesh 是一种新的微服务架构模式,旨在提供一个统一的服务通信网络,以解决微服务之间的通信和交互问题。 Service Mesh 架构的主要组件包括: * 服务代理:提供服务之间的通信和交互...
Java源码分析与常用设计模式,分布式架构的框架结构,底层原理。手写spring mvc,微服务架构 spring 5新特新与源码解析。
为了确保这些系统在面对故障时的健壮性和性能,弹力设计模式成为了核心的设计原则。以下是根据提供的压缩包文件内容对弹力设计模式的详细阐述: 1. **弹力设计总结**:弹力设计是构建能够自我恢复、抵抗故障的系统...
例如,iServer在微服务架构下的体系结构(P7)展示了多个工作节点和主节点的分布式模式,增强了系统的可伸缩性和容错性。 微服务架构带来的主要好处包括: 1. 充分利用硬件资源:通过将服务分散到多个轻量级容器中...
3. **监控和日志**:利用Prometheus、Grafana等工具对微服务性能进行监控,利用ELK(Elasticsearch、Logstash、Kibana)堆栈进行日志收集和分析。 4. **持续集成/持续部署(CI/CD)**:使用Jenkins、GitLab CI/CD等...