java高并发
Posted JaxYoun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java高并发相关的知识,希望对你有一定的参考价值。
什么是高并发?
高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。
高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。
响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。
吞吐量:单位时间内处理的请求数量。
QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。
并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。
常见并发举例
案例一、订票系统案例,某航班只有一张机票,假定有1w个人打开你的网站来订票,问你如何解决并发问题(可扩展到任何高并发网站要考虑的并发读写问题)
案例二、股票交易系统、银行系统、移动网络系统的大数据量。
1.股票交易系统的行情表,每几秒钟就有一个行情记录产生,一天下来就有(假定行情3秒一个) 股票数量×20×60*6 条记录,一月下来这个表记录数量多大? oracle中一张表的记录数超过100w后 查询性能就很差了,如何保证系统性能?
2.中国移动有上亿的用户量,表如何设计?
案例三、小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万。
案例四、12306抢票,票是有限的,库存一份,瞬时流量非常多,都读相同的库存。读写冲突,锁非常严重。
高并发的处理
首先要了解高并发的的瓶颈在哪里?
1、可能是服务器网络带宽不够
2、可能web线程连接数不够
3、可能数据库连接查询上不去。
根据不同的情况,解决思路也不同。
1、像第一种情况可以增加网络带宽,DNS域名解析分发多台服务器。
2、负载均衡,前置代理服务器nginx、apache等等
3、数据库查询优化,读写分离,分表等等
在高并发下面需要常常需要处理的内容:
① 尽量使用缓存技术,包括用户缓存,页面信息缓存等,多花点内存来做缓存,可以大量减少与数据库的交互,提高性能。
② 用jprofiler等工具找出性能瓶颈,减少额外的开销。
③ 优化数据库查询语句,减少直接使用hibernate等工具的直接生成语句(仅耗时较长的查询做优化)。
④ 优化数据库结构,多做索引,提高查询效率。
⑤ 报表统计的模块,尽量采用定时任务执行,如果非得要实时进行刷新,那么可以采用缓存来做数据
⑥ 能使用静态页面的地方尽量使用,减少容器的解析(尽量将动态内容生成静态html来显示)。同时由于页面中有许多图片的这种,可以考虑一下把图片做成一个服务器,这样可以减少业务服务器的压力。
⑦ 使用集群的方式来解决,单台服务器性能的问题。
⑧ 把项目拆分成为多个应用小型服务器形式,来进行分布式部署。采用数据同步机制(可以使用数据库同步形式来做)达到数据一致性。
⑨ 使用负载均衡模式,来让每一个服务器资源进行合理的利用。
⑩ 缓存机制中,可以使用redis来做内存数据库缓存起来。也可以使用镜像分担,这样可以让两台服务器进行访问,提高服务器的访问量。
转载自:https://blog.csdn.net/ght886/article/details/86535653
以上是关于java高并发的主要内容,如果未能解决你的问题,请参考以下文章