实现网站的高并发访问

news/2024/5/8 7:25:05/文章来源:https://blog.csdn.net/sinat_26935081/article/details/51554704
网站访问门户案例7层架构逻辑图

  高并发访问的核心原则其实就一句话“把所有的用户访问请求都尽量往前推”。

如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部(指挥部就是数据库及分布式存储)。

如:能缓存在用户电脑本地的,就不要让他去访问CDN。 能缓存CDN服务器上的,就不要让CDN去访问源(静态服务器)了。能访问静态服务器的,就不要去访问动态服务器。以此类推:能不访问数据库和存储就一定不要去访问数据库和存储。

    说起来很轻松,实际做起来却不容易,但只要稍加努力是可以做到的,Google的日独立IP过亿不也做到了么?我们这几千万的PV站比起Google不是小屋见大屋了。我们还是先从我们的小屋搭起吧!哈哈!下面内容的介绍起点是千万级别的PV站,也可以支持亿级PV的网站架构。

高性能高并发高可扩展网站架构访问的几个层次:

有人会问,我们老是说把用户对业务的访问往前推,到底怎么推啊?推到哪呢?下面,老男孩就为大家一一道来。

第一层:首先在用户浏览器端,使用Apache的mod_deflate压缩传输,再比如:expires功能、deflate和expires功能利用的好,就会大大提升用户体验效果及减少网站带宽,减少后端服务器的压力。当然,方法还有很多,这里不一一细谈了。

提示:有关压缩传输及expires功能nginx/lighttpd等软件同样也有。

第二层:页面元素,如图片/js/css等或静态数据html,这个层面是网页缓存层,比如CDN(效果比公司自己部署squid/nginx要好,他们更专业,价格低廉,比如快网/CC等(价格80元/M/月甚至更低)而且覆盖的城市节点更多),自己架设squid/nginx cache来做小型CDN是次选(超大规模的公司可能会考虑风险问题实行自建加购买服务结合),除非是为前端的CDN提供数据源服务,以减轻后端我们的服务器数据及存储压力,而不是直接提供cache服务给最终用户。taobao的CDN曾经因为一部分图片的次寸大而导致CDN压力大的情况,甚至对图片尺寸大的来改小,以达到降低流量及带宽的作用。

提示:我们也可以自己架设一层cache层,对我们购买的CDN提供数据源服务,可用的软件有varnish/nginx/squid 等cache,以减轻第三层静态数据层的压力。在这层的前端我们也可以架设DNS服务器,来达到跨机房业务拓展及智能解析的目的。

    第三层:静态服务器层一般为图片服务器,视频服务器,静态HTML服务器。这一层是前面缓存层和后面动态服务器层的连接纽带,大公司发布新闻等内容直接由发布人员分发到各cache节点(sina,163等都是如此),这和一般公司的业务可能不一样。所以,没法直接的参考模仿,比如人人的SNS。

我们可以使用Q队列方式实现异步的分发访问,同时把动态发布数据(数据库中的数据)静态化存储。即放到本层访问,或通过其他办法发布到各cache节点,而不是直接让所有用户去访问数据库,不知道大家发现了没有,qq.com门户的新闻评论多的有几十万条,如果所有用户一看新闻就加载所有评论,那数据库不挂才怪。他们的评论需要审核(美其名约,实际是异步的方式,而且,评论可能都是静态化的或类似的静态化或内存cache的方式),这点可能就是需要51cto.com这样站点学习的,你们打开51CTO的一篇博文,就会发现下面的评论一直都显示出来了,也可能是分页的。不过,应该都是直接读库的,一旦访问量大,数据库压力大是必然。这里不是说51cto网站不好,所有的网站都是从类似的程序架构开始发展的。CU也可能是如此。

提示:我们可以在静态数据层的前端自己架设一层cache层,对我们购买的CDN提供数据源服务,可用的软件有varnish/nginx/squid 等cache。在这层的前端我们也可以架设DNS服务器,来达到跨机房业务拓展及智能解析的目的。

第四层:动态服务器层:PHP,Java等,只有透过了前面3层后的访问请求才会到这个层,才可能会访问数据库及存储设备。经过前三层的访问过滤能到这层访问请求一般来说已非常少了,一般都是新发布的内容和新发布内容第一次浏览如;博文(包括微博等),BBS帖子。

特别提示:此层可以在程序上多做文章,比如向下访问cache层,memcache,memcachedb,tc,MySQL,oracle,在程序级别实现分布式访问,分布式读写分离,而程序级别分布式访问的每个db cache节点,又可以是一组业务或者一组业务拆分开来的多台服务器的负载均衡。这样的架构会为后面的数据库和存储层大大的减少压力,那么这里呢,相当于指挥部的外层了。

第五层:数据库cache层,比如:memcache,memcachedb,tc等等。

根据不同的业务需求,选择适合具体业务的数据库。对于memcache、memcachedb ttserver及相关nosql数据库,可以在第四层通过程序来实现对本层实现分布式访问,每个分布式访问的节点都可能是一组负载均衡(数十台机器)。

