并发系统设计

并发系统设计简单描述。

数据库层面

  1. 分库分表
    1. 分库:是为了解决数据库连接资源不足问题,和磁盘IO的性能瓶颈问题。
    2. 分表:是为了解决单表数据量太大,sql语句查询数据时,即使走了索引也非常耗时问题。此外还可以解决消耗cpu资源问题。
  2. 读写分离
    1. 二八原则:一个系统当中可能有80%是读数据请求,另外20%是写数据请求。
    2. 一主多从架构
  3. 索引
    1. insert数据时,需要给索引分配额外的资源,对insert的性能有一定的损耗。
    2. 可以将多个单个索引,改成一个联合索引。
    3. 使用explain关键字,查询SQL语句的执行计划,看看哪些走了索引,哪些没有走索引。
    4. 可以使用force index来强制查询sql走某个索引。

编码层面

  1. 批处理
    1. 提供批量查询接口
    2. 根据实际情况,建议控制每次请求的记录条数在500以内。
  2. 限流:nginx、redis
    1. 对同一ip限流
    2. 对接口限流
  3. 缓存
    1. 二级缓存:基于应用服务器的内存缓存。
    2. 分布式缓存:Redis、Memcached等。
  4. 异步
    1. 线程池
    2. mq(线程池消费消息)
  5. 其他:
    1. 验证码

架构层面

  1. 集群

    1. 应用服务器集群、数据库集群、中间件集群、文件服务器集群
    2. 例如 Redis,提供三组机器,没组都是单独的普通的master/slave模式,通过代码进行数据路由。
  2. 负载均衡:轮询、weight权重、ip hash(可解决Session共享)、最少连接数、最短响应时间等等。

    1. linux下有NginxLVSHaproxy等服务可以提供负载均衡服务。
    2. 在SpringCloud微服务架构中,大部分使用的负载均衡组件就是RibbonOpenFeginSpringCloud Loadbalancer
    3. 硬件方面,可以使用F5实现负载均衡。
  3. 前端项目:

    1. 页面静态化
    2. CDN加速
  4. 高可用

    1. 服务降级
    2. 故障转移
    3. 异地多活

其他

  1. 压测
    1. 压测工具:Jemter、LoaderRunnder、Locust等
  2. 监控
    1. Prometheus: 监控预警 功能
Last Updated:
Contributors: 拔土豆的程序员