系统高并发问题处理

Q1:订票系统,某车次只有一张火车票,假定有1w个人同时打开12306网站来订票,如何解决并发问题?

A1: 首先介绍数据库层面的并发访问,解决的办法主要是乐观锁和悲观锁。

乐观锁

假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。

乐观锁使用一个自增的字段表示数据的版本号(或者timestamp),更新的时候检查版本号是否一致,比如数据库中版本号为4,更新时版本号使用版本号version=5,与数据库中的版本号version+1=(5)做比较,如果相等,则可以更新,如果不相等,其他程序已更新该记录,返回错误。

悲观锁

假定会发生并发冲突,屏蔽一切可能违反数据完整行的操作。

一般需要使用数据库的锁机制,比如MysqlInnoDB引擎的行级锁。

结论:在实际生产环境中,如果并发量不大且不允许脏读(原始数据为5,AB两个事务,B其他事务更新数据为2,事务未提交时,A读取到的仍然为5),可以使用悲观锁。并发访问量大时,使用悲观锁有非常大的性能问题,可以选择乐观锁。

你可能感兴趣的:(系统高并发问题处理)