Wednesday, December 9, 2015

学术贴,1M/s ACID Message Queue

http://www.mitbbs.com/article_t/Programming/31457835.html

发信人: teacherwei01 (TW), 信区: Programming
标  题: 学术贴,1M/s ACID Message Queue
发信站: BBS 未名空间站 (Wed Dec  9 09:29:02 2015, 美东)

其实严肃讨论的,我的12306架构又转移到出票机(支付系统)上面来了。

如果要达到我说的性能,其实支付端要实现一个ACID的系统。幸好我们的应用简单,不
需要通用ACID数据库,只需要简化成一个ACID message queue就好了。

ACID message queue,输入是有序的message。每个message带一个单调递增的message
ID。甚至增量严格定义为1没有问题。

如果抢票机死掉,这个message queue负责回放某个message ID开始的所有交易。恢复
现场。

其实这个message queue关键技术在于存储。存储设备的IOPS要达到至少1M IOPS。
网上搜搜,就可以看到多少battery backed RAMDisk或者SSD能够达标就好了。
思索的几点误区:

1. 文件系统开销呢?
答:raw memory map file,可以确保每次写一个record(512 byte以内)正好一个IO
。记住一定每个记录都要fsync阿。呵呵。

2. message queue挂了怎么办?
答:多于一个串联,甚至可以跨DC partition。这也是我当年强调的一串单机。记住,
一串queue,throughput不变。彼此都能恢复。恢复协议不要太简单呵呵。

3. 即使有1M IOPS,那么你光写IO了,还干不干别的?
答:其实这个和误区2也有关。写I/O其实是独立的core thread。记住,网络收到了,
但是没写I/O,其实可以当作没收到。写了I/O以后才能送给下家。

其实这种类似的产品金融圈用了多年了。我还知道有人专门开公司做这种产品。本来就
不是稀奇的东西。

说白了,这是一种带各种限制的专用系统。通用系统不能做1M,不代表专用的不能。我
个人认为,现有技术,record不大,做5M都没问题。

No comments:

Post a Comment