第六层:数据库层,一般的不是超大站点都会用mysql主从结构,如:163,sina,kaixin都是如此,程序层做分布式数据库读写分离,一主(或双主)多从的方式,访问大了,可以做级连的主从及环状的多主多从,然后,实现多组负载均衡,供前端的分布式程序调用,如果访问量在大,就需要拆业务了,比如:我再给某企业做兼职时,发现类似的51cto的一个站点,把www服务,blog服务,bbs服务都放一个服务器上,然后做主从。这种情况,当业务访问量大了,可以简单的把www,blog,bbs服务分别各用一组服务器拆分开,这种方式运维都会的没啥难度。当然访问量在大了,可以继续针对某一个服务拆分如:www库拆分,每个库做一组负载均衡,还可以对库里的表拆分。需要高可用可以通过drbd等工具做成高可用方式。对于写大的,可以做主主或多主的MYSQL REP方式,对于ORACLE来说,来几组oracle DG(1master多salve方式)就够了,11G的DG可以象mysql rep一样,支持读写分离了。当然可选的方案还有,mysql cluster 和oracle 的RAC,玩mysql cluster和oracle RAC要需要更好更多的硬件及部署后的大量维护成本,因此,要综合考虑,到这里访问量还很大,那就恭喜了,起码是几千万以上甚至上亿的PV了。

象百度等巨型公司除了会采用常规的mysql及oracle数据库库外,会在性能要求更高的领域,大量的使用nosql数据库,然后前端在加DNS,负载均衡,分布式的读写分离,最后依然是拆业务,拆库,。。。逐步细化,然后每个点又可以是一组或多组机器。

特别提示:数据库层的硬件好坏也会决定访问量的多少,尤其是要考虑磁盘IO的问题,大公司往往在性价比上做文章,比如核心业务采用硬件netapp/emc及san光纤架构,对于资源数据存储,如图片视频,会采用sas或固态ssd盘,如果数据超大,可以采取热点分取分存的方法:如:最常访问的10-20%使用ssd存储,中间的20-30%采用sas盘,最后的40-50%可以采用廉价的sata。

第七层:千万级PV的站如果设计的合理一些,1,2个NFS SERVER就足够了。我所维护(兼职)或经历过的上千万PV的用NFS及普通服务器做存储的还有大把,多一些磁盘,如SAS 15K*6的,或者用dell6850,搞几组 NFS存储,中小网站足够了。当然可以做成drbd+heartbeat+nfs+a/a的方式。

如果能达到本文设计要求的,中等规模网站,后端的数据库及存储压力会非常小了。 象门户网站级别,如sina等, 会采用硬件netapp/emc等等硬件存储设备或是san光纤同道,甚至在性价比上做文章,比如核心业务采用硬件netapp/emc及san光纤架构,对于资源数据存储,如图片视频,会采用sas或固态ssd盘,如果数据超到,可以采取热点分取分存的方法:如:最常访问的10-20%使用ssd存储,中间的20-30%采用sas盘,最后的40-50%可以采用廉价的sata。

象百度等巨型公司会采用Hadoop等分布式的存储架构,前端在加上多层CACHE及多及的负载均衡,同样会根据业务进行拆分,比如爬虫层存储,索引层存储,服务层存储。。。可以更细更细。。。为了应付压力,什么手段都用上了。

    特殊业务,如人人,开心网,包括门户网站的评论,微博,大多都是异步的写入方式,即无论读写,并发访问数据库都是非常少量的。

    以上1-7层,如果都搭好了,这样漏网到第四层动态服务器层的访问,就不多了。一般的中等站点,绝对不会对数据库造成太大的压力。程序层的分布式访问是从千万及PV向亿级PV的发展,当然特殊的业务 还需要特殊架构,来合理利用数据库和存储。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_893639.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站本地化翻译为何找专业翻译公司?

随着互联网的普及,网站作为企业对外展示 的重要窗口,得到了越来越多的重视。不少公司除了拥有本土化语言网站,同时搭建多语种网站,这样网站翻译的服务应用而生。那么,什么是网站翻译,如何做好网站本地化翻译…

网站法语翻译,本地化翻译公司哪个正规

据了解,进入国外市场的任何企业都需要伴随着网站翻译和本地化,一个配有当地语言的网站,将会是一张可以为您带来高速发展的名片。那么,如何做好网站的法语翻译,网站中文翻译成法语,本地化翻译公司哪家比较正…

win7或win2008,配置网站后无法访问的解决

错误提示是: The requested page cannot be accessed because the related configuration data for the page is invalid. http://blog.csdn.net/chensirbbk/article/details/6435133 win7和win2008 r2下配置IIS(ASP.net) 分类: Asp.net 2011-05-20…

three.js使用一:本机建网站浏览example

要想查看例子,直接用浏览器打开例子文件有些地方时不会显示效果的,要自己建一个网站。 方法如下: 在IIS管理器中,右击默认网站-》添加网站,输入名称并指定位置,我指定的是three.js的总目录。 也可以先添…

个人站长之路,本人自建的一个网站

