【整理】JavaWeb开发的高并发优化思路

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_17305249/article/details/77412792
一、瓶颈分析
用户高并发场景下(几万级别的QPS)
可能出现的瓶颈分析:
    Java虚拟机访问内存:每秒大约1亿次内存读写(不是瓶颈)
    MySQL数据库IO:每秒大约4万次读写(不是瓶颈)
    网络延迟(毫秒级)+JVM的GC产生全局暂停(毫秒级)+MySQL行级锁(可能是瓶颈)

二、多用户对数据库中同一行数据抢占修改
原子计数器(放入Redis缓存:用户名----操作时间)
记录行为(读取Redis缓存,放入分布式MQ消息队列,从队列头部读取最先进入队列的数据:用户A-----操作时间A)
最终修改数据(在MySQL中修改一行数据)

三、优化流程(CDN,Redis,MySQL)
用户流量主要产生在:静态资源、动态资源(频繁变更的数据、不频繁变更的数据)
    (1)对静态资源(JS页面,CSS等静态页面)优化:
                放入CDN(内容分发网络)节点中,CDN部署在离用户最近的网络节点(用户----》城域网)
                一旦命中CDN结点,获取资源后,不再从后端服务器获取。
    (2)对不频繁变更的动态资源(定期更新,由服务器决定更新周期:彩票、天气预报)优化:
                放入Redis(NoSQL)缓存服务器(集群)中,抵抗百万级的QPS
    (3)对频繁变更的动态资源(用户点赞、评论、订单、访问量)
                减少MySQL行级锁持有时间(update同一行数据的语句执行时间尽量短)
                将Java虚拟机服务器的事务管理移植到MySQL服务器上运行(在MySQL上commit/rollback),减少GC、网络时延。
    (4)MySQL优化:分表分库(TDDL框架),读写分离

四、集群化部署
服务端开发主流架构(非微服务)
CDN    WebService:Nginx+Jetty/tomcat    Redis/NoSQL    MySQL

五、人员安排
开发:前后端(前端工程师、后端工程师)
测试:Jmeter等压力测试(测试工程师)
DBA:分表分库、数据库优化(数据库工程师)
运维:服务器日志、服务器运行情况、服务器维护(运维工程师)

展开阅读全文

没有更多推荐了,返回首页