门票预订系统完全建立在Cassandra上

时间:2013-12-19 12:58:33

标签: database apache nosql cassandra

通过将所有信息存储在Cassandra集群中,是否可以构建Ticketmaster样式的票务预订系统?

系统需要能够

1. Display the correct number of tickets available at one time
2. Temporarily reserve a ticket while the customer is making the purchase
3. No two users can ever buy the same ticket.

为了保持一致,所有读写都应该在仲裁时进行。我不确定如何实施第2步或第3步?

1 个答案:

答案 0 :(得分:1)

是的,你可以。

但是,有些交易需要严格的一致性。例如,当用户浏览网站并将门票添加到他们的购物车时,一致性无关紧要,但当他们结账并在特定日期选择特定的座位号时,一致性很重要(双重预订是一件坏事,尤其是对于高兴趣事件)。

因此,您可以在最终一致的数据库中实现99%的功能,并在一致的数据库中实现结帐流程。这也很不错,因为您可以扩展99%的系统,这可能会在水平和多个数据中心之间获得> 70%的负载。请记住,您必须处理您的网站正在运行的情况,但结帐流程正在关闭(例如,结帐时的错误对话框要求他们等待/重试并为他们提供麻烦的促销代码)。

最后一个细节是,您需要更新最终一致的数据库"可用票数"有人退房后好消息是,这可以懒得完成 - 排队工作,并在系统有一些备用周期时执行。它肯定不会发生在用户结账过程的关键路径上。