当前位置: 首页 > news >正文

微服务网关终极进化:设计模式驱动的性能与可用性优化(四)

时间:2024年09月12日

作者:小蒋聊技术

邮箱:wei_wei10@163.com

微信:wei_wei10

希望大家帮个忙!如果大家有工作机会,希望帮小蒋推荐一下,小蒋希望遇到一个认真做事的团队,一起努力。需要简历可以加我微信。

大家好,欢迎来到小蒋聊技术,小蒋准备和大家一起聊聊技术的那些事。

今天小蒋准备和大家一起聊的这个话题就厉害了!那就是从深入到优化。

微服务网关的性能与可用性优化:设计模式的深度实践

在我们之前的2.0版本中(微服务网关全能进化:设计模式加持下的Spring Cloud Alibaba落地实践(三)-CSDN博客),已经通过Spring Cloud Alibaba技术栈搭建了一个功能强大的微服务网关,并结合了一些设计模式来提高系统的稳定性和灵活性。但是,随着业务规模的扩大和复杂度的增加,系统的性能和可用性将面临更严峻的挑战。在这一版本中,我们将探讨如何通过进一步优化设计模式来提升系统的整体性能和应对更复杂的业务需求。

1. 性能优化:提高系统响应速度和吞吐量

当我们面对大量并发请求时,系统的性能会变得至关重要。在设计上,可以使用缓存代理模式(Caching Proxy Pattern)来大幅提高系统的响应速度和吞吐量。缓存模式将某些静态或常见请求的结果缓存起来,减少对后端服务的压力。

缓存代理模式实现:

// 缓存代理类public class CacheProxy {private Map<String, Object> cache = new HashMap<>();private RealService realService;public CacheProxy(RealService realService) {this.realService = realService;}public Object request(String key) {if (cache.containsKey(key)) {return cache.get(key); // 从缓存中获取}Object result = realService.request(key);cache.put(key, result); // 缓存结果return result;}}

缓存模式的优势在于,它能显著减少重复请求带来的计算负担,尤其是对于高频访问的数据,可以将响应时间从毫秒级压缩到微秒级,极大地提高了系统的吞吐量。

