前言:
在项目中解决高并发并非解决其中的某一个环节或点,而是全方位的,系统性的从客户发起请求,请求处理,服务调用,数据访问层层优化,解决高并发。
1.系统硬件
提升服务器性能。
1.1 增加内存容量;
1.2 更换硬盘;
1.3 升级处理器;
2.系统软件(架构方向)
2.1.前端请求到服务器-------反向代理服务器(如nginx),
2.1.1 反向代理
拦截无效的客户请求、恶意请求等,可参考:nginx网络服务器上如何阻止特定用户代理(UA)http://linux.cn/article-5487-1.html;
2.1.2 访问静态资源,做缓存
反向代理服务器不但可以拦截指定的请求,还能够通过配置缓冲功能可以缓存真实Web服务器上的某些静态资源,减轻真实Web服务器的负载压力,可以在反向代理的服务器上缓存某些静态资源,这样的话在反向代理服务器上存在的资源就不用去web服务器上获取,以减轻web服务器的压力。
在该环节中我们采用了freemarker技术,实现网页静态化,进而实现上述功能,来提高并发。另外,前端请求我们可以采用get请求的方法,实现一些静态资源缓存在浏览器端,避免了用户重复刷新造成的恶意访问。
NGINX反向代理缓存配置https://blog.csdn.net/lmy_1/article/details/52791275;
2.1.2 负载均衡
网站前期使用了nginx代理一台后端服务器,随着网站流量的增多,一台后端服务器无法满足需求的时候,需要配置服务器集群,这时就需要负载均衡配置。负载均衡配置配置策略默认是轮询,轮询策略要求集群中的各服务器性能要一致,同木桶原理;对于性能不一致的,可以配置权重策略。
负载均衡策略转至https://blog.csdn.net/poisx/article/details/78985010;
2.2 调用服务---------dubbox分布式服务架构以及消息中间件MQ (activeMQ)
2.3 数据访问----------redis做缓存以及数据库分库
小结:
互联网正在高速发展,使用互联网服务的用户越多,高并发的场景也变得越来越多。电商秒杀和抢购,是两个比较典型的互联网高并发场景。虽然我们解决问题的具体技术方案可能千差万别,但是遇到的挑战却是相似的,因此解决问题的思路也异曲同工。
个人整理并发解决方案。
a.应用层面:读写分离、缓存、队列、集群、令牌、系统拆分、隔离、系统升级(可水平扩容方向)。
b.时间换空间:降低单次请求时间,这样在单位时间内系统并发就会提升。
c.空间换时间:拉长整体处理业务时间,换取后台系统容量空间。