网站首页 文章专栏 处理高并发业务思路

处理高并发业务思路

编辑时间:2019-09-30 14:19:09 作者:苹果 浏览量:2489


    前言:一个项目刚开始的时候是为了实现基本功能,数据量并不大,很容易满足业务需要;但是随着版本和功能的迭代,大数据和高并发成了网站设计必须考虑的问题



给出鄙人的三点愚见:


    1.代码部分 尽量减少与数据库交互
        1>.页面静态化- 用户可以直接获取页面,不用走那么多流程,比较适用于页面不频繁更新
        2>.接口静态化- 部分请求接口数据不需要频繁变动的
        3.>页面静态化+接口动态化 - 有些页面,整体结构是一样的,但是有个别数据是要实时变化的
        4.>使用缓存- 第一次获取数据从数据库准提取,然后保存在缓存中,以后就可以直接从缓存提取数据。不过需要有机制维持缓存和数据库的一致性,设置一个合理的过期时间
        5.>延迟修改 - 高并发情况下,可以把多次修改请求,先保存在缓存中,然后定时将缓存中的数据保存到数据库中(队列的思想),风险是可能会断电丢失缓存中的数据,
        6.>尽可能的用带有索引的数据去取数据,然后用代码逻辑去转变成自己想要的数据,尽可能避免多表联查


    2.服务器层面  分发处理请求

        1>.nginx反向代理 - 将并发请求分配到不同的服务器上,可以是业务服务器,也可以是数据库服务器。
        2>.分布式 - 分布式是把单次请求的多项业务逻辑分配到多个服务器上,这样可以同步处理很多逻辑,一般使用与特别复杂的业务请求。
        3.>CDN - 在域名解析层面的分流,例如将华南地区的用户请求分配到华南的服务器,华中地区的用户请求分配到华中的服务器。

    3.数据库层面  各种方法拆
        1>.水平分表 - 对于访问极为频繁且数据量巨大的单表来说,首先要做的是减少单表的记录条数,以便减少数据查询所需的时间,提高数据库的吞吐,这就是所谓的分表【水平拆分】
        2>.垂直分表 - 根据数据库字段的特效,拆成多张数据表,降低业务耦合性
        3>.垂直分库- 是根据业务耦合性,将关联度低的不同表存储在不同的数据库上,对数据库进行拆分,从而提高数据库写入能力,即分库【垂直拆分】
        4>.建立主从 读写分离- 只在主服务器上写,只在从服务器上读.基本原理是让主数据库处理事务性查询,而从数据库处理select查询,数据库复制被用于把事务性查询(增删改)导致的改变更新同步到集群中的从数据库。



其他特殊场景:
1.某一业务请求特别高,需要经常访问后端服务器
办法:
       1>.在域名解析层面的分流,走不同的服务器
       2>.将这个业务的逻辑处理服务分布到多台服务器上,在入口机根据ip 做一次服务器层面的分流
       3>.根据用户ID,将其业务相关的用户数据表分成多张数据表
       4>.分离活跃数据,例如登录用户业务,注册用户很多,但是活跃的登录用户很少,可以把活跃用户专门保存一张表,查询是先查询活跃表,没有的话再查总表
       
2.秒杀活动:
办法:详见我之前的一篇文章《利用redis实现 限时秒杀》
     
     



    出自:何冰华个人网站

    地址:https://www.hebinghua.com/

    转载请注明出处


来说两句吧
最新评论