高可用的微服务架构设计-资源隔离、限流、熔断、降级、监控

本文涉及的产品
云原生网关 MSE Higress,422元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 高可用的微服务架构设计-资源隔离、限流、熔断、降级、监控

image.png

断路器模式

image.png

舱壁隔离模式

容错理念

  • 凡是依赖都可能会失败
  • 凡是资源都有限制
  • CPU/Memory/Threads/Queue
  • 网络并不可靠,延迟是应用稳定性杀手


1 资源隔离

让你的系统里,某一块东西,在故障的情况下,不会耗尽系统所有的资源,比如线程资源


项目中的一个case,有一块东西,是要用多线程做一些事情,小伙伴做项目的时候,没有太留神,资源隔离,那块代码,在遇到一些故障的情况下,每个线程在跑的时候,因为那个bug,直接就死循环了,导致那块东西启动了大量的线程,每个线程都死循环


最终导致系统资源耗尽,崩溃,不工作,不可用,废掉了


资源隔离,那一块代码,最多最多就是用掉10个线程,不能再多了,就废掉了,限定好的一些资源


2 限流

对打入服务的请求流量进行控制,使服务能够承担不超过自己能力的流量压力。

高并发的流量涌入进来,比如说突然间一秒钟100万QPS,废掉了,10万QPS进入系统,其他90万QPS被拒绝了


3 熔断

A服务调用B服务的某个功能,由于网络不稳定问题,或者B服务卡机,导致功能时

间超长。如果这样的次数太多。我们就可以直接将B断路(A不再请求B接口),凡是

调用B的直接返回降级数据,不必等待B的超长执行。这样B的故障问题,就不会级联影

响到A。


依赖服务,出了一些故障,每次请求都报错,熔断它,后续的请求过来直接不接收了,拒绝访问,10分钟之后再尝试去看看接口是否恢复。


4 降级

整个网站处于流量高峰期,服务器压力剧增,根据当前业务情况及流量,对一些服务和页面进行有策略的降级[停止服务,所有的调用直接返回降级数据]。以此缓解服务器资源的的压力,以保证核心业务的正常运行,同时也保持了客户和大部分客户的得到正确的响应。


MySQL挂了,系统发现了,自动降级,从内存里存的少量数据中,去提取一些数据出来。


和熔断的异同

相同点

  • 为了保证集群大部分服务的可用性和可靠性,防止崩溃,牺牲小我
  • 用户最终都是体验到某个功能不可用

不同点

  • 熔断是被调用方故障,触发的系统主动规则
  • 降级是基于全局考虑,停止一些正常服务,释放资源

5 运维监控

监控+报警+优化,各种异常的情况,有问题就及时报警,优化一些系统的配置和参数,或者代码

如果你的各种依赖的服务有了故障,那么很可能会导致你的系统不可用

hystrix对系统进行各种高可用性的系统加固,来应对各种不可用的情况

最佳实践

网关集中埋点,覆盖大部分场景


尽量框架集中埋点,客户端为主


配置对接Apollo ,根据实际使用调整阀值


信号量vs线程池场景

信号量:网关,缓存

线程池场景:服务间调用客户端,数据库访问,第三方访问


线程池大小经验值

30rps x0.2sec= 6 + breathing room = 10 threads

Thread-pool Queue size:5 ~ 10

部署

Hystrix Dashboard大盘(无线/H5/第3三方网关)

共享Hystrix Dashboard/Turbine服务器

熔断告警


Spring Cloud Hystrix标注

————————————————

版权声明:本文为CSDN博主「JavaEdge.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_33589510/article/details/95803214

目录
相关文章
|
3月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
279 3
Mysql高可用架构方案
|
23天前
|
消息中间件 监控 小程序
电竞陪玩系统架构优化设计,陪玩app如何提升系统稳定性,陪玩小程序平台的测试与监控
电竞陪玩系统架构涵盖前端(React/Vue)、后端(Spring Boot/php)、数据库(MySQL/MongoDB)、实时通信(WebSocket)及其他组件(Redis、RabbitMQ、Nginx)。通过模块化设计、微服务架构和云计算技术优化,提升系统性能与可靠性。同时,加强全面测试、实时监控及故障管理,确保系统稳定运行。
|
2月前
|
设计模式 存储 算法
分布式系统架构5:限流设计模式
本文是小卷关于分布式系统架构学习的第5篇,重点介绍限流器及4种常见的限流设计模式:流量计数器、滑动窗口、漏桶和令牌桶。限流旨在保护系统免受超额流量冲击,确保资源合理分配。流量计数器简单但存在边界问题;滑动窗口更精细地控制流量;漏桶平滑流量但配置复杂;令牌桶允许突发流量。此外,还简要介绍了分布式限流的概念及实现方式,强调了限流的代价与收益权衡。
83 11
|
2月前
|
算法 NoSQL Java
微服务架构下的接口限流策略与实践#### 一、
本文旨在探讨微服务架构下,面对高并发请求时如何有效实施接口限流策略,以保障系统稳定性和服务质量。不同于传统的摘要概述,本文将从实际应用场景出发,深入剖析几种主流的限流算法(如令牌桶、漏桶及固定窗口计数器等),通过对比分析它们的优缺点,并结合具体案例,展示如何在Spring Cloud Gateway中集成自定义限流方案,实现动态限流规则调整,为读者提供一套可落地的实践指南。 #### 二、
76 3
|
3月前
|
存储 负载均衡 监控
如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
在数字化时代,构建高可靠性服务架构至关重要。本文探讨了如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
66 1
|
3月前
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
174 3
|
3月前
|
监控 负载均衡 Java
微服务架构下的服务治理与监控
微服务架构下的服务治理与监控
164 0
|
3月前
|
存储 监控 负载均衡
构建高效微服务架构:服务治理与监控的实践
构建高效微服务架构:服务治理与监控的实践
|
4月前
|
Kubernetes Cloud Native 微服务
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
164 1
|
3月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
192 6