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高并发的主要内容,如果未能解决你的问题,请参考以下文章

java 怎样处理高并发

java中怎么实现高并发

java多线程高并发

Java多线程与高并发:高并发解决思路

imooc课程:Java高并发秒杀API 记录

实战Java高并发程序设计 7让线程之间互相帮助--SynchronousQueue的实现