如何才能做到网站高并发访问

news/2024/5/10 15:21:54/文章来源:https://blog.csdn.net/u012485320/article/details/20627613
文章架构简图:
网站访问门户案例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_901847.aspx

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

相关文章

SVN利用钩子中的post-commit同步版本库到网站目录

这些钩子会在不同的点触发事务 # start-commit 提交前触发事务 # pre-commit 提交完成前触发事务 # post-commit 提交完成时触发事务 # pre-revprop-change 版本属性修改前触发事务 # post-revprop-change 版本属性修改后触发事务 svn同步版本库到网站目录就是利用p…

制作一个餐饮网站的头部

样式如下&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html> <head><title>餐饮网站header部分</title><meta charset"UTF-8"><meta http-equiv"x-ua-compatible" content"IEedge"><me…

JSON.parseObject(String str)和JSON.toJSONString()的区别?

在刚刚毕业步入之后的工作过程中&#xff0c;看到公司的代码频繁的使用JSON&#xff0c;在学校的时候基本只有了解&#xff0c;也没有很多的去使用过&#xff0c;在看了一段时间代码后&#xff0c;总结了JSON中最常使用的几个方法&#xff01; 一、JSON格式 什么是JSON? JSON …

介绍一个GWT的网站 和 decode javascript.encode using java +FCKEditor 在 jsp中的使用说明

http://www.gwtpowered.org/ 有超多的GWT组建&#xff0c;比如&#xff1a;超好的日期输入[插图][演示]可排序的table&#xff1a;[插图][演示]还有很多其他的&#xff0c;大家自己去寻找需要的组件。自己再修改&#xff0c;扩展&#xff0c;汉化变成自己的超级GWT组件吧&#…

利用压缩网页来提升网站浏览速度 [摘]

网站的访问速度是由多个因素所共同决定的&#xff0c;这些因素例如应用程序的响应速度、网络带宽、服务器性能、与客户端之间的网络传输速度等等。其中最重要的一个因素是应用程序本身的响应速度&#xff0c;因此当你为网站性能所苦恼时&#xff0c;你第一个需要着手进行处理的…

基于ssm的校园门户网站源码+开题报告+需求分析+mysql数据库+前端html文件

下载地址&#xff1a;https://download.csdn.net/download/biyesheji250/28740242 项目介绍: 基于ssm的校园门户网站源码开题报告需求分析mysql数据库前端html文件 系统说明: 南京晓庄学院本科毕业论文&#xff08;设计&#xff09;开题报告 所属系(院)&#xff1a;信息工程…

一、一步步构建高并发分布式网站架构(1.1)

1.1 分什么布 我尽量不把这类文章写成软件工程专业的死板教学用书。但是每章第一节的确都是构建一个健全系统不可或缺的概念知识。 其实在前言中&#xff0c;我就已经叨叙了为什么要使用分布式架构。简而言之&#xff0c;就是要采用“分而治之”的思想&#xff0c;将网站这个…

一、一步步构建高并发分布式网站架构(1.2)

1.2 瓶颈分析 不同网站有不同的属于该类型网站的特定性能瓶颈。比如资讯类网站大部分在进行读数据库&#xff0c;文件存储类网站大部分在进行文件I/O操作&#xff0c;而如果网站业务是计算密集型&#xff0c;性能瓶颈一般在CPU。 1.2.1 Linux 下的性能监测 要找到网站的瓶颈…

一、一步步构建高并发分布式网站架构

前言 适合对象 我用LA(N)MP ✔ 我用ThinkPHP5 ✔ 我为小但逐渐发展网站工作 ✔ 我开发/管理的PHP网站遇到了瓶颈 ✔ 我会基本操作 ✔ 本文会带你了解一般的适合PHP网站的分布式系统的构建&#xff0c;对一个PHP程序员来说&#xff0c;应该易于理解、实现&#xff0c;希望能实…

测试网站访问速度的5个方法

网页载入速度对于一个网站来讲很关键&#xff0c;Google已经将一个网站的载入速度列入了网站关键字排名的考虑因素当中&#xff0c;也就是说如果你的网站有足够的内容&#xff0c;而且载入速度比别人的网站更快一步的话&#xff0c;那么你就是获得更好的排名。那么下面就赶快测…

