(昂赛特设计题)如何设计一个itunes/google play购买物品的系统# JobHunting - 待字闺中
e*3
1 楼
设计一个itunes/google play购买物品的系统 with high availability. 比如某个游
戏是1刀,你点击之后server会跟银行talk要从你卡里扣除这一刀.还有这charge的一刀
有一部分是要给developer的.这整个过程如何设计
这个是不是应该上kafka.目前能想到的是:
1. front end发送购买event把request经过load balancer发送到application server
preprocess这个request.
2. 然后把提取出来的相关user id, item id等信息作为message发送到kafka.
3. consumer server从kafka里拿出kafka的message,去database 取出相关user的卡信
息,发送给另一个server去Process
4. 这个server跟银行talk,charge了这一刀.然后update database记录下该user相关购
买信息.
5. consumer server commit.继续fetch message from kafka
6. 把这个successful charge的message发给另一个kafka server.另一个consumer
servers负责处理分钱给developer,就是update developer相关的table,给developer
account加钱(不知道还有没有其他)
这过程有很多问题:
1. 跟银行talk的server如果在send charge message给银行后没来得及收到银行
successfully charge的信息就挂了,那这个怎么处理?是不是用two phase commit之类
保证exact once?
2. database用mysql还是nosql.感觉mysql就可以了. nosql没有acid保证是不是不好?
3. 用了2个kafka servers,是不是第二个可以不用啊?
4. 想到其他再update.
不知道这样设计对不对,应该有很多纰漏,大牛们赶紧指点指点.
戏是1刀,你点击之后server会跟银行talk要从你卡里扣除这一刀.还有这charge的一刀
有一部分是要给developer的.这整个过程如何设计
这个是不是应该上kafka.目前能想到的是:
1. front end发送购买event把request经过load balancer发送到application server
preprocess这个request.
2. 然后把提取出来的相关user id, item id等信息作为message发送到kafka.
3. consumer server从kafka里拿出kafka的message,去database 取出相关user的卡信
息,发送给另一个server去Process
4. 这个server跟银行talk,charge了这一刀.然后update database记录下该user相关购
买信息.
5. consumer server commit.继续fetch message from kafka
6. 把这个successful charge的message发给另一个kafka server.另一个consumer
servers负责处理分钱给developer,就是update developer相关的table,给developer
account加钱(不知道还有没有其他)
这过程有很多问题:
1. 跟银行talk的server如果在send charge message给银行后没来得及收到银行
successfully charge的信息就挂了,那这个怎么处理?是不是用two phase commit之类
保证exact once?
2. database用mysql还是nosql.感觉mysql就可以了. nosql没有acid保证是不是不好?
3. 用了2个kafka servers,是不是第二个可以不用啊?
4. 想到其他再update.
不知道这样设计对不对,应该有很多纰漏,大牛们赶紧指点指点.