分布式系统设计(架构能力)
一、微服务架构
-
服务治理
-
Nacos 注册中心(AP模式)
- CAP选择:Nacos 默认采用 AP 模式(可用性 + 分区容忍性),通过心跳检测实现服务健康管理。
- 服务发现:客户端定时拉取服务列表,支持权重路由和元数据过滤。
- 配置管理:通过
dataId
和group
动态推送配置,支持灰度发布。
-
Sentinel 熔断规则持久化
- 规则存储:将流控、熔断规则持久化到 Nacos/ZooKeeper,避免重启丢失。
- 动态更新:通过
DataSource
接口监听配置中心变化,实时生效。
// 示例:Sentinel 规则持久化到 Nacos ReadableDataSource<String, List<FlowRule>> flowRuleDataSource = new NacosDataSource<>( nacosServerAddr, groupId, dataId, source -> JSON.parseObject(source, new TypeReference<List<FlowRule>>() {}) ); FlowRuleManager.register2Property(flowRuleDataSource.getProperty());
-
-
分布式事务
-
Seata AT模式
- 两阶段流程:
- 一阶段:执行业务 SQL,生成 UNDO_LOG(数据快照)。
- 二阶段:提交时删除 UNDO_LOG;回滚时通过 UNDO_LOG 恢复数据。
- 全局锁:TC(事务协调器)通过全局锁避免脏写。
- 两阶段流程:
-
最大努力通知型事务
- 适用场景:跨系统最终一致性(如支付成功后通知商户)。
- 实现步骤:
- 本地事务提交后,异步发送通知消息。
- 消息队列保证至少一次投递,接收方需幂等处理。
-
-
网关设计
-
Spring Cloud Gateway 过滤器链
- 核心过滤器:
GlobalFilter
:全局过滤(如鉴权、日志)。GatewayFilter
:路由级过滤(如添加请求头)。
- 自定义过滤器:
@Component public class AuthFilter implements GlobalFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { if (!checkAuth(exchange.getRequest())) { return exchange.getResponse().setComplete(); // 拦截 } return chain.filter(exchange); } }
- 核心过滤器:
-
动态路由配置
- 基于Nacos:监听 Nacos 配置变化,刷新路由表。
- API 动态更新:通过
RouteDefinitionRepository
接口实现。
-
二、中间件核心
-
Redis
-
集群模式
- Cluster分片:
- 16384个哈希槽,每个节点负责部分槽位。
- 客户端路由:通过
CRC16(key) % 16384
计算槽位。
- Codis方案:
- 代理层(Codis-Proxy)负责分片,依赖 ZooKeeper 维护元数据。
- Cluster分片:
-
持久化策略
- RDB:定时快照,恢复快但可能丢失数据。
- AOF:追加日志,数据安全但文件较大。
- 混合模式:RDB 全量 + AOF 增量(Redis 4.0+)。
-
缓存问题解决方案
- 穿透:布隆过滤器(
RedissonBloomFilter
)拦截无效请求。 - 击穿:互斥锁(
SET key value NX PX 3000
)防止并发重建。 - 雪崩:随机过期时间(基础过期时间 + 随机偏移量)。
- 穿透:布隆过滤器(
-
-
Kafka
-
ISR机制
- In-Sync Replicas:与 Leader 保持同步的副本集合。
- Leader选举:当 Leader 失效时,从 ISR 中选择新 Leader。
-
零拷贝技术
- sendfile系统调用:数据直接从磁盘文件传输到网卡,绕过用户态。
-
Exactly-Once语义
- 幂等生产者:通过 PID + Sequence Number 去重。
- 事务消息:跨分区原子性写入(需配合事务协调器)。
-
-
RocketMQ
-
事务消息流程
- 发送半消息(对消费者不可见)。
- 执行本地事务,提交或回滚。
- Broker 根据事务状态提交或丢弃消息。
-
顺序消息实现
- MessageQueueSelector:通过相同选择策略(如订单ID哈希)将消息发送到同一队列。
- 消费者单线程顺序消费。
-
三、高可用设计
-
限流降级
-
滑动窗口算法
- 实现:将时间划分为多个小窗口,统计窗口内请求量。
- 优势:比固定窗口更平滑,避免临界突发流量。
-
令牌桶实现(Resilience4j)
// 配置每秒10个令牌 RateLimiterConfig config = RateLimiterConfig.custom() .limitRefreshPeriod(Duration.ofSeconds(1)) .limitForPeriod(10) .build(); RateLimiter limiter = RateLimiter.of("apiLimiter", config);
-
-
容灾方案
-
同城双活
- 数据同步:基于数据库主从复制或 DRBD 块级同步。
- 流量切换:DNS 或负载均衡器(如 Nginx)切换流量。
-
异地多活
- 单元化路由:按用户 ID 哈希路由到指定机房(如用户A固定访问北京机房)。
- 数据最终一致:通过消息队列异步同步数据。
-
-
压测实战
-
JMeter全链路压测
- 脚本录制:使用 JMeter 代理服务器录制用户操作。
- 参数化:CSV 文件驱动多用户登录(不同账号)。
- 分布式压测:控制机(Master)调度多台压力机(Slave)。
- 监控指标:TPS、响应时间、错误率、资源利用率(CPU/内存)。
-
结果分析
- 瓶颈定位:数据库慢 SQL、线程池满、缓存命中率低。
- 优化建议:增加索引、调整线程池参数、预热缓存。
-
四、总结与实战案例
案例:电商大促系统设计
- 挑战:秒杀场景下的高并发(10万QPS)、数据一致性。
- 解决方案:
- 流量削峰:MQ 队列缓冲请求,异步处理订单。
- 库存扣减:Redis Lua 脚本保证原子性,异步同步到数据库。
- 降级策略:核心功能(下单)优先,非核心功能(推荐)降级。
通过深入理解上述技术点,并结合实际场景灵活运用,能够设计出高可用、可扩展的分布式系统。
相关文章:
分布式系统设计(架构能力)
一、微服务架构 服务治理 Nacos 注册中心(AP模式) CAP选择:Nacos 默认采用 AP 模式(可用性 分区容忍性),通过心跳检测实现服务健康管理。服务发现:客户端定时拉取服务列表,支持权重…...
171. Excel 表列序号
Excel 表列序号 题目描述尝试做法推荐做法 题目描述 给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如: A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1: 输入: colum…...
在 Java 中使用 Apache POI 为 Word 文档添加水印
在 Java 中使用 Apache POI 为 Word 文档添加水印 在日常办公中,我们经常需要给 Word 文档添加水印,以标明文件的机密性或归属权。本文将介绍如何使用 Apache POI 库在 Java 中给 Word 文档添加水印。 技术栈 Apache POI:用于操作 Word 文…...

贪心算法二
> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是贪心算法,并且掌握贪心算法。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! >…...

【大模型安全】大模型的技术风险
【大模型安全】大模型的技术风险 1.DDoS攻击2.常见的传统网络攻击方式3.恶意意图的识别4.AI生成虚假信息传播5.利用AI进行黑客攻击6.模型对抗攻击7.后门攻击8.Prompt攻击9.数据投毒攻击10.模型窃取攻击11.数据窃取攻击 1.DDoS攻击 2023年11月9日凌晨,OpenAI在官网公…...
Java 线程池中 shutdown 与 shutdownNow 的区别是什么?
Java 线程池中 shutdown 与 shutdownNow 的区别 核心行为差异 | 方法 | 行为描述 | |----------------|----------------------------------------------------------------------------| | shutdown | 平缓关闭线程池:1. 停止接受新任务。2. 已提交的任务ÿ…...

基于Spring Boot的共享学习经验系统的设计与实现
目录 摘 要 第1章 绪论 1.1研究背景与意义 1.2国内外现状 1.3研究目标 第2章 需求分析 2.1业务需求 2.1.1业务概述 2.1.2业务流程 2.2.1用例概述 2.2.2用例描述 2.3非功能性需求 第3章 系统设计 3.1技术路线 3.2系统功能模块设计 3.3系统架构 3.4数据库设计 3.4.1概念结构设…...
【简单的C++围棋游戏开发示例】
C围棋游戏开发简单示例(控制台版) 核心代码实现 #include <iostream> #include <vector> #include <queue> using namespace std;const int SIZE 9; // 简化棋盘为9x9:ml-citation{ref"1" data"citationList&…...
单片机中的基础外设GPIO的知识和应用—(6)
GPIO(通用输入输出)是单片机与外部世界交互的重要接口。单片机的GPIO引脚可以灵活配置为输入、输出、中断或复用功能,广泛应用于LED控制、按键读取、传感器通信等场景。下文以STM32F103C8T6的GPIO为例。有些51单片机IO功能有的稍微有不同&…...

10-Agent循环分析新闻并输出总结报告
目录 关键词 摘要 速览 自动新闻总结与行业分析报告生成流程 创建深度行业分析报告的工作流 测试用例执行与调试 业务逻辑与循环处理任务 演示如何在循环体中添加链接读取工具 使用大模型处理和分析新闻信息 构建循环分析新闻并生成综合报告的流程 分析和优化慢速循…...
十二、Redis Cluster(集群)详解:原理、搭建、数据分片与读写分离
Redis Cluster(集群)详解:原理、搭建、数据分片与读写分离 Redis Cluster 是 Redis 官方提供的分布式存储方案,通过数据分片(Sharding)实现 水平扩展(scalability),并提供 高可用性(HA) 和 故障自动转移(failover) 能力,解决了单机 Redis 内存受限、主从复制故障…...
贪心算法解题框架+经典反例分析,效率提升300%
贪心算法是一种在每一步选择中都采取当前状态下的最优决策,从而希望最终达到全局最优解的算法策略。以下从其定义、特点、一般步骤、应用场景及实例等方面进行讲解: 定义与基本思想 • 贪心算法在对问题求解时,总是做出在当前看来是最好的选…...
策略设计模式-下单
1、定义一个下单context类 通过这类来判断具体使用哪个实现类,可以通过一些枚举或者条件来判断 import com.alibaba.fastjson.JSON; import com.tc.common.exception.BusinessException; import com.tc.common.user.YjkUserDetails; import com.tc.institution.cons…...

Go加spy++隐藏窗口
最近发现有些软件的窗口就像狗皮膏药一样,关也关不掉,一点就要登录,属实是有点不爽了。 窗口的进程不能杀死,但是窗口我不想要。思路很简单,用 spy 找到要隐藏的窗口的句柄,然后调用 Windows 的 ShowWindo…...
React基础之tsx语法
tsx在jsx的基础上添加了新的类型,除此之外没有任何区别 事件绑定 function App() { const handleClick()>{ console.log(button被点击了); } return( <div className"App"> <button onClick{handleClick}>click me</button> </di…...

一体机:DeepSeek性能的“隐形枷锁”!
一体机是DeepSeek交付的最佳方式吗? 恰恰相反,一体机是阻碍DeepSeek提升推理性能的最大绊脚石。 为啥? 只因DeepSeek这个模型有点特殊,它是个高稀疏度的MoE模型。 MoE这种混合专家模型,设计的初衷是通过“激活一堆专…...
ALBEF的动量蒸馏(Momentum distillation)
简单记录学习~ 一、传统 ITC Loss 的局限性 One-Hot Label 的缺陷 传统对比学习依赖严格对齐的图文对,通过交叉熵损失(如 softmax 归一化的相似度矩阵)强制模型将匹配的图文对相似度拉高,非匹配对相似度压低11。但 one…...
浏览器WEB播放RTSP
注意:浏览器不能直接播放RTSP,必须转换后都能播放。这一点所有的播放都是如此。 参考 https://github.com/kyriesent/node-rtsp-stream GitHub - phoboslab/jsmpeg: MPEG1 Video Decoder in JavaScript 相关文件方便下载 https://download.csdn.net…...

将PDF转为Word的在线工具
参考视频:外文翻译 文章目录 一、迅捷PDF转换器二、Smallpdf 一、迅捷PDF转换器 二、Smallpdf...

03. 对象的创建,存储和访问原理
文章目录 01. 对象创建1.1 创建过程概览1.2 类加载检查1.3 为对象分配内存1.4 将内存空间初始化为零值1.5 设置对象的必要信息1.6 总结 02. 对象的内存布局2.1 对象头区域2.2 实例数据区域2.3 对齐填充区域2.4 总结 03. 对象的访问定位其他介绍01.关于我的博客 注:读…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...