高并发情况下,我们系统是如何支撑大量的请求的

1、尽量使用缓存技术,

包括用户缓存,信息缓存还有静态页面缓存,多花点内存来做缓存,可以大大减少与数据库的交互次数和tomcat执行次数,减少不变的数据重复在tomcat和数据库中获取的次数。

2、同步转异步,

对于一些不需要即时结果的操作,可以使用MQ消息机制,达到同步转异步的效果,如秒杀系统,正常流程:先点击秒杀,然后往服务器发送请求,在页面等待响应,这样融入大量请求,服务器压力会特别大,搞不好服务器就会宕机。使用MQ消息队列实现异步的步骤为:点击秒杀,返回请稍后查看结果,请求去MQ队列中排队,等排队执行完成后返回给用户信息。这样就可以大大减少服务器的压力,提升用户体验度。

3、合并多个同类型请求为一个请求,

使用SpringCloud的Hystrix技术来实现。在服务提供者提供了返回单个对象和多个对象的接口,并且单个对象的查询并发数很高,服务提供者负载较高的时候,我们就可以使用请求合并来降低服务提供者的负载。

4、数据库方面,

搭建数据库集群,网站一般读的多写的少,可以按照网站的统计数据来找到一个合适的平衡点,来搭建主从数据库服务,可以实现一主多从,或者多主多从,来减轻单个数据库的压力。可以按照每台数据库服务器的硬件条件,合理分配权重,配合Mycat达到负载均衡。

5、高质量代码,

合理的使用循环和递归,不要为了速度丢了内存,也不要为内存丢了速度,要看业务场景,来合理使用。减少自动处理逻辑,比如字符串拼接,每次拼接都会创建一个字符串放入常量池,这里可以按照业务场景来使用StringBuilder或者StringBuffer来进行字符串拼接,能手动处理就手动处理,代码中所有的临时对象,用完之后都赋值为Null,这样可以减少GC的重复排查,效率就会有所提升。所有的资源用完都要回收,如:IO、数据库连接对象等,因为这些资源对GC不是特别友好。减少代码调用链,尽量不要让代码调用链超过10,远程方法调用没事。提供过滤能力,把每个过滤器写的详细一点,把耦合度高的数据放入到同一个过滤器中,如果第一个过滤器没有通过那么后面的过滤器不执行,相对的业务也就不执行了,效率也就提升了。

6、网络优化,

外网转内网,内网转局域网,外网转VPN。配合公司内的网络运维人员,进行网络网段的切换,尽量让服务器群处于内网,或者局域网中,提供访问速度。服务器之间的通讯如果都是局域网内进行的,那么可想而知,访问速度肯定有所提升。

7、中间件处理

搭建Tomcat集群,通过Nginx代理Tomcat服务器做负载均衡,对每个Tomcat的调优,合理设置设置Tomcat的最大连接数,因为Tomcat的默认最大并发数为200。适当的加大Tomcat的内存和最多线程数,设置JVM的处置大小为服务器可用内存的最大值的80%。关闭DNS查询,开启gzip压缩。
搭建MQ集群,高并发的时候一个MQ来处理队列根本不够用,这时可以搭建集群来处理。
增加Nginx的内存,加大Nginx缓存数据的范围。服务器操作系统都用64位的,因为32位的系统最大内存只能有4G
图片服务器分离,搭建vsftpd服务器来存储图片数据,通过Nginx代理vsftpd存放路径就可以直接访问到图片,这样响应到页面的只是超链接,并不是图片,这样页面的响应会得到大大的提升。

个人见解,请路过的各位大牛补充

你可能感兴趣的:(JAVA)