java如何解决高并发,java高并发的解决方案
如何解决写爬虫IP受阻的问题?立即使用。
在Java中,高并发一直是我们要处理的问题,那么如何解决呢?以下是一些方法,供大家参考。
(推荐课程:java课程)
Java解决高并发的方法:
1 、从最基础的地方做起,优化我们写的代码,减少不必要的资源浪费。
a、避免频繁使用新对象。对于整个应用程序,只需要存在该类的一个实例。我们可以使用单例模式。对于字符串连接操作,使用StringBuffer或StringBuilder,对于工具类,可以通过静态方法访问。
B.避免使用错误的方式,尽量不要使用instanceof进行条件判断。在java中使用高效的类,比如ArrayList,比Vector性能更好。
2、html静态化
我们通过链接地址访问。通过这个链接地址,服务器相应的模块处理这个请求,到相应的jsp页面,最后生成我们想要的数据。但如果千万级的高并发请求太多,会增加服务器的压力,最坏的情况是关闭服务器。那么如何避免这种情况呢?如果我们把初始请求test.do的结果保存为html文件,然后用户每次访问这个html文件,这样就不需要再访问服务器了,服务器的压力不就减轻了吗?
如何自动生成静态页面?当用户访问它时,test.html将自动生成并显示给用户。
3、图片服务器分离
对于web服务器来说,图片是最消耗资源的,所以我们有必要将图片从页面中分离出来,放在一个独立的图片服务器中。这种架构可以减轻提供页面访问请求的服务器系统的压力,保证系统不会因为图片的问题而崩溃。在图像服务器上,我们可以优化不同的配置。
4、缓存
我接触过的具体缓存机制是hibernate的缓存机制。为了避免每次都从数据库中获取数据,我们把用户经常访问的数据放到内存中,甚至当缓存非常大的时候,我们也可以把内存中的缓存放到硬盘中。还有就是使用了先进的分布式缓存数据库,可以增加系统的抗压能力。
5、分批传送
做项目的时候,一次要传的参数太多,数据库规定一次最多传30000个参数,当时有50000条记录。它是如何传播的?最后是批量发货。如果这么多人一次挤不进电梯,它会报告超重bug,所以分批派人上来。
还有一次,在考试系统中,如果这么多考生同时向数据库提交,数据库的压力会增大,有时会宕机。当时采用的方法是ajax异步传输,不需要等待考生点击提交按钮就自动提交考生的答案,避免了突然断电时考生之前做的题丢失。
6、数据库集群
当面对复杂的应用和大量的用户访问时,一个数据无法快速满足需求,所以我们需要使用数据库集群或数据库表哈希。
我们在应用程序中安装业务和应用或功能模块来分离数据。不同的模块对应不同的数据库或表,然后按照一定的策略在更小的数据库中哈希一个页面或函数。
7、DB优化
A.在设计数据库的时候,要考虑后期的维护。数据库的三种范式是我们在设计数据库时应该遵循的原则。
b、指数建立:指数建立要适当。如果一个表经常被用来查询,很少被用来添加和修改,我们可以为这个表建立一个索引,因为对于添加、修改和删除,我们对索引的维护会大大超过索引带来的效率。
C.表格字段的类型选择应适当包括字段的长度和类型,并应基于实际存储的数据。长度不能太长,否则会影响效率。
d、外键要慎用,因为主键代表的是这个表,而外键代表的是一组表,它们是相互关联的,我们在删除或者修改的时候需要关联它们。
e、在数据库操作中
尽量用PrepareStatement,少用Statement,因为prepareStatement是预编译的。
连接设置为只读。Connection是对stacks的连接,是重量级的,我们可以用。
使用连接池,我们可以修改数据库中的默认连接数。
8、负载均衡
负载均衡将是大型网站解决高负载访问量和大量并发请求的高端解决方案。
负载均衡技术已经发展了很多年,有很多专业的服务提供商和产品可供选择。我个人接触过一些解决方案,其中有两个架构可以供你参考。
(1)硬件的四层交换
第四层交换使用第三层和第四层数据包的报头信息,根据应用间隔识别业务流,并将整个间隔的业务流分发到适当的应用服务器进行处理。
第四层交换功能就像虚拟IP,指向物理服务器。它传输的服务服从各种协议,例如HTTP、FTP、NFS、Telnet或其他协议。这些服务基于物理服务器,需要复杂的负载平衡算法。在IP世界中,业务类型由终端的TCP或UDP端口地址决定,而第四层交换中的应用间隔由源和终端的IP地址、TCP和UDP端口决定。
在硬件四层交换产品领域,有一些知名的产品可供选择,如Alteon、F5等。这些产品非常昂贵,但它们物有所值,可以提供出色的性能和灵活的管理能力。“雅虎中国”当初接近2000台服务器,只用了三四台Alteon服务器。
(2)软件的四层交换
在大家了解了硬件四层交换机的原理之后,基于OSI模型的软件四层交换机应运而生。这种方案的原理是一样的,只是性能稍差。但是,很容易遇到一定的压力。有人说软件实现其实更灵活,处理能力完全取决于你对配置的熟悉程度。
软件四层交换可以通过Linux上常用的LVS来解决。LVS是Linux虚拟服务器。它提供了基于心跳的实时灾难响应解决方案,提高了系统的健壮性。同时提供灵活的虚拟VIP配置和管理功能,可以同时满足多个应用需求,这对于分布式系统来说是必不可少的。
使用负载均衡的典型策略是在软件或硬件的四层交换的基础上构建squid集群。这个思路已经被很多大型网站采用,包括搜索引擎。这种架构成本低、性能高、扩展性强,随时添加或删除节点都非常容易。
对于大型网站,可以同时使用上面提到的每一种方法。这里的介绍比较简单,具体实现过程中的很多细节还是需要大家熟悉和体验的。有时候一个很小的squid参数或者apache参数设置都会对系统性能产生很大的影响。
9、镜像
镜像是提高大型网站性能和数据安全性的常用方法。镜像技术可以解决不同网络接入提供商和地区造成的用户访问速度的差异。比如ChinaNet和EduNet的区别,促使很多网站在教育网建立镜像站点,数据可以定期更新,也可以实时更新。至于镜像技术的细节,这里就不做太深入的阐述了。有很多专业的现成解决方案架构和产品可供选择。还有软件实现的廉价想法,比如linux上的rsync之类的工具。
10、最新:CDN加速技术
什么是CDN?
CDN的全称是内容分发网络。其目的是在现有的互联网上增加新的网络架构,将网站的内容发布到离用户最近的网络“边缘”,让用户就近获取所需内容,提高用户访问网站的响应速度。
CDN不同于镜像,因为它比镜像更智能,或者可以打个比喻:CDN=更智能的镜像缓存流量分流。因此,CDN可以明显提高互联网中信息流动的效率。技术上,网络带宽小,用户访问量大,网点分布不均等问题。全面解决,提高用户访问网站的响应速度
镜像站点,最常见的一种,允许内容直接发布,适合静态和准动态的数据同步。但是购买和维护新服务器的成本较高,所以必须在各个区域设置镜像服务器,并指派专业的技术人员进行管理和维护。对于大型网站来说,用于更新的带宽成本也大大增加。
缓存成本低,适合静态内容。互联网统计显示,80%以上的用户经常访问20%的网站。在这种规则下,缓存服务器可以处理大部分客户的静态请求,而原服务器只需要处理20%左右的非缓存请求和动态请求,从而大大加快了客户请求的响应时间,减轻了原服务器的负载。
CDN服务一般将缓存服务器放在全国的关键节点上。
专线,允许用户直接访问数据源,可以实现数据的动态同步。
这就是java解决高并发的细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。