如果让你自己设计一个分布式架构的中间件系统,该怎么做?
ccwgpt 2025-05-30 13:15 7 浏览 0 评论
目录
- 1、Master-Slave架构
- 2、异步日志持久化机制
- 3、检查点机制:定时持久化全量数据
- 4、引入检查点节点
- 5、总结 & 思考
这篇文章,给大家来聊一个生产级的中间件系统的架构设计实践,希望给对中间件系统感兴趣的同学一点启发。
1、Master-Slave架构
这个中间件系统的本质是希望能够用分布式的方式来处理一些数据,但是具体的作用涉及到核心技术,所以这里不能直接说明。
但是他的核心思想,就是把数据分发到很多台机器上来处理,然后需要有一台机器来控制N多台机器的分布式处理,大概如下图所示。
那么既然是分布式的处理,就肯定涉及到在Master中要维护这个集群的一些核心元数据。
比如说数据的分发处理是如何调度的,处理的具体过程现在什么进度了,还有就是对集群里存放数据进行描述的一些核心元数据。
这些核心元数据肯定会不断的频繁的修改,大家此时可以想,无论你是基于外部的文件还是数据库,或者是zookeeper来存放这些元数据的话,其实都会导致他的元数据更新性能降低,因为要访问外部依赖。
何况这种复杂的元数据其实还不一定能通过zk或者数据库来存放,因为他可能是非格式化的。
所以这里一个核心的设计,就是将核心元数据直接存放在Master的内存里,这样可以保证高并发更新元数据的时候,他的性能是极高的,而且直接基于内存来提供对外的更新服务。
如果Master部署在高配置物理机上,比如32核128GB的那种,每秒支持10万+的请求都没问题。
2、异步日志持久化机制
但是这里有一个问题,假如说Master进程重启,或者是突然宕机了,那么内存里的数据不就丢失了么?
对,所以针对这个问题,既然已经否决掉了基于外部存储来写入元数据,那么这里就可以采取异步持久化日志的机制,来通过异步化的方式把元数据的更新日志写入磁盘文件。
每次Master收到一个请求,在内存里更新元数据之后,就需要生成一条元数据的更新日志,把这个更新日志需要写入到一个内存缓冲里去。
然后等内存缓冲满了之后,由一个后台线程把这里的数据刷新到磁盘上去,如下图。
肯定会有人说,那如果一条更新日志刚写入缓冲区,结果Master宕机了,此时不是还是会丢失少量数据吗?因为还没来得及刷入磁盘。
没错啊,这个为了保证高并发请求都是由内存来处理的,你必须得用异步持久化磁盘的模式,所以必然要容忍极端宕机情况下,可能丢失比如几秒钟的数据。
那么如果是正常的Master重启呢?
那简单,必须先把日志缓冲区清空刷入磁盘,然后才能正常重启Master,保证数据都在磁盘上不会丢失。
接着重启的时候,从磁盘上读取更新日志,每一条都依次回访到内存里,恢复出来核心元数据即可。
3、检查点机制:定时持久化全量数据
但是这里又有一个问题了,那个磁盘上的日志文件越来越大,因为元数据不断的在更新,不断在产生最新的变更日志写入磁盘文件。
那么系统运行一段时间以后,每次重启都需要从磁盘读取历史全部日志,一条一条回放到内存来恢复核心元数据吗?
不可能,所以这里一定要配合引入检查点机制。
也就是说,每隔一段时间,就需要开启一个后台线程,把内存里的全部核心元数据序列化后写入磁盘上的元数据文件,作为这个时间的一个快照文件,同时清空掉日志文件,这个叫做检查点操作。
下次重启,只要把元数据文件读取出来直接反序列化后方入内存,然后把上次检查点之后的变更日志从日志文件里读出来回放到内存里,就可以恢复出来完整的元数据了。
这种方式,可以让Master重启很快,因为大部分数据都是在检查点写入的那个元数据文件里。
整个过程,如下图所示:
4、引入检查点节点
但是这个时候又有一个问题了。
大家可以想一下,Master内存里的元数据需要高并发的被人访问和修改,同时每隔一段时间还要检查点写入磁盘。
那么在检查点过程中,是不是需要把内存数据全部加锁,不允许别人修改?
在加锁的时候,把不会变动的数据写入磁盘文件中,但是这个过程是很慢的,意味着此时别人高并发的写入操作都需要等待核心元数据的锁。
因为此时别人锁住了,你无法加锁去写数据进去,这会导致系统在几秒内出现卡顿无法响应请求的问题。
所以此时需要在架构设计里引入一个检查点节点,专门负责同步Master的变更日志。
然后在自己内存里维护一份一模一样的核心元数据,每隔一段时间由检查点节点来负责将内存数据写入磁盘,接着上传发送给Master。
这样做,就不需要Master自己执行检查点的时候对自己内存数据进行加锁了,如下图。
在这样的一个架构下,对Master来说,他只需要一个后台线程负责接收Checkpoint进程定时传送过来的元数据文件快照然后写入本地磁盘就可以了,完全规避掉了对自己内存元数据的锁冲突的问题。
5、总结 & 思考
总结一下这个架构设计,其实就是Master基于内存维护元数据,这样一台物理机可以支撑每秒10万+的高并发请求。
每次元数据出现更新,写一条日志到内存缓冲区,然后后台线程去刷新日志到日志文件里去,同时需要发送一条日志到Checkpoint节点去。
Checkpoint节点会在自己内存里维护一份一模一样的元数据,然后每隔一段时间执行checkpoint检查点写一份元数据文件快照。
接着上传给Master节点后清空掉他的日志文件。然后Master节点每次重启的时候直接读取本地元数据文件快照,加上回放上次checkpoint之后的日志即可。
这里可能大家会提几个问题,比如说Master节点突然宕机会如何?
那很简单,直接影响就是他内存缓冲里的那些日志丢了,导致少量数据丢失,这个在我们的场景下可以容忍。
如果Checkpoint节点宕机怎么办?
那不要紧,因为他之前上传过元数据文件的快照,所以对Master而言最多就是无法同步数据过去。
但是Master重启,还是可以读取最近一次的元数据快照,然后回放日志即可。
等Checkpoint节点恢复了,可以继续接着上一次同步日志,然后继续执行checkpoint操作。
------------- END -------------
另外推荐儒猿课堂的1元系列课程给您,欢迎加入一起学习~
互联网Java工程师面试突击课(1元专享)
SpringCloudAlibaba零基础入门到项目实战(1元专享)
亿级流量下的电商详情页系统实战项目(1元专享)
Kafka消息中间件内核源码精讲(1元专享)
12个实战案例带你玩转Java并发编程(1元专享)
Elasticsearch零基础入门到精通(1元专享)
基于Java手写分布式中间件系统实战(1元专享)
基于ShardingSphere的分库分表实战课(1元专享)
相关推荐
- 鸿蒙操作系统的核心组件(五):分布式文件系统
-
HarmonyOS的文件系统是其分布式架构的核心组成部分,具备本地高效存储与跨设备协同的双重优势。文件系统架构与层级设计HarmonyOS文件系统遵循分层设计,由内核层、系统服务层、框架层和应用层构成...
- 分布式系统架构终极指南:一文吃透核心技术栈与高薪进阶秘籍!
-
“为什么阿里、腾讯的系统能扛住双11亿级流量?为什么你的项目一上云就崩?凌晨3点,张工程师盯着监控大屏上飙升的CPU曲线和雪崩式的服务超时报警,手指发抖地敲下了一行kill-9——这已经是本周第3次...
- Zookeeper:分布式架构详解、分布式技术详解、分布式事务
-
优质文章,及时送达作者|Java高级互联网架构链接|toutiao.com/a6742369092881089028/一、分布式架构详解1、分布式发展历程1.1单点集中式特点:App、DB...
- 如果让你自己设计一个分布式架构的中间件系统,该怎么做?
-
目录1、Master-Slave架构2、异步日志持久化机制3、检查点机制:定时持久化全量数据4、引入检查点节点5、总结&思考这篇文章,给大家来聊一个生产级的中间件系统的架构设计实践,希望给对中间件...
- 400亿参数大模型:分布式算力,DeepSeek架构,3090单卡部署
-
闻乐发自凹非寺量子位|公众号QbitAI打破科技巨头算力垄断,个人开发者联手也能训练超大规模AI模型?NousResearch宣布推出PsycheNetwork,可以将全球算力整合起来训...
- go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)
-
目录go微服务框架kratos学习笔记九(kratos全链路追踪zipkin)zipkin使用demo数据持久化本节简单搭建一下zipkin,zipkin是Twitter基于google的分布式监...
- 组图丨安全生产管理思维导图
-
...
- 高中化学思维导图整理汇总(必修+选修),建议转发收藏
-
化学必修1化学必修2化学选修3化学选修4化学选修5...
- 刑诉法知识框架思维导图,建议打印收藏
-
为了让各位宝子们复习效率更高,今天合合菌为大家整理了刑诉法学科的思维导图。大家可以利用思维导图来加深对刑诉法各个知识点的理解,搭建知识框架。刑诉法学科思维导图后续合合菌还会为大家准备其他学科的思维导图...
- 一定要收藏的面试思维导图
-
我是可爱又迷人:1.常见面试题有哪些?主要从以下一些知识点做了准备:常用的分析方法、Excel、SQL、A/B测试、产品分析。然后每份面试针对职位要求,还有前期和HR聊天一点点了解这个职位之后,定...
- 八年级地理知识点思维导图梳理,这样记节省80%的时间,抓紧收藏
-
右上角关注我,每天分享这方面的技巧!点击左上角“我的头像”,【最上方】更多实用内容!不怕同桌是学霸,就怕学霸有方法。很多家长总是觉得孩子学习不努力,写作业没有耐心,听课没有效率。所以总是在不停...
- 思维导图:比喻和拟人使用大全,家长收藏好,孩子把作文写“活”
-
学生在写作文的时候必须要用到各种修辞手法,才会使得作文形象生动,比较常用的修辞手法有比喻、比拟、排比、反复、借代、借喻、设问、反问、夸张、对偶等。但很多孩子不清楚比喻、比拟的区别。所以使用起来经常不到...
- 《易经》思维导图,一图读懂古人智慧(收藏)
-
《易经》算是一部关于万象变化的古老经典了,一度被誉为“诸经之首,大道之源”,相传成书于西周时期,作者为伏羲。很多朋友将《易经》与《周易》混为一潭,实际上它们并不是一回事,《易经》分为三部易书,分别是《...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)