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

来源:互联网
责任编辑:王亮
字体:

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


由用户苏苏思量提供的知识:

可以从引入Nginx,优化server逻辑,引入缓存三个方面来优化网站,实现高并发。其中引入Nginx是见效最快,可扩展性最好的方法。

优化server逻辑

我们先来讨论这个费力又没那么讨好的最差的方案。为什么说费力呢,因为这就意味着你要去深挖代码逻辑,看看是否哪里存在资源的浪费,导致了当前的qps瓶颈。如果不是初级Java工程师写的项目,通常花了大把时间去review代码,能改进提高的空间也是十分有限的。因此,我说这是一个费力不讨好的方案。因此,除非是之前埋了什么坑,否则轻易不推荐这个方法。

引入缓存

根据我目前的经验,大部分网站高并发的访问都可以通过引入缓存来优化。原本每个请求都要server到数据库去查询数据,再交给前端渲染,这个过程的查询读取操作是非常浪费资源的,而且当读请求太多的时候,数据持久层若是扛不住的话,也会影响整个服务的并发性。这时候,将目前常用的数据放到缓存中,利用缓存的高速读取优势,就能缓解数据持久层的读写压力,从而抗住更多的并发请求。举个例子,情人节到了,那么外卖网站上搜索花店的频率一定会很高,这个时候,就可以将更多的花店,买花相关的数据放到缓存里,这样就算请求很大,也都是与缓存进行读操作,缓解了数据持久层压力,避免由于它的瓶颈而影响服务整体的并发性。

引入Nginx

最后来说,可扩展性最佳的引入Nginx方案。Nginx最突出的功能是负载均衡,即可以将请求根据情况转发给N台服务器(功能相同),这就意味着,如果一台Tomcat的qps为W的话,那么Nginx连接了N台服务器后,从用户侧感受到的服务整体qps就能够达到N*W,这直接可以实现动态扩容。比如情人节当天,搜索花店相关的人实在是太多了,redis等缓存抗住了,但是Tomcat还是没抗住,这个时候,就可以动态的增加几台Tomcat,分流了每台Tomcat要承载的请求量,这个高并发的问题自然就解决啦。

以上是我的浅见,欢迎各位在下方留言区评论与我交流。

我是苏苏思量,来自BAT的Java开发工程师,每天分享科技类见闻,欢迎关注我,与我共同进步。


由用户总有叼民想害我提供的知识:

程序员来报道啦。

什么是高并发

高并发是指,通过设计保证系统能够同时并行处理很多请求。 高并发相关常用的一些指标有响应时间,吞吐量,每秒查询率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=更智能的镜像+缓存+流量导流



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


由用户哎哟JAVA不错哦提供的知识:

感觉面试过程中一定会问到的问题有三个,多线程,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等负载均衡中间件,将请求分布到不同的机器上,避免单个应用持续的处理引起血崩!

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

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


由用户小鸟攻城狮提供的知识:

建议,

总原则:

最大化系统调优,最大化压榨现有机器资源;资源不够用了,加机器,同时可做到容量弹性扩展,削峰填谷,最后容错容灾,探活,高可用。

架构层面:从纵向扩展,变横向扩展,分布式

说白了就是你的代码模块在一个机器上跑,也可以在多个机器上跑。

组件层面:前向代理,缓存,反向代理

参数方面:适度连接超时,读超时,写超时,重试,降级。

切记:不同流量阶段做不同的室,切勿为了高并发而并发。


由用户HelloWorld应用提供的知识:

一般来说优化方向有两个。将请求尽量拦截在系统上游(不要让锁冲突落到数据库上去);充分利用缓存,秒杀买票,这是一个典型的读多些少的应用场景,大部分请求是车次查询,票查询,下单和支付才是写请求。分为4个层次:浏览器,站点,服务,数据。浏览器端,拦截一些无效的功能操作,比如等待期间的多次点击提交;站点层面,防止程序员写for循环调用调用服务,对前段过来的调用去重,对页面缓存;服务层来拦截,对于写请求,做请求队列,每次只透有限的写请求去数据层,对于读请求使用缓存,业务逻辑的异步;浏览器拦截了80%,站点层拦截了99.9%并做了页面缓存,服务层又做了写请求队列与数据缓存,每次透到数据库层的请求都是可控的。


由用户呆木恒提供的知识:

redis 缓存,负载均衡,队列,cdn,读写分离

请注意:本内容来自悟空问答,版权归悟空问答所有,本网旨在传播知识,不代表本网赞同以上意见,如有任何问题请与本网联系!

根据您访问的内容,您可能还对以下内容感兴趣,希望对您有帮助:

