如何优化网站高并发访问?
原创

如何优化网站高并发访问?

好文
试试语音读文章

热门回答:

程序员来报道啦。

什么是高并发

高并发是指。通过设计保证系统能够同时并行处理很多请求。 高并发相关常用的一些指标有响应时间。吞吐量。每秒查询率QPS(Query Per Second)。并发用户数等。

一般来讲优化为两大类。一是软件层面的。二是硬件层面的。

说到优化。可能更注重的是查询的效率。所以要根据自己的业务进行拆分表建立索引。这是肯定必须要有的。再就是使用redis等高性能的数据库。可以把热数据放在内存中。并建立数据淘汰机制。redis的过期命令可以好好的利用起来。同时要注意不要有大量的数据在同一时刻过期。

软件方面有以下几种方案:一、负载均衡技术

1.使用LVS服务器负载均衡

LVS服务器结合Keepalived做高可用。据估计lvs大概可以支撑5万的并发量。由俄罗斯程序员使用C语言开发而成。技术7层网络架构的数据链路层。最接近底层的那一层。

2.LVS下面还可跟Nginx做负载均衡

再次分担压力。nginx也可以结合Keepalived做高可用。一旦主机挂掉了备份机立马就能上岗。

二、数据库优化

1、单库数据库

一个初建的网站往往用户群都是很小的。最简单的网站架构就能解决实际的用户需求。当然为了保证网站的稳定性和安全性。我们会把网站的应用部署到至少两台机器上。后台的存储使用数据库。如果经济实力允许。数据库使用单台服务器部署

2、数据库读写分离

一个数据库主要负责写操作我们称之为主库。一个数据库专门负责读操作我们称之为副库。副库的数据都是从主库导入的。数据库的读写分离可以有效的保证关键数据的安全性。但是有个缺点就是当用户浏览数据时候。读的数据都会有点延时。这种延时比起全站不可用那肯定是可以接受的。

3、缓存技术

缓存主要是适用于读操作。并且缓存的读操作的效率要远远高于从数据库以及硬盘读取数据的效率。

5、数据库的垂直拆分

业务再接着的增长下去。数据量也会随之越来越大了。这样发展下去总有一天主库也会产生瓶颈了。那么接下来我们又该如何解决主库的瓶颈了?方法很简单就是我们要拆分主库的数据了。那么我该以什么维度拆分数据了?一个数据库里有很多张表。不同的表都针对不同的业务。网站的不同业务所带来的数据量也不是不同的。这个时候系统的短板就是那些数据量最大的表。所以我们要把那些会让数据库产生瓶颈的表拆出来。例如电商系统里商品表和交易表往往数据量非常大。那么我们可以把这两种表建立在单独的两个数据库里。这样就拆分了数据库的压力。这种做法叫做数据垂直拆分

6、数据库的水平拆分

表数据的处理已经超出了单台服务器的能力。这个时候我们就得对这个单库单表的数据进行更进一步的拆分。也就是将一张表分布到两台不同的数据库里。这个做法就是叫做数据的水平拆分了。可以根据项目拆分。再结合按年的拆分等。

硬件方面优化:

加机器、分布式必不可少、换更强大的CPU、使用PCIE固态、高速内存等。相比软件来说硬件对于高并发能力的提升也是同等重要的。要软硬结合的提升才是终极解决方案。不断的榨取硬件的性能。

如果你也爱技术。爱好编程。爱好java。那么关注我吧!

其他观点:

面对高并发的访问。我总结了一下之前用过的方法。也查询了一些资料进行了补充。跟大家分享一下:

HTML静态化

相比打开一个静态页面来说。如果页面需要连接后台数据库查询数据。那么后者的速度一定会比前者要慢。

HTML静态化就是要把连接后台数据库查询数据的工作提前做好。生成静态化的页面。那么访问的效率一定会提高很多。并且生成一套静态化的页面。所有用户都可以访问。这样也会减少数据库的压力。

缓存

这个也比较常见了。缓存也在好多个环节中发生奇效:

数据从数据库到浏览器的过程:数据库->应用数据集->内存对象->动态页面->HTTP服务器->用户浏览器。

HTTP服务器->用户浏览器:浏览器都有本地缓存

动态页面->HTTP服务器:动态页面静态化。然后把静态化页面放在缓存里

