JAVA高性能高并发解决方案

本文探讨了如何通过提升代码质量来实现JAVA应用的高性能和高并发能力,强调避免使用低效的SQL查询和复杂代码,指出一条高效的SQL语句往往胜过多次循环操作,程序员的经验在这方面起着关键作用。

FY17版之前的优化方案:
一、数据量大
1、重要且操作频度高的表进行读写分离;
2、分库分表:关联性强的放在同一个库;分表方案根据实际业务来分,数据量大的表分表最好根据主键ID或时间分表,FY分表方案采取业务companyId分的。
3、SQL优化,加索引、改造去掉表连接;
4、Elasticsearch:优化查询,先根据搜索条件,去ES拉出相应数据的主键,然后再去DB里边取到对应数据,也可以直接从ES中取出Json数据;页面端相应数据的变动通过MQ更新ES,保持数据一致。

二、高并发
1、缓存:分布式缓存;
2、异步:请求处理方法中,其它相关操作异步处理;
3、图片服务器分离
4、HTML静态化
5、负载均衡:硬件、软件、代码层面。
6、数据库集群

4、常见的提高高并发下访问的效率的手段
首先要了解高并发的的瓶颈在哪里?
1、可能是服务器网络带宽不够(增加网络带宽,DNS域名解析分发多台服务器。)
2.可能web线程连接数不够(负载均衡,前置代理服务器nginx、apache等等)
3.可能数据库连接查询上不去。(数据库查询优化,读写分离,分表等等)
最后复制一些在高并发下面需要常常需要处理的内容:

1尽量使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存,可以大量减少与数据库的交互,提高性能。
2用jprofiler等工具找出性能瓶颈,减少额外的开销。
3优化数据库查询语句,减少直接使用hibernate等工具的直接生成语句(仅耗时较长的查询做优化)。
4优化数据库结构,多做索引,提高查询效率。
5统计的功能尽量做缓存,或按每天一统计或定时统计相关报表,避免需要时进行统计的功能。
6能使用静态页面的地方尽量使用,减少容器的解析(尽量将动态内容生成静态html来显示)。
7解决以上问题后,使用服务器集群来解决单台的瓶颈问题。


1、代码质量,不要性能低下的sql和代码。有的一条sql搞定的事,有人用了多个循环才能搞定。取决于程序员的经验!

2、项目前期的规划,由于java历史多用于企业开发,导致好多团队至今依然思想僵化。其实并发最高的是互联网,他们有很多非常好的实践经验和架构是可以直接照搬过来用的。tomcat的并发取决于每个请求执行的占用时常,如果一个请求耗时1秒,那按tomcat开启的线程数默认就几十个。江湖谣传tomcat并发400/秒左右,但是我又看到有的人说单机过万/秒,其实就是测试场景中请求执行时间不同,结果不同。

那么重点来了,项目前期的规划很重要。我们可以预测下将来的场景,目的不是为了现在实现。而是为了将来留有余地,太早实现会增加项目的复杂度和实现难度,前期出结果很重要。当然如果公司能忍受慢工出细活也行!

web高并发的核心肯定是集群,前面有人回答了。这个不用怀疑!所有公司都是这么实现的。
那么,为了现在活着将来的集群,我们要做什么准备?大概说一些会用到,希望对你有所帮助。
1、动静分离,静态资源请求与动态请求分离,项目中需要访问的图片、声音、js/css等静态资源需要有独立的存放位置,便于将来实现静态请求分离时直接剥离出来,比如nginx可以直接配置图片文件直接访问目录,而不需要经过tomcat。这样tomcat就可以专注处理动态请求,操作数据库数据处理之类的。静态请求代理服务器性能比tomcat高很多。
2、引入缓存,数据库缓存、页面缓存,这东西好用不复杂,搞明白什么地方适用最重要。简单的例子是频繁读取,不修改的地方最适用。也是后续集群做数据共享的一个方式之一,集群环境下,经常会碰到数据共享问题。
3、如果将来数据量大,单一数据库成为瓶颈时,数据库的读写分离来了。数据库集群,读写分离,分表分区。mysql对读写分离这些还是有点支持的,没仔细用过。
4、如果项目发展壮大了,已经过亿用户了,ok系统拆分来了。用户管理系统、订单系统,或者体育新闻系统、娱乐新闻系统等。保证一个系统当掉时不影响另一个,同时分担单系统压力。每个系统之下是前面3条!!
如果这一切都还搞不定,那你公司一定比谷歌还牛B了,哈哈……可喜可贺!

前期做下1和2就可以了,集群不一定要增加服务器,一台服务器如果配置好,多开几个tomcat就可以了。1个400,10个tomcat就是4000呢!其实这些,看阿里巴巴的云服务就知道,他们就是这么用的,有谁比它对高并发更有发言权!以上不是广告……
什么cdn、lds之类的都是为了高并发,更快处理用户请求而生!拼音打字,错别字多望见谅,不全面望指正,学习之。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值