由买买提看人间百态

topics

全部话题 - 话题: 鸠摩智
首页 上页 1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)
z****e
发帖数: 54598
1
细节到时候查都来得及
你有脑没脑啊,当人脑是什么?机器吗?
你就是一机器吗?
z****e
发帖数: 54598
2
老魏,人家amazon干活的早就对你定位了
new grad+2 years
你服气不服气?不服过去amazon试试,看给什么价格
g*****g
发帖数: 34805
3
http://www.mitbbs.com/article/Programming/31281349_0.html
你可以看看这篇,前后分开,前端只管存单子,完全无锁是高并发的核心。
我老做人不爱张扬,不会一个计数器就要发N个帖子 attention whore.
后端其实用原来的legacy系统就好,我对系统出票速度就是5k-10K, 同主题还可以看到
一些对优化降低延迟的讨论。
x****u
发帖数: 44466
4
一秒出票1万都用不了
n*****t
发帖数: 22014
5
连现有的 12306 都不如,娘哎 。。。
L*****e
发帖数: 8347
6
多谢老魏耐心解释,不过请原谅我继续打破砂锅问到底,如果意外发生,很可能是你单
机串联间的网络先断,然后你的抢票主机再当,那么这时你抢票机内存里的数据即没有
发送到串联的failover单机上,也没法在断电后保存。。。还是说,一旦串联机当机,
你抢票主机也停止接单?(这不像是failover了,这是一损俱损吧?)
也许是我思想比较陈旧,总觉得所有数据如果不能保证最终写到硬盘上,总不能保证
data persistent and consistent。。。
n*****t
发帖数: 22014
c****3
发帖数: 10787
8
我理解这个倒是简单,机器之间有个heartbeat的交换就行了
x****u
发帖数: 44466
9
12360一秒出一万张票?有那么多票谁还抱怨买票难。
L*****e
发帖数: 8347
10
这个我看了,这个和我提的在支付时到后台硬盘数据库验证并更新本质是一样的。。。
n*****t
发帖数: 22014
11
双鸡热备份,前端 CACHE 鸡收到确认消息,向备份鸡 FWD。备份鸡与主鸡之间 HB
L*****e
发帖数: 8347
12
通过heartbeat交换通知不是问题,我的意思是这改变了failover的本质,failover应
该是你一台机当了failover挑起大梁继续工作,这里成了串联的failover机一当,或者
串联网络一出问题,干脆整个系统都不工作了,这反而是增加了failure的概率。。。
T********i
发帖数: 2416
13
即使数据写在硬盘上,难道你还要花时间扒硬盘不成?
其实,failover的时候,没完成的transaction可当作没发生。
只要保持eventual consistency即可。
即使主机不死,前端web机也可能死。有机器死掉服务中断几毫秒到几秒都没问题。
关键的全局规划,unique id的种类越少越好。最好只有user id和req id。我们叫
ClOrdID。client order ID。
Amazon 是买东西,点Submit。屏幕一片白。买到没买到?用户要事后主动去查。或者
等通知。
即使我们的系统没问题,用户点完submit后宕机呢?
c****3
发帖数: 10787
14
就和OSPF路由协议一样,平时交换heart beat,先选好master和backup,master当机了
,backup变成master。
当机那一刻master的状态是没法保持了,这是没有办法的。
L*****e
发帖数: 8347
15
支付的时候扒硬盘不是大问题,本来支付的transaction就很慢。。。
我理解你前面说的是支付的transaction是走另外一个flow,串联机备份是单独的一个
flow。如果你是说先在串联机上备份,完成后再走支付的transaction。就是说串联备
份成为支付的上游,那么failure发生后,你可以当作transaction没有发生。。。
g*****g
发帖数: 34805
16
12306一天出5m 票,1万每秒8分钟就放完了。订单那就多多了。
T********i
发帖数: 2416
17
对,一旦支付了。即使最后一台死掉都不怕。
假定支付系统能link 8 byte的req id。
其实,任何支付系统都要有能力绑定用户自定义ID的。假定系统设计者不脑残。
迄今为止,我还没见过很脑残的。
最后一台如果死掉,可能要靠支付系统sync ack。
x****u
发帖数: 44466
18
12306有几十年的乘客数据的,稍微一分析把热点拿出来独立做,一点压力也没有。
主要问题是出在前端上,应该说是没想象到抢票软件神威,没做合适的负载平衡。
L*****e
发帖数: 8347
19
老魏的方案里的“failover”其实不是failover的作用,而是内存数据备份的作用。。
。不能让他的串联机身兼二职。用串联机来做内存备份一定程度解决了数据丢失的问题
,但是另一方面增加了系统fail的概率,因为要保证数据不丢失,那么就得在备份失败
时就得系统停止交易。。。
g*****g
发帖数: 34805
20
人机器牛逼,所以一秒能丢5m 单。
d***a
发帖数: 13752
21
我也问过关于可靠性的问题,后来才意识到,他那个单机fail掉时,就让用户重新买票
,因为还没出票,这样做也行得通。
T********i
发帖数: 2416
22
多集群系统都有fail概率增大的问题。
问题是fail的代价。停止交易几毫秒到1-2秒,应该没大问题。
前端这时候甚至可以拒绝访问。
再说了,你搞几百台web前端,还不是隔三差五有fail的?用户看起来不是一样?
这点代价,换来consistency。
L*****e
发帖数: 8347
23
这个不太一样,多集群系统里的failover是一台机子出了问题,请求会被自动load
balance到别的failover机子上去,对于用户来讲,根本就察觉不到任何down time。但
是你的串联机出问题时,也就是说数据内存备份这一步失败,你是停止交易呢还是继续
交易?继续交易的话,那么数据备份这块就暂时缺失,停止交易呢,等于是你备份机出
问题导致你整个系统都停下来。。。
T********i
发帖数: 2416
24
怎么可能没有down time?要heartbeat interval干啥?
我这个除了heartbeat interval,还要上下游机器短暂sync,然后自动继续交易。
sync也可能丢失上游未发的消息,没发生的transaction就当没发生好了。
L*****e
发帖数: 8347
25
我是说failover用户察觉不到down time,不是说没有down time。
你的方案中,备份机当了,你抢票主机和下游哪个机子sync?还是说你有多个备份机?
这多个备份机和你的抢票主机并联?如果是这样,那么你备份机们和下游的支付及出票
transaction怎么联?并联?
c****3
发帖数: 10787
26
象它这种内存计数器,数据量很少,备份频率可以很高,在毫秒级别,备份message,
可以兼做heart beat用。 主机器down了,总会丢一些状态。会出现超卖现象,但是
down机也是小概率事件,偶尔超卖,问题也不大。
g*****g
发帖数: 34805
27
俺那么简单一个 Cassandra轮子,就能做到单数据中心废了没 downtime, 不丢数据。
你这东西差多了。
T********i
发帖数: 2416
28
你连IO都不懂,懂什么down tim3?
T********i
发帖数: 2416
29
单机串联三台,打头的是主机,其余的是备份机。
抢到票,主机更新counter,把消息依次下传,其余的收到消息,更新状态,同时下传。
最后一台,更新状态,同时传给支付机,同时生成ack,ack依次上传,至主机(打头机
),主机收到ack,才会告知前端机交易完成。
现在,你设计一个协议,保证任何两台down掉,都不会丢票。
不会丢票意思是,付了款的,一定会得到通知。
同时,出票数和付款绝对会match。
但是可能有人下了单,没有任何结果,这一定是还没付款,系统崩了,系统忽略了事。
需要主动查询。
因此,钱和票绝对都管住了。至于有被piss off因为下单了没屁结果的,那谁谁说了,
屁民能咋样?
down time毫秒级。
T********i
发帖数: 2416
30
你别毁我声誉。我确实eventual consistent的。
c****3
发帖数: 10787
31
我刚看到你设计的协议,这样确实是可以保持一致的。顺序向下传消息,等待回应的线
程和更新计数器的线程是一个吗?
z*******3
发帖数: 13709
32
eventually consistent
不是eventual consistent
老外语法比你强一万倍
T********i
发帖数: 2416
33
肯定不是一个线程。
d***a
发帖数: 13752
34
说白了,你做的系统里有一台机器专门做票的调度,告诉谁谁谁应该坐
哪个座位。另一台机器按调度的结果来收钱,出票据和记录。第二台机
器用常规数据库系统,保证不出错,数据也不掉。
做调度的机器出了问题,有的人买票请求就可能被丢掉了,但不会被收
钱。第一台机器重启后,从第二台机器里拿来记录,重建自己的记录,
搞清楚哪些座位的哪些区间是空闲的,再开始调度。这样说对吧?
T********i
发帖数: 2416
35
连调度都不做。只是一个计数器告诉你买到票了。
确定买到票了,再由另外机器分座位都行。
你可以想象3台单机串联,只有第一台做决定,其它的只更新状态,前后传递消息。
c****3
发帖数: 10787
36
好像计数器更新也是靠消息驱动的。
所以你还得做一个FIFO 的Queue,更新完计数器,把消息放到Queue尾,另一个线程从
Queue头读消息,发给下一个机器。
T********i
发帖数: 2416
37
sequenced message么,我一直都这么说。sequence是关键。因为,第一,有次序,第
二,不能丢。有sequence gap要补上,也就是,fail后sync。
L*****e
发帖数: 8347
38
我理解串联的意思是A-> B-> C-> D-> 下游支付出票。。。
现在B当机了,或者说A到B的网络断了,你的方案A就连到了C?这不叫串联了吧?

