您的位置:首页 > 编程语言 > Java开发

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

2017-08-19 15:06 344 查看
一、瓶颈分析

用户高并发场景下(几万级别的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:分表分库、数据库优化(数据库工程师)

运维:服务器日志、服务器运行情况、服务器维护(运维工程师)

4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: