并发系统设计
并发系统设计简单描述。
数据库层面
- 分库分表
- 分库:是为了解决数据库连接资源不足问题,和磁盘IO的性能瓶颈问题。
- 分表:是为了解决单表数据量太大,sql语句查询数据时,即使走了索引也非常耗时问题。此外还可以解决消耗cpu资源问题。
- 读写分离
- 二八原则:一个系统当中可能有80%是读数据请求,另外20%是写数据请求。
- 一主多从架构
- 索引
- insert数据时,需要给索引分配额外的资源,对insert的性能有一定的损耗。
- 可以将多个单个索引,改成一个联合索引。
- 使用explain关键字,查询SQL语句的执行计划,看看哪些走了索引,哪些没有走索引。
- 可以使用force index来强制查询sql走某个索引。
编码层面
- 批处理
- 提供批量查询接口
- 根据实际情况,建议控制每次请求的记录条数在500以内。
- 限流:nginx、redis
- 对同一ip限流
- 对接口限流
- 缓存
- 二级缓存:基于应用服务器的内存缓存。
- 分布式缓存:Redis、Memcached等。
- 异步
- 线程池
- mq(线程池消费消息)
- 其他:
- 验证码
架构层面
集群
- 应用服务器集群、数据库集群、中间件集群、文件服务器集群
- 例如 Redis,提供三组机器,没组都是单独的普通的master/slave模式,通过代码进行数据路由。
负载均衡:轮询、weight权重、ip hash(可解决Session共享)、最少连接数、最短响应时间等等。
- linux下有
Nginx
、LVS
、Haproxy
等服务可以提供负载均衡服务。 - 在SpringCloud微服务架构中,大部分使用的负载均衡组件就是
Ribbon
、OpenFegin
或SpringCloud Loadbalancer
。 - 硬件方面,可以使用
F5
实现负载均衡。
- linux下有
前端项目:
- 页面静态化
- CDN加速
高可用
- 服务降级
- 故障转移
- 异地多活
其他
- 压测
- 压测工具:Jemter、LoaderRunnder、Locust等
- 监控
- Prometheus:
监控
和预警
功能
- Prometheus: