【编者按】本文作者 Rohit Dhall 是一名企业架构师,目前就职于 HCL 科技公司。 Rohit 拥有 18 年的 IT 工作经验,熟悉 Java/J2ee 、 P2P 、 DWH 、SOA 等技术。本文介绍了五种微服务系统常见的性能挑战,并探讨了相应的解决策略。
本文系 OneAPM 工程师编译呈现,以下为正文。
在IT基础设施中,基于微服务架构的系统变得越来越受欢迎,在这种架构中,但凡与业务相关的功能都会由多于一个的应用组成,但是对于整个集成系统的性能而言,这种集成也带来了巨大的挑战。在基于微服务的系统中,功能通过多个服务组合提供,因此存在大量的集成点和接触点。这反过来也加重了性能负担,甚至会影响系统的整体表现。本文主要讨论一些微服务系统所面临的关键性能挑战,同时也向大家介绍一些能够帮助大家解决问题的技术和模式。
集成系统所面临的挑战
分布式计算本来就有其自身的挑战,所有这些挑战不仅有据可查,而在分布式系统上工作的专业人士几乎每天都在为之困扰,尤其在集成环境中接触点超过了「正常」集成环境时,情形则会更加糟糕。当连接到应用内部或者远程外部系统中其他微服务时,很多环节都可能出错。例如,被连接的微服务可能非常缓慢或宕机,那么如果应用程序没有提前设计好如何处理这种情况,将会对程序的性能和稳定性产生不利影响。
缓解性能挑战
在本节中,笔者将讨论一些方法和设计策略,帮助在基于微服务的环境中实现更好的性能,增强系统的弹性和整体稳定性。
节流模式
节流是一种用于规避异常应用的技术,当异常应用发送的请求超过应用程序的处理负载时,可能导致系统过载甚至崩溃。
一个实现节流的简单方法是限定单个应用程序的连接数。假设有两个厂商调用微服务从账户中取钱。其中一个供应商是像亚马逊那样庞大的应用,那么它调用应用的次数要比拥有小众群体的供应商多的多。因此,可以提供这两家厂商两个独立的专用「入口点」,通过节流进行连接限制。这样,大量来自亚马逊的请求就不会妨碍第二个供应商的请求。此外,也可以限制各个协作对象的请求频率,这样发送请求的速度就不会超过微服务的处理速度了。
一般情况下,来自外部服务/系统的同步请求会通过负载均衡器、 HTTP 服务器或其他类似的入口点进行节流限制。
超时
如果请求的微服务响应缓慢,会使得应用需要花费很长时间才能完成一个请求,应用线程在很长的时间内都处于忙碌状态。这会对应用程序产生级联影响,导致应用或服务器完全堵塞甚至失去响应。
大多数库(libraries)、 API 、框架和服务器都为各种特定的请求超时提供配置,只需设置读写请求超时、等待超时、连接池等待超时、活跃会话超时等的数值即可,但这些超时需要通过适当的性能测试或 SLA 验证才能确定。
专用线程池
另一个重要的设计是将不同的任务请求或不同的微服务连接放到独立的线程池中,就像Bulkheads那样对资源进行隔离。大家不妨设想一下这样的场景,在应用流中需要使用 REST 通过 HTTP 连接五个不同的微服务,也可以使用一个普通的线程池去维持这些连接,如果其中某个服务因为某种原因出现异常,那么池内所有的微服务都会受到牵连。为了最大限度地减少这种异常的负面影响,将单独的服务放进专门的线程池显然是更明智的做法。这不仅可以减少某个异常对其他服务的影响,还能保证应用程序的其他部分继续正常地工作。
这种模式通常被称为Bulkheads模式。下图描述了该模式的示例场景:在左侧,微服务 A 用同一个连接池去请求 X 和 Y 两个服务。如果服务 X 或 Y 其中任何一个行为异常,都将影响连接池的整体表现。如果采用Bulkheads模式,如该图右侧所示,即使微服务 X 被错误操作,也只有 X 池受到影响,微服务 Y 还可以继续正常地为应用程序提供服务。
Circuit Breakers
Circuit Breakers是一种设计模式,可以用来减少任何下游不可访问或故障对系统整体的影响。Circuit Breakers用于检查外部系统/服务的可用性,一旦外部系统或服务宕机,应用程序就可以避免再次发送请求到这些外部系统。这种做法其实也是一种安全措施,可以避免超时或Bulkheads模式因某些故障而导致的不必要超时。如果下游系统宕机,请求就没必要一直等待直至响应超时,之后再收到超时异常的响应。相反,当下游系统处于宕机过程时,Circuit Breakers让请求不再尝试连接,进而大大地缩减了响应时间。
Circuit Breakers有内置的逻辑来对外部系统进行必要的健康检查,从而确保这些系统正常工作后再开始转发请求。
异步集成
解耦各个微服务之间的通信可以避免多数的集成性能问题,异步集成方法是一种解耦机制。如果系统是基于微服务系统设计的,而且各个微服务之间都是点到点的集成,那就需要认真思考如何实现解耦了。任何标准的消息代理系统都可用于提供发布—订阅功能。
总结
本文主要向大家介绍了集成到基于微服务的框架系统所面临的一些性能挑战,同时也提出了一些帮助大家避免上述的性能问题的系统模式,简而言之,在考虑模式时,异步集成的方法应该是首选,而其他设计模式可以根据具体的集成场景进行选择,从而避免下游系统异常引起的级联副作用,帮助大家更好地解决集成系统的性能挑战。
OneAPM 为您提供端到端的 Java 应用性能解决方案,我们支持所有常见的 Java 框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,Java 监控从来没有如此简单。想阅读更多技术文章,请访问 OneAPM官方技术博客。
本文转自 OneAPM 官方博客
原文链接:https://dzone.com/articles/performance-patterns-in-microservices-based-integr
相关推荐
接着,文章详细解释了十多种关键的微服务设计模式,如按业务能力和子域分解、扼杀者模式、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等...