由之前固定的pc端网站到最近升级的响应式网站,网站改版优化的同时,我的web前端技术也逐渐提高。 之前固定的pc端网站所用到的知识: 1.HTML 2.CSS 3.JavaScript 4.dedecms后台整合 最近升级的响应式网站所增加知识: 1.HTML5 2.…

网站终于申诉成功!腾讯真难搞啊!

之前3月27日腾讯提示我的网站: 该网站在不久前曾被管家检测出恶意信息,恶意信息删除后,管家仍将保持拦截4周,以防篡改。请在删除恶意信息4周后提交申诉,若再次被管家检测出恶意内容,该网站则不再接受申诉。…

JavaScript限时搜索功能实现,限制恶意搜索保护网站减轻服务器负担

如果我们的网站可以让用户一直连续不断地搜索文章或帖子,如果大量用户同时连续搜索,或者被别人恶意不断连续搜索,这样就会给服务器造成很大的负担,导致网站不稳定,甚至访问不了。 基于这个问题,我们需要写…

在Windows10上使用GitHub和Hexo搭建自己的博客网站

在Windows10上使用GitHub和Hexo搭建自己的博客网站 前言准备工作Node.js下载及安装git下载及安装Hexo下载及安装 博客搭建创建GitHub项目配置SSH Key配置Hexo博客 将hexo博客上传至GitHub访问 前言 搭建网站一般需要购买域名和云服务器空间,但对搭建博客网站来说&a…

c库函数查询的网站

1.网址:http://www.cprogramming.com/function.html 2.网址:http://en.cppreference.com/w/

Asp.Net网站发布到IIS后部分页面乱码

虽然页面上我们可以指定编码格式来确定页面展示,但有些时候我们从后台传值到页面的时候,特别是ViewBag方式时,可能会出现乱码情况! 网络上有一些是采用Html.Raw(ViewBag.Demo)这样的方式进行的,这个本身针对特殊字符H…

对SEO来说,链接的重要性超乎想象

原文地址:For SEO, links are even more important than you think 作者:Katherine Noyes 翻译:赖信涛 责编:仲培艺 如今,很少有业务不注重搜索引擎优化,再小的业务也会针对性地做一些有利于搜索引擎排名的…

分享九款构建响应式网站的最佳PHP框架

原文:9 Best PHP Frameworks to Build Awesome Responsive Websites 作者:Andrey Prikaznov 翻译:王嘉怡 责编:仲培艺 目前,网上有大量的框架供大家选择,本文作者分享了9款各方面都兼具优势的PHP框架&#…

隧道代理如何测试访问网站的响应时间?

当我们要购买了HTTP代理,千挑万选以后决定从中挑选几家来测试,今天我们就来说说,如何测试HTTP代理访问网站的响应时间,有的厂商宣称相应时间只要10ms: 实际上手卡到妈都不认识(不针对截图这家厂商&#xff…

DESTOON CMS 网站搬家后出现首页及后台全部空白怎么办

原创文章来自 https://www.ympfb.com/show-27-46-1.html 简介: destoon cms 还是可以的,还不错, 最近弄了个这个,给公司弄的 网址是 www.jiancai618.com 这是我给企业弄的 大家可以参考一下 ,然后我们服务器放…

源兆网 下半部 网站搭建【phpcms】使用cms搭建网站,企业站

原创文章转自:https://www.ympfb.com/show-28-22-1.html 上半部请点击这里 下半部 四 phpcms企业站搭建 接下来给大家 分享 phpcms 搭建网站的下半部 服务器环境搭建完成后,打开宝塔,软件商店------一键部署-----phpcms,一键部…

网站搭建【phpcms】使用cms搭建网站,企业站

原创文章转自:https://www.ympfb.com/show-28-19-1.html 上半部 网站搭建教程 流程分享 站长提供分享一整套 网站上线流程, 即使你是小白,只要按照,我提供的流程操作,也能将网站上线。 一 ,提前准备工作…

推荐一个外国的数据结构在线演示网站

网站地址 https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 使用演示 打开网站如下: 以BTrees为例,点击BTrees 我们以输入1,2,3,4为例,输入1,点击insert,其他数字…

Chrome浏览器模拟手机访问网站的设置方法

Chrome浏览器模拟手机访问网站的设置方法 浏览:1003 | 更新:2014-06-04 10:25 | 标签: chrome 以前我们介绍过如何通过修改Chrome浏览器运行参数的方法来模拟手机访问网站,但是在Chrome 32和33版本以后增加了更加便捷的方法&…

整合Spingboot+Redis+Shiro,打造一个电商网站

一:导入数据 导入sql文件 二:创建项目 点击Create New Project新建项目 左边选中Spring Initializr,直接下一步 GroupId: 填写项目组的名字, ArtifactId: 填写项目的名字左边选中 Web,右边选中 Web 项目路径选择&a…

集成SSM,开发属于自己的博客网站

一:需求分析,创建数据库 导入sql文件 二:创建项目 create new Project 左边选中Maven勾选Create from archetype选中 org.apache.maven.archetypes:maven-archetype-webapp GroupId: 填写项目组的名字, ArtifactId: 填写项目的…