本地数据集->内存对象->动态页面:一些语言框架本身就带缓存机制。也可以使用Memcached或Redis。

数据库->应用数据集:数据库有查询缓存

图片服务器分离

图片存储在单独的图片服务器上。

数据库读写分离/分库分表等

一台服务很难满足业务上的压力。那么数据库可以做读写分离。或者分库分表。

负载均衡

负载均衡分硬件和软件。硬件我们用过F5。软件经常用的是Nginx。

后台应用部署多套。前面挂负载均衡。客户端都直接访问负载均衡。由它把访问分摊到实际应用服务器上。

镜像

解决不同网络接入商和地域带来的用户访问速度差异。

CDN

CDN=更智能的镜像+缓存+流量导流

希望我的回答可以帮助到你!

其他观点:

感觉面试过程中一定会问到的问题有三个。多线程。JVM。高并发!

何谓并发?同时处理操作!

何谓高并发?同时处理很多操作!

什么操作呢?页面请求:一个简单的页面请求可能包含了很多内容。比如验证登录。静态页面加载。动态数据加载(涉及到访问数据库。缓存等等)。图片加载。线程的启动和销毁!每一个操作都需要花费时间。总得加起来可能只有200ms。但是如果你的服务器处理能力只能是一个请求级别的。那么100万个请求。你就需要20万秒。大概是几天的时间!

当然实际生活中我们没有这么水的服务器。换句话说。我们可以通过选择好的服务器来提高我们的并发能力!也就是说硬件的指数型升级能让我们应付高并发。但是事与愿违。如果处理一个请求占用的是100k内存。那么100万请求就需要100万M。也就是差不多100G的内存!这无疑是现实生活中还没有的!

在此之前。我们先来熟悉几个关于高并发的关键参数!

QPS:每秒处理的请求数量!

响应时间:处理一个请求需要的时间!

吞吐量:单位时间内的处理请求数量!

最大并发数:同一时间能支持的最大请求数!

一般来说有下面这些常规办法:

1。更多的静态资源:将代码中的大量枚举(容器加载时写入map。放入本地缓存)。数据库中的定义表(定时任务放入缓存)。固定配置。HTML文件等静态化处理。缓存起来!

2。图片服务器:一般来说。图片在一个页面上属于数据量比较大的东西。尽量避免动态数据和图片的顺序渲染。使用图片服务器分离数据和图片!

3。优化代码:尽量避免多层循环。避免多次访问数据库。使用多线程提高cpu使用率和执行速度。使用java8的流式处理和并行处理提高速度!

4。数据库:采用分库分表。mysql5.7之后。据说可以支持秒级百万级数据查询。速度相当之快。使用八库1024表。可以满足数据库一秒数百万的并发!同时可以开启缓存。写入存储过程等加快访问时间!分库分表之后还可以根据分表字段使用联合查询。避免了大多数数据库架构分布式之后不能联合查询的缺点!

5。使用内存型数据存储:使用redis等内存缓存可以提高读写速度。在数据落库之前快速读写数据。使用mongodb等作为大字段。多字节的key value保存方式。防止关系型数据库的不足!

6。负载均衡:使用nginx等负载均衡中间件。将请求分布到不同的机器上。避免单个应用持续的处理引起血崩!

总之。高并发是一项程序员必不可少缺的技术。也是面试必问的知识点。只有直面它。解决它才能对技术有更深的认识!

高并发的路上踩了很多坑。以后再记录下这些坑。和大家共勉!

您还感兴趣的文章推荐

以上就是由互联网推广工程师 网创网 整理编辑的,如果觉得有帮助欢迎收藏转发~

分享到 :
相关推荐

发表评论

您的电子邮箱地址不会被公开。

评论(2)

  • 陌上柳絮倾城雪 永久VIP 2022年12月28日 04:06:47

    数据,数据库,缓存,页面,服务器,静态,负载均衡,内存,操作,图片

  • 寄心梦 永久VIP 2022年12月28日 04:06:47

    没想到大家都对如何优化网站高并发访问?感兴趣,不过这这篇解答确实也是太好了

  • 小新卖蜡笔 永久VIP 2022年12月28日 04:06:47

    程序员来报道啦。什么是高并发高并发是指。通过设计保证系统能够同时并行处理很多请求。 高并发相关常用的一些指标有响应