高并发解决方案
请求从客户端发出到数据库的持久化这个过程着手优化。其中请求流转经过这几个地方。
网关
- 搭建高可用集群,可以选择比较能扛并发的网关,例如:NodeJS ,配合 Nginx 实现负载均衡,加上keepalive保证某个 Nginx 出现问题时自动切换。
业务系统
- 可以通过消息中间件解耦,解决上游系统和下游系统的强依赖,防止下游系统奔溃业务无法处理
数据库
- 数据库搭建集群,搭建集群后需要做集群的负载均衡
- 通过缓存或者消息中间件给数据库做缓冲(不适合敏感数据操作)
- 使用乐观锁代替悲观锁(不适合敏感数据操作,适合读多写少的情况)
- 悲观锁 假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。
- 假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。
- 实现乐观锁的方式:
- 使用数据版本(Version)记录机制实现。提交事务时检查版本号是否被修改,若被修改则事务回滚,否则执行
- 使用时间戳(timestamp),在表中维护一个时间戳,提交时检查时间戳是否被修改,没有则提交事务,否则回滚
- 数据库实现冷热分离,将经常查的数据放到缓存中或者单独的一个数据库中。
注意:
高并发最需要解决的就是数据库的问题。因为最终所有的数据都是需要入库的,但是数据库写操作存在行锁并发操作事务等问题,所以解决数据库并发问题是关键,具体的业务需要具体分析,提高数据库并发是根本。
参考:
高并发资金交易系统设计:m.sohu.com/a/126891351…