传。
★ 发自iPhone App: ChineseWeb 8.2.2
T********i
发帖数: 2416
39
还是串联,是fail后重新拓扑。
n*****t
发帖数: 22014
40
消息串联,物理都在一个 hub 上, 主机之间民主选举谁先上谁后上
T********i
发帖数: 2416
s******y
发帖数: 416
42
闭嘴!大人说话S13别插嘴!
n*****t
发帖数: 22014
43
我们蓝翔技校一直用 HUB 哈哈
T********i
发帖数: 2416
44
其实我也一直用hub。
Arista 7系列。latency 500ns。
d***a
发帖数: 13752
45
如果是这样,我感觉你这个算法会有点问题...但我也不肯定。
L*****e
发帖数: 8347
46
哦,现在基本听明白了,算是把三个月前漏掉的讨论补了补,多谢!

★ 发自iPhone App: ChineseWeb 8.2.2
T********i
发帖数: 2416
47
其实,双向都是sequenced message。只要最后一台剩下,consistency就有保障。
我这里,最后一台是支付系统。
前面还要留一台我的计数器机才能提供服务。而且,支付系统挂了,我的计数器机里还
有journal log。
d***a
发帖数: 13752
48
构思是不错,感觉还可以简化,简单的可靠度高,对吧。
T********i
发帖数: 2416
49
我的设计就是一个messaging system。
如果你能再简化,那当然好。
s*******y
发帖数: 851
50
好虫的方案比老魏的强,老魏的实际上根本不可行,纯粹技术忽悠型。
首页 上页 1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)