利器1.多线程处理
利用线程池设计,同时处理多个请求。
线程池中线程个数=CPU个数+1;//对计算密集型的情况适用
如果程序的逻辑处理需要对 DB,IO,redis 有操作。会增加CPU的占用率。
高并发解决方案案例:
当QPS达到2000时
优化方案: 做业务分离,分布式存储
1.流量优化
防盗链处理(去除恶意请求)、限流、限速、限制并发数
2.前端优化
(1) 减少HTTP请求[将css,js等合并]
(2) 添加异步请求(先不将所有数据都展示给用户,用户触发某个事件,才会异步请求数据)
(3) 启用浏览器缓存和文件压缩
(4) CDN加速
(5) 建立独立的图片服务器(减少I/O)
3. 服务端优化
(1) 页面静态化(2) 并发处理
(3) 队列处理
4.数据库优化
(1) 数据库缓存
(2) 分库分表,分区
(3) 读写分离
(4) 负载均衡
5.web服务器优化
(1) nginx反向代理实现负载均衡
(2) lvs实现负载均衡
6.使用集群和分布式
集群和分布式处理都是使用多台服务器进行处理的,集群是每台服务器都具有相同的功能,处理请求时调用哪台服务器都可以,主要起分流的作用,分布式是将不同的业务放到不同的服务器中,处理一个请求可能需要用到多台服务器,这样就可以提高一个请求的处理速度,而且集群和分布式也可以同时使用。
Session同步有两种处理方式:一种是在Session发生变化后自动同步到其他服务器,另外一种方式是用一个程序统一管理Session。所有集群的服务器都使用同一个Session,Tomcat默认使用的就是第一种方式,通过简单的配置就可以实现,第二种方式可以使用专门的缓存程序来管理缓存如Memcached、Redis等。
7.反向代理服务器可以和实际处理请求的服务器在同一台主机上,而且一台反向代理服务器也可以访问多台实际处理请求的服务器。反向代理服务器主要有三个作用:
①可以作为前端服务器跟实际处理请求的服务器(如Tomcat)集成;
②可以用做负载均衡;
③转发请求,比如,可以将不同类型的资源请求转发到不同的服务器去处理,可以将动态资源转发到Tomcat、Php等动态程序而将图片等静态资源的请求转发到静态资源的服务器,另外也可以在url地址结构发生变化后将新地址转发到原来的旧地址上。
①可以作为前端服务器跟实际处理请求的服务器(如Tomcat)集成;
②可以用做负载均衡;
③转发请求,比如,可以将不同类型的资源请求转发到不同的服务器去处理,可以将动态资源转发到Tomcat、Php等动态程序而将图片等静态资源的请求转发到静态资源的服务器,另外也可以在url地址结构发生变化后将新地址转发到原来的旧地址上。
海量数据的解决方案:
- 缓存
- 页面静态化
- 数据库优化
- 分离活跃数据
- 批量读取和延迟修改
- 读写分离
- 分布式数据库
- NoSQL和Hadoop
高并发的解决方案:
- 应用和静态资源分离
- 页面缓存
- 集群与分布式
- 反向代理
- CDN
- 底层的优化