高并发:一种系统运行过程中的一种“短时间内遇到大量操作请求”的情况,主要web系统集中大量访问收到大量请求,如12306抢票、双11等,
该情况的发生会导致系统在该段时间内执行大量操作,例如对资源的请求、数据库的操作等。
高并发处理指标:
- 响应时间:系统对请求做出相应的时间
- 吞吐量:单位时间内处理的请求数
- 每秒查询率QPS: 每秒相应请求数
- 并发用户数:同时承载正常使用系统功能的用户数量
高并发:-->秒杀系统等会导致在短时间内执行大量请求操作,若处理不好,不仅降低用户体验(请求响应时间过长),同时可能导致系统宕机
- 多线程:多线程可以理解为处理高并发的一种编程方法 --->为了提高jvm的执行效率,java提供了多线程机制提高数据处理效率
- 多线程并发技术:线程池、线程状态、线程间协作、悲观锁与乐观锁、共享数据访问的阻塞同步(synchronized与ReentrantLack)、非阻塞同步(CAS与原子数)
- 高并发技术方案:提高并发度
3.1 分布式缓存(redis、memcached等):结合CDN来解决图片文件等访问
3.2 消息队列:rabbitMQ、kaflka、activeMQ等,解决大量消息的异步处理
3.3 分库分表读写分离:解决大数据查询问题
3.4 数据库垂直拆分:
3.5 应用拆分:一个工程被拆分为多个工程部署,利用dubbo解决多工程之间的通信
3.6 sql与nosql组合:
重要的是整体架构的设计、数据库的设计和优化、缓存系统等
有几个常用的措施:
1、对常用功能建立缓存模块
2、网页尽量静态化
3、使用单独的图片服务器,降低服务器压力,使其不会因为图片加载造成崩溃
4、使用镜像解决不同网络接入商和不同地域用户访问差异
5、数据库集群图表散列
6、加强网络层硬件配置,硬的不行来软的。
7、终极办法:负载均衡
大流量、高并发网站主要考虑的是可伸缩性,当用户量、流量增大的时候,可以通过增加机器来分担压力;
大流量,高并发的网站主要的压力应该是在数据库的io操作上,优化查询语句,
合理使用索引,减少sql语句执行的时间,主从复制、读写分离
建立集群:将读写或计算操作分摊到多态机器上