远程访问Docker镜像内宝塔搭建的网站

应用场景 近日&#xff0c;因为要搭建很多测试网站环境&#xff0c;本着可偷懒的原则&#xff0c;采用的Docker来搞。并在Docker镜像中装入宝塔面板 操作流程 1、拉取镜像&#xff0c;装宝塔面板 这里选择的centos 8.0&#xff0c;安装宝塔。 报错情况&#xff1a; Error: …

8个免费下载文献的学术网站(亲测可用)

给大家推荐8个免费下载文献的学术网站&#xff0c;希望能帮到大家。 本文首发于公众号智慧科研。 1.Library Genesis Library Genesis号称是帮助全人类知识无版权传播的计划。网站上论文很多&#xff0c;下载方便&#xff0c;几乎每天都在更新。 网址&#xff1a;http://ge…

宝塔+wordpress服务器个人网站建站教程

一个非常简单且友好的个人网站建站教程 前期需要准备的工具: 一台云服务器(一般都包含了公网IP)。 我们采用的策略是宝塔wordpress安装。宝塔是一个对服务器网站资源管理的工具&#xff0c;而wordpress则是一个十分常用的基于php的网站模板。 安装宝塔 下载地址 https://www…

python爬取动漫网站的动漫

最近学了一下爬虫&#xff0c;就写段代码来试一下成果如何.&#xff08;目的是爬取某动漫网站上的一部动漫darling in the franxx&#xff09; 版本是python3.7 import requests import refrom selenium import webdriverimport osheaders{user-agent : Mozilla/5.0 (Windows …

《从零开始学Swift》学习笔记(Day 2)——使用Web网站编写Swift代码

Swift 2.0学习笔记——使用Web网站编写Swift代码 原创文章&#xff0c;欢迎转载。转载请注明&#xff1a;关东升的博客 Swift程序不能在Windows其他平台编译和运行&#xff0c;有人提供了一个网站swiftstub.com&#xff0c;左栏是代码编辑窗口&#xff0c;右栏是运行结果窗口。…

百家号怎么加网站链接进行引流,方法让你轻松掌握

互联网推广模式方法一直在变&#xff0c;平台也在变&#xff0c;当然推广思维模式也要跟着变。现在大家对网站seo优化似乎失去了信心&#xff0c;原因是百度新算法大幅度提升 自家产品&#xff0c;不愿意给企业站或者个人网站倒流了。那么作为推广运营的我们&#xff0c;势必也…

水产百科网站(SSM,MySQL )

【项目包含内容】 【视频运行指导教程目录】 视频&#xff1a;https://www.bilibili.com/video/BV1Xa4y1v7dx/ 【项目运行工具】 Eclipse JDK1.8 TOMCAT8 MYSQL 链接&#xff1a;https://pan.baidu.com/s/1BJCnUCTlqzVA6zEJpNxgYw 提取码&#xff1a;f2ni 【部分项目…

学习网站推荐

正文&#xff1a; 菜鸟教程https://www.runoob.com/ 对于要学习某一门流行编程语言来说&#xff0c;我首推这个网站。这个网站相比于在我看过的来说呢&#xff0c;是看起来比较舒服的一个&#xff0c;里面涵盖大多数编程语言等&#xff0c;如Python、Java、C、C、JavaScript、…

电影影视网站对接微信公众号 日引流500+的实例教学

哈喽&#xff0c;大家好&#xff0c; 今天写一个关于电影网站对接公众号&#xff0c;日引流500的教程。首先自己百度找一个电影网站&#xff0c;获取网站的TOKEN和URL对接地址。 token&#xff1a; qweqwe URL: http://e.66hai.com/api.php/wechat注意&#xff1a;还需要一…

Vue项目实战-小商城的基本功能的实现-移动网站开发实例

1.项目的效果图 以下效果图是在谷歌浏览器的手机适配模式看到的。 主页展示 新闻资讯展示 详细新闻资讯展示 图片列表展示 缩略图展示 商城展示 2.工具技术准备 工具&#xff1a;vscode。 技术&#xff1a;Vue.js,node.js,MUI,Mint-UI. 3.项目目录的详情 4.项目配置文件 …