高并发解决方案总结

高并发解决方案总结
高并发解决方案总结

高并发解决方案总结

1.使用缓存

在绝大多数情况下,服务器的压力都会集中在数据库,减少数据库的访问次数,就可以减轻服务器的压力。所以,在高并发场景下,缓存的作用是至关重要的。

redis缓存数据库,它可以很好的在一定程度上解决一瞬间的并发量,redis之所以能解决高并发的原因是它可以直接访问内存,提高了访问效率,解决了数据库服务器压力。

使用缓存框架的时候,我们需要关心的就是什么时候创建缓存和缓存失效策略。

缓存的创建可以通过很多的方式进行创建,具体也需要根据自己的业务进行选择。例如,供应商平台的应用信息,应用上线后就进行缓存。需要注意的是,当我们修改或删除应用信息的时候,我们要考虑到同步更新该条缓存。

2.数据库优化

数据库优化是性能优化的最基础的一个环节,虽然提供了缓存技术,但是对数据库的优化还是一个需要认真的对待。数据库优化的方式很多,这里说下分表与分区。

?分表

分表的适用场景

1. 一张表的查询速度已经慢到影响使用的时候。

2.当频繁插入或者联合查询时,速度变慢。

分表后数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个的分表里面。分表的重点是存取数据时,如何提高数据库的并发能力。分表后,单表的并发能力提高了,磁盘I/O性能也提高了。

以安审日志服务的历史记录表为例:

表按年月拆分,格式为:表名+年+月,例如:TEST_202001、TEST_202002、、TEST_202003……然后可以

根据日期来查询。

?分区

分区的适用场景

1. 一张表的查询速度已经慢到影响使用的时候。

2.表中的数据是分段的。

3.对数据的操作往往只涉及一部分数据,而不是

所有的数据。

分区是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上。分区把存放数据的

文件分成了许多小块,分区后的表还是一张表,数据处理还是

由自己来完成。

3.分离数据库中活跃的数据

数据库的数据虽然很多,但是经常被访问的数据还是有限的,

因此可以将这些相对活跃的数据进行分离出来单独进行保存来提高

处理效率。其实前边使用redis缓存的思想就是一个很明显的分离数据库中活跃的数据示例,将应用经常使用的数据缓存在内存中。

还有一种场景就是,例如一个网站的所用注册用户量很大千万

级别,但是经常登录的用户只有百万级别,剩下的基本都是很长时

间都没有进行登录操作,如果不把这些“僵尸用户”单独分离出去,那么我们每次查询其他登录用户的时候,就白白浪费了这些僵尸用

户的查询操作。

4.批量读取和延迟修改

批量读取和延迟修改的原理是通过减少操作数据库的操作来提

高效率。

批量读取:将多次查询合并到一次中进行读取,因为每一个数

据库的请求操作都需要链接的建立和链接的释放,还是占用一部分

资源的,批量读取可以通过异步的方式进行读取。

延迟修改:对于一些高并发的并且修改频繁修改的数据,在每

次修改的时候首先将数据保存到缓存中,然后定时将缓存中的数据

保存到数据库中,程序可以在读取数据时可以同时读取数据库中和

缓存中的数据。

5.反向代理

当一台服务器的单位时间内的访问量越大时,服务器压力就越大,反向代理服务器可以做负载均衡,我们可以通过负载均衡的方

式来分担服务器压力。

比如nginx支持配置反向代理,通过反向代理实现负载均衡。

相关主题
相关文档
最新文档