如何优化网站高并发访问

答:解决高并发访问,或者说改善,提高一点思路: 1.使用Squid或者Varnish做缓存代理,将经常访问的图片等静态内容缓存起来,提高访问速度; 2.使用CDN内容分发网络,减少主服务器的压力(附CDN相关内容:CDN通过在网络各处放置节点服务器所构成的在...

如何优化网站高并发访问

答:对于新站,网站内容最好不要太多,一百左右的网页就差不多了。网站结构一定要清晰明了,主题明确,目标关键词突出,这样搜索引擎才好最快地给你的网站定位,如果一个网站,你自己都搞不明白网站的主题,搜索引擎也无法给你的网站归类。搜索引擎...

数据库访问层如何优化实现高并发?

答:数据库访问层是一个静态的单例来实现的,里面就是 conn.open(); Adapter.fill(ds); conn.close(); 之类的方法,其他通过调用这些方法来获得数据. 2:我理解的是应该只有 1 个,那么1个效率是不是太慢? 而且数据请求的是序列的还是错序的?(里面没有使...

视频网站是怎么优化高并发的流量的

答:视频高并发的优化很多大的视频网站都在用p2p技术,尤其适合视频高并发,可以实现边下边播、提高速度、节省带宽等,好处很多

如何优化大数据高并发量的系统的SQL语句提高效率

答:1、HTML静态化 效率最高、消耗最小的就是纯静态化的html页面,所以尽可能使网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。但是对于大量内容并且频繁更新的网站,无法全部手动去挨个实现,于是出现了常见的信息发布系...

高并发原理 用java怎么优化

答:面对高并发高请求的大型JAVA应用场景,需要考虑到以下几个方面并并进行优化: 1、代码方面从最基础的做起,优化所写代码,减少不必要的资源浪费,比如:避免频繁的new对象,优先考虑使用单例模式、减繁去重,重用代码要归纳成公用方法,相关工具...

高并发大数据的网站请求,怎样优化

答:网站的优化是根据针对性的搜索引擎做的优化,从而提高网站的排名的,所以还是内容为王外链为皇

怎么优化高并发的insert操作

答:1、用户页面的竞争:identity上面如果有index,这种index容易造成大量的插入同时在一个页面上;顺序guid的插入也是同样。这种页面竞争可以通过latch, spinlock 以及pagelock检查出来。 2、系统页面的竞争:pfs, GAM, SGAM, IAM等系统页面的竞争...

研究高并发量的SQL语句如何去优化

答:1、数据行的长度不要超过8020字节,如果超过这个长度的话在物理页中这条数据会占用两行从而造成存储碎片,降低查询效率。 2、能够用数字类型的字段尽量选择数字类型而不用字符串类型的。 3、对于不可变字符类型char和可变字符类型varchar 都是80...

游戏服务端大访问量大并发的优化解决方案?

答:所有的对象都放在内存,20万用户以下无压力。 如果游戏的用户很多,例如超过50万,内存就会不够,可使用LRU算法来淘汰一些数据。 流程:收到用户请求 - 在内存查找用户对象 - 如果不存在就从数据库中加载- 放入内存cache-如果cache中的用户超过2...

声明:以上内容由用户提供,并不代表本网赞同其观点。如有任何不妥,请与不良与违法信息举报中心联系:513175919@qq.com

标签 :互联网  科技  

www.book1234.com true http://www.book1234.com/w/jrzrzky/ytswxywfzrxkxxywwwf.html report 102210
娱乐时尚
科技资讯
历史文化
真视界
旅游美食
精彩图文
我爱我车
母婴健康
关于本站 | 广告服务 | 手机版 | 商务合作 | 免责申明 | 招聘信息 | 联系我们
Copyright © 2004-2018 book1234.com All Rights Reserved. 布客网 版权所有
京ICP备10044368号-1 京公网安备11010802011102号
12345678910 热门社会娱乐体育军事汽车财经科技育儿历史美食数码心理时尚宠物收藏家居文化三农健康科学游戏动漫教育职场旅游电影教育考试: 学历财经建筑 医药公考资格外语电脑作文招聘中小学留学 文档 移民 文库专栏23问答中心z资讯z资讯1资讯涨资讯涨资讯1资讯问答图书馆知识IT编程数码信息解决方案信息中心IT科技问答新闻中心软件教室设计大全网络相关英语学习开发编程考试中心参考范文管理文库营销中心站长之家IT信息中心商学院数码大全硬件DIY企业服务网吧在线百科硬件知识手机平板汽车游戏家电精彩摄影现代家居IT女人经验健康养生猎奇创业攻略教育学习历史时尚潮流最近更新涨知识