设计模式:缓存代理模式(Caching Proxy Pattern

2. 系统弹性与可用性:通过分布式架构提升高可用性

在高并发和海量数据的场景下,系统的弹性和高可用性尤为关键。这里我们可以通过分布式模式(Distributed Pattern分片模式(Sharding Pattern 来保证系统的可扩展性和健壮性。分片模式通过将数据水平切分到不同的服务节点上,避免单点瓶颈,分布式架构则确保服务实例能够动态扩展。

分片模式实现:

// 分片管理类public class ShardManager {private Map<Integer, RealService> shardMap;public ShardManager(List<RealService> services) {shardMap = new HashMap<>();for (int i = 0; i < services.size(); i++) {shardMap.put(i, services.get(i));}}public RealService getShard(int userId) {int shardKey = userId % shardMap.size();return shardMap.get(shardKey);}}

通过这种方式,每个用户的请求都会根据哈希值分配到不同的服务节点上,最大程度上实现负载均衡和容错性,即使某个服务节点挂掉,其他节点也能继续服务。

设计模式:分片模式(Sharding Pattern),分布式模式(Distributed Pattern

3. 限流与负载均衡:智能调度保证系统稳定性

面对突发流量或者持续高并发的情况下,限流和负载均衡至关重要。我们在3.0版本中使用了Ribbon实现负载均衡,这里可以进一步引入限流器模式(Rate Limiter Pattern,确保系统不会因某些用户过多的请求而拖垮整个系统。

限流器模式实现:

public class RateLimiter {private final int maxRequestsPerSecond;private int requestCount;private long timestamp;public RateLimiter(int maxRequestsPerSecond) {this.maxRequestsPerSecond = maxRequestsPerSecond;this.timestamp = System.currentTimeMillis();this.requestCount = 0;}public synchronized boolean allowRequest() {long now = System.currentTimeMillis();if (now - timestamp > 1000) {timestamp = now;requestCount = 0;}if (requestCount < maxRequestsPerSecond) {requestCount++;return true;}return false;}}

通过这种设计模式,我们可以控制每个用户每秒能发起的请求数,防止某些用户的恶意请求对系统造成冲击,同时结合Ribbon的负载均衡策略,确保流量的合理分配。

设计模式:限流器模式(Rate Limiter Pattern

4. 熔断与降级:确保系统关键服务的持续可用

随着系统的规模和复杂度增加,某些服务的故障不可避免。通过使用熔断器模式(Circuit Breaker Pattern,我们可以在服务出现故障时,快速进行熔断处理,避免故障传播。此外,结合降级模式(Fallback Pattern,在某些服务不可用时返回简化版的服务,确保系统的核心功能不受影响。

熔断器模式实现:

public class CircuitBreaker {private boolean open = false;private int failureThreshold = 5;private int failureCount = 0;public void execute(Runnable task) {if (open) {System.out.println("Circuit is open. Service is unavailable.");return;}try {task.run();failureCount = 0;} catch (Exception e) {failureCount++;if (failureCount >= failureThreshold) {open = true;}}}public void reset() {open = false;failureCount = 0;}}

通过熔断器模式,我们能在服务连续失败时保护系统不受影响,并通过定期检查恢复服务状态。结合降级模式,系统在遇到非核心服务失败时还能保持核心功能的正常运行,最大程度保障用户体验。

设计模式:熔断器模式(Circuit Breaker Pattern),降级模式(Fallback Pattern

5. 服务监控与健康检查:系统状态一目了然

在大规模系统中,实时了解系统的状态至关重要。我们可以通过观察者模式(Observer Pattern)和健康检查模式(Health Check Pattern,来实时监控系统的健康状态,主动发现故障并及时处理。通过Spring Cloud Alibaba中的SkyWalking,我们可以集成链路追踪和健康监控。

观察者模式实现:

// 健康检查服务public interface HealthCheck {void check();}// 被观察的服务public class MonitoredService implements HealthCheck {private List<Observer> observers = new ArrayList<>();public void addObserver(Observer observer) {observers.add(observer);}@Overridepublic void check() {boolean isHealthy = ...; // 具体健康检查逻辑notifyObservers(isHealthy);}private void notifyObservers(boolean isHealthy) {for (Observer observer : observers) {observer.update(isHealthy);}}}// 观察者接口public interface Observer {void update(boolean isHealthy);}

通过观察者模式,系统的每个健康状况都可以自动通知监控系统,确保问题能够被及时发现并处理。

设计模式:观察者模式(Observer Pattern),健康检查模式(Health Check Pattern

总结:

在3.0版本中,我们通过引入更多的设计模式来提升系统的性能和可用性。从缓存代理模式、分布式架构、限流器、熔断器到实时监控,这些模式共同构成了一个高性能、高可用的微服务网关系统。随着业务规模和复杂度的增加,这些优化措施将帮助系统保持弹性和稳定性。

版本3.0的目标是确保设计的网关能够应对更大规模的业务需求,并为未来的扩展打下坚实的基础。如果你还想进一步优化某些部分,或者结合更多的实际应用场景,我们可以在未来的版本中继续深入探讨。

相关文章:

微服务网关终极进化:设计模式驱动的性能与可用性优化(四)

时间&#xff1a;2024年09月12日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 希望大家帮个忙&#xff01;如果大家有工作机会&#xff0c;希望帮小蒋推荐一下&#xff0c;小蒋希望遇到一个认真做事的团队&#xff0c;一起努力…...

Java中的服务端点日志记录:AOP与SLF4J

Java中的服务端点日志记录&#xff1a;AOP与SLF4J 大家好&#xff0c;我是微赚淘客返利系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在Java后端服务开发中&#xff0c;日志记录是监控和调试应用的关键手段。通过合理使用AOP&…...

黑马头条第八天实战(上)

D8 1&#xff09;登录功能需求说明 用户根据用户名和密码登录密码需要手动加盐验证需要返回用户的token和用户信息 2&#xff09;模块搭建思路步骤 2.1&#xff09;模块作用 先捋一下之前搭模块干了啥 feign-api 远程调用 自媒体保存时调用远程客户端进行增加文章&#x…...

swift qwen2-vl推理及加载lora使用案例

参考: https://swift.readthedocs.io/zh-cn/latest/Instruction/LLM%E5%BE%AE%E8%B0%83%E6%96%87%E6%A1%A3.html#%E5%BE%AE%E8%B0%83%E5%90%8E%E6%A8%A1%E5%9E%8B https://blog.csdn.net/weixin_42357472/article/details/142150209 SWIFT支持300+ LLM和50+ MLLM(多模态大模型…...

如何使用 Choreographer 进行帧率优化

Choreographer 是 Android 提供的一个工具类&#xff0c;专门用来协调 UI 帧的渲染。你可以通过 Choreographer 来精确控制帧的绘制时机&#xff0c;以优化帧率&#xff0c;确保应用的流畅度。以下是如何使用 Choreographer 进行帧率优化的详细步骤&#xff1a; 1. 理解 Chore…...

稳定驱动之选SiLM5350系列SiLM5350MDBCA-DG单通道隔离栅极驱动器(带内部钳位):工业自动化的可靠伙伴

SiLM5350系列SiLM5350MDBCA-DG是具体有10A峰值输出电流能力&#xff0c;单通道隔离式栅极驱动器。SiLM5350MDBCA-DG可提供内部钳位功能。驱动电源电压为4V至30V。3V至18V的宽输入VDDI范围使驱动器适合与模拟和数字控制器接口。所有电源电压引脚都有欠压锁定 (UVLO) 保护。 SiLM…...

鸿蒙OpenHarmony【轻量系统芯片移植】内核移植

移植芯片架构 芯片架构的移植是内核移植的基础&#xff0c;在OpenHarmony中芯片架构移植是可选过程&#xff0c;如果当前OpenHarmony已经支持对应芯片架构则不需要移植操作&#xff0c;在“liteos_m/arch”目录下可看到当前已经支持的架构&#xff0c;如表1&#xff1a; 表1 …...

多字节字符和宽字符

小时候&#xff0c;买东西的单位是一角、二角和五角&#xff0c;现在的单位是一元、五元和十元。人类社会的发展和计算机发展本质没啥两样&#xff0c;形态不同而已。 编码格式的历史 尽管早期只用ASCII码就可以表达所有字符&#xff0c;但计算机日益推广让其他国家不同语言的…...

C++缺省参数

个人主页&#xff1a;Jason_from_China-CSDN博客 所属栏目&#xff1a;C系统性学习_Jason_from_China的博客-CSDN博客 缺省参数的概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实参则采用该形参的缺省值&#xff0c;否则…...

深度学习中的常用线性代数知识汇总——第一篇:基础概念、秩、奇异值

文章目录 0. 前言1. 基础概念2. 矩阵的秩2.1 秩的定义2.2 秩的计算方法2.3 秩在深度学习中的应用 3. 矩阵的奇异值3.1 奇异值分解&#xff08;SVD&#xff09;3.2 奇异值的定义3.3 奇异值的性质3.4 奇异值的意义3.5 实例说明3.6 奇异值在深度学习中的应用 0. 前言 按照国际惯例…...

MATLAB | R2024b更新了哪些好玩的东西?

Hey, 又到了一年两度的MATLAB更新时刻&#xff0c;MATLAB R2024b正式版发布啦&#xff01;&#xff0c;直接来看看有哪些我认为比较有意思的更新吧! 1 小提琴图 天塌了&#xff0c;我这两天才写了个半小提琴图咋画&#xff0c;MATLAB 官方就出了小提琴图绘制方法。 小提琴图…...

嵌入式硬件基础知识

嵌入式硬件基础知识涵盖了嵌入式系统中的硬件组成及其工作原理&#xff0c;涉及处理器、存储器、外设接口、电源管理等多个方面。这些硬件共同构成了一个完整的嵌入式系统&#xff0c;用于执行特定任务。下面我们来详细介绍嵌入式硬件的基础知识。 1. 嵌入式系统的组成 嵌入式…...

keepalived和lvs高可用集群

keepavlied和lvs高可用集群搭建 主备模式&#xff1a; 关闭防火墙和selinux systemctl stop firewalld setenforce 0部署master负载调度服务器 zyj86 安装ipvsadm keepalived yum install -y keepalived ipvsadm修改主节点配置 vim /etc/keepalived/keepalived.conf! Conf…...

在VMware部署银河麒麟系统

虚拟机镜像安装文件从下面下载: 银河麒麟桌面操作系统V10SP1 2403 下载地址_银河麒麟v10镜像iso下载-CSDN博客 虚拟机安装要求硬盘大小至少40G,我悬着60G 选择桥接网络安装后上不了网并且和本机也互相ping不通,因此选择Nat方式,然后重启,就可以上网 下面开始安装,第一个…...

git删除本地分支报错:error: the branch ‘xxx‘ is not fully merged

git删除本地分支报错&#xff1a;error: the branch xxx is not fully merged error: the branch xxx is not fully merged 直接&#xff1a; git branch -D xxx 就可以。 如果删除远程分支&#xff1a; git push origin --delete origin/xxx git强制删除本地分支 git branc…...

Tensorflow 兼容性测试-opencloudos

介绍 Tensorflow 兼容性测试: 测试 Tensorflow 各个版本在 OpenCloudOS Stream 的安装支持 操作系统 [rootlab101 ~]# cat /etc/os-release NAME"OpenCloudOS Stream" VERSION"23" ID"opencloudos" ID_LIKE"opencloudos" VERSION_I…...

Windows主机上安装CUPS服务端共享USB打印机实践心得

背景 平时主力机器是Windows&#xff0c;不想额外开一个Linux服务器来共享打印机。由于主力机平时也不关机&#xff0c;尝试在Windows上安装CUPS服务。 结论 先说结论&#xff0c;结论是可行&#xff0c;但是麻烦且不稳定&#xff0c;虚拟机方案少折腾&#xff0c;但是资源消耗…...

socket通讯原理及例程(详解)

里面有疑问或者不正确的地方可以给我留言。 对TCP/IP、UDP、Socket编程这些词你不会很陌生吧&#xff1f;随着网络技术的发展&#xff0c;这些词充斥着我们的耳朵。那么我想问&#xff1a; 什么是TCP/IP、UDP&#xff1f;Socket在哪里呢&#xff1f;Socket是什么呢&#xff1…...

vue3使用provide和inject传递异步请求数据子组件接收不到

前言 一般接口返回的格式是数组或对象&#xff0c;使用reactive定义共享变量 父组件传递 const data reactive([])// 使用settimout模拟接口返回 setTimeout(() > {// 将接口返回的数据赋值给变量Object.assign(data, [{ id: 10000 }]) }, 3000);provide(shareData, dat…...

对称矩阵的压缩存储

1.给自己出题&#xff1a;自己动手创造&#xff0c;画一个5行5列的对称矩阵 2.画图&#xff1a;按“行优先”压缩存储上述矩阵&#xff0c;画出一维数组的样子 3.简答&#xff1a;写出元素 i,j 与 数组下标之间的对应关系 4.画图&#xff1a;按“列优先”压缩存储上述矩阵&a…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...