论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
云原生
›
20.LMAX——DDD的极致性能架构
20.LMAX——DDD的极致性能架构
不到断气不罢休
论坛元老
|
2025-2-14 09:58:51
|
来自手机
|
显示全部楼层
|
阅读模式
楼主
主题
1700
|
帖子
1700
|
积分
5100
学习视频来源:DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid=1940048&ctype=0
汗青
LMAX是由Martin Fowler 2011年提出,原文地址: https://martinfowler.com/articles/lmax.html
开端
金融零售平台,要求高性能
达到单线程600万TPS,一个线程一秒钟能处理600万个生意业务哀求
LMAX架构名称就是以这个生意业务平台的名字命名的
架构目的
超高TPS。这里的TPS不是指只把数据读出来,是要有写入操纵的,有变动的。
架构要素
1. 聚合常驻内存
在范畴驱动计划中,不管以什么方式计划,最后要得到的就是“聚合”。在LMAX中,聚合是一直在内存中存在,不像传统的架构,用的时候把聚合从数据库中加载到内存,修改后生存到数据库 ,内存中的聚合就被接纳掉了。
2. 变乱溯源
需要高可用写入范畴变乱,宕机重启后可以从范畴变乱重建聚合。
3. 单线程异步非阻塞IO(串行,无锁)
外部系统发过来的哀求会先写入环形队列
Input Disruptor
,
Business Logic Processor
会串行化地从队列中一个一个取出来哀求处理,并将效果写入到
OutDisruptor
中,这个效果就是
范畴变乱
。
它没有给客户端直接返回效果,它是完全异步化的过程,客户端发过来哀求后不会等待,直接退出。客户端会监听相应的变乱,当收到相应的变乱,才知道操纵是否成功。Disruptor是一个高性能的队列框架,当初就是为了LMAX架构而计划的。
时序对比
传统时序
变乱溯源时序
LMAX时序
单线程非阻塞异步IO(reactor)
多线程
- CPU在多线程间切换开销高 (相对于reactor)
- 阻塞
每个哀求一线程模式,并发受线程数限制。像传统的tomcat这种方式,一个哀求对应一个线程。
- 非阻塞
聚合在内存中只有一个实例,多线程情况下就会出现并发问题,以是就需要对实例加锁,加锁情况下每个聚合实际并发1。
单线程
串行执行,无需加锁,一个CPU执行一个线程。CPU不会频繁在用户态和内核态切换。
阻塞
假如用阻塞的方式,并发能力1,性能暴跌,以是只能用非阻塞方式。
非阻塞 (超高性能的唯一选择)
变乱溯源
为什么要使用变乱溯源,主要有两点:
只恒久化范畴变乱,带来高性能写
确保重启服务器时,可以范畴变乱中,重建聚合。
高可用方案
聚合放在内存中,假如宕机怎么办呢,以是需要计划高可用方案。
所有的高可用方案都是通过冗余来实现的。
main(主机器)
会发出所有的变乱,
follower(从机器)
会不断的重播这些变乱,并重建聚合。假如main和follower之间没有高延迟,二者就可以在短时间内保持同等性。supervisor会监测main和follower, 一旦main出现宕机,就会在follower中选择一个作为新的主机器main,并告诉网关,将哀求发到新的主机器上去。
代价
1. 无数据库事务
无先操纵后回滚,必须严酷前置完成所有校验,才能变动聚合内的状态数据,才能发布范畴变乱。
2. 运行时外部调用变复杂
因为异步的原因,导致它和外边系统交互很复杂。需要写代码处理异步IO,给编写代码带来负担。需要减少主动外部调用: 监听变乱提前组装数据 (数据量小)
显式变乱驱动方式
3. 受内存巨细限制
因为聚合全部在内存中,假如聚合数量太大就需要用多台服务器去做数据分区,架构更复杂。
总结
优点
极致性能
全内存化模型计划,更机动自由,可以大量使用对象和对象之间的引用。不像之前传统计划聚合的时候,是尽量减少聚合和聚合之间的引用。
缺点
异步编程带来的编程难度
高可用架构更复杂。传统的架构,只需要将服务复制很多份,服务是无状态的,它们共享同一个数据库。当我们需要高可用的,只需要多部署几台服务器就可以了,不存在主从切换问题、数据不同等问题。
实用范围
聚合数据量适合内存化,需要极致TPS场景,比如:
某些游戏服务器
频繁的执行操纵,服务端不断的响应。
火车订票
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
不到断气不罢休
论坛元老
这个人很懒什么都没写!
楼主热帖
Spark的一些重要概念
手绘地图深度解析:类型、风格、功能、 ...
从SAP ECC升级到SAP S4HANA, 几个Key P ...
数据库设计员工管理系统
【Redis高手修炼之路】初学Redis——概 ...
MySQL触发器
【高效学数据库】第一范式、第二范式、 ...
19.HVV溯源
物联网无线数传通信模块设备常见的几种 ...
用Python计算从1到500之间偶数的和 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
公有云
快速回复
返回顶部
返回列表