(转)大规模网站架构探秘

跟朋友聊天的时候,发现不少人对大型网站系统架构很是感兴趣,我也很感兴趣,常常会在家里2台笔记本和1台服务器组成的局域网环境里做些实验。我进 入IT行业的时间,大约是97,98年吧,那时候PC客户端软件最为盛行,作软件开发是一份很体面也很喜欢的工做。我从Win3.1上的VC1.5开始一 直到VC6.0,而后转为.Net开发,基本上都是从事客户端软件开发。本人的性格是危机意识向来严重,因此深感互联网必将盛行,传统软件必将走向没落, 因而转向了WEB开发。记得之前去某Portal网站应聘的时候,主考官就问我:你认为客户端开发和互联网开发有什么不一样。我当时的回答是:互联网开发比 客户端软件开发简单多了,我不再用考虑那么多的用户环境因素了,一点部署,什么时候何地均可用。html

不少年过去了,我再想起当初个人回答,依然以为那个回答是正确的。就产品开发层面来说,互联网开发确实简单多了。这里首先澄清一个概念,我所说的互 联网开发并非指全部的B/S应用,例如B/S方式的银行内部业务系统。我所说的互联网应用是指在互联网上服务于公众的应用。企业级的业务系统,它的特色 是业务逻辑是比较复杂的,但用户通常不太大;互联网应用则相反,业务逻辑通常很简单,但面对的是海量用户。前端

既然互联网应用开发的业务逻辑不复杂,但为何大型网站都投入了那么多的技术人员呢?主要是由于运营的环境太复杂,这种复杂性造成的缘由如下:程序员

一、公开性apache

网站的服务是公开的,任何人均可以来访问,因此就会直接面对大量的不良用户,系统数据的安全面临很大的风险,一旦系统被攻入,结果将是灾难性的。后端

二、访问量大浏览器

访问量大,就意味着网站必须可以承受高并发大流量的考验,若是网站的服务能力和健壮性等达不到要求,你的系统就会被冲垮。缓存

三、用户体验安全

用户体验要好,除了产品设计的因素以外,就要求访问网站的速度要快,具备高可用性,别用一会就挂。服务器

网站各子系统如何进行部署,如何提升系统的健壮性和高可用性,如何实现网站的安全,如何提升访问速度,如何进行负载均衡,甚至于采用什么的硬件设 备,另外,网站发展的不一样时期会可能会采用不一样的架构,如何实现架构的平滑过渡,如何使目前的架构具备弹性,具有可扩展的能力,这都是大型网站必须解决的 问题,也是小网站成长过程当中早晚会遇到的问题。我后面的文章将会逐步就这个话题展开。网络

网站机构包括网站的软件架构和系统架构两部分,软件架构主要是指子系统和逻辑层的划分结构;系统架构,通常是系统部署结构。

系统架构师的知识体系比较庞杂,所谓的见多识广,多数是由运维工程师成长起来的,他们开发能力不强,编码很少,但动手能力很强,脚本编写很是熟练, 常常会作各类类型的实验,密切跟踪最新技术最新产品的相关信息。固然,一个大型的网站,须要一个架构师团队,他们各自承担擅长领域的架构设计,好比安全架 构、存储架构等等。

我以为通常的开发人员仍是很难走上这条路的,这份工做须要经验,须要不断实践,但若是开发人员一旦走上了这条路,会有很大的发展,主要源于开发人员 的思考习惯和技术的深度。个人这系列文章,开发人员能够做为参考,好比如何开发可分布式部署的系统,另外不少朋友都是身兼数职,从开发到实施,到部署所有 包办。我我的深感精力有限,因此又特地找了几个朋友从Unix/Linux系统和Windows系统不一样角度进行探索,以造福正在摸索中的朋友,有兴趣的 朋友也能够参与。

其实,这部份内容我一直在写,好比PHP深度探索系列,写了大量的关于apache的内容,我已经大致把apache代码阅读了一遍,很费时间,进度缓慢,但我想这有助于咱们理解apache的配置和调优。

在介绍网站架构以前,咱们先介绍一些网站架构中最基础和常见的概念,以便更好的理解后面的有关负载均衡和分布式存储等技术。第一个,首先讲讲CDN。

一、CDN是什么

CDN(Content Delivery Network),就是内容发布网或者内容分发网,它的主要目的:经过在现有的Internet中增长一层新的网络架构,将网站的内容发布到最接近用户的 网络边缘,使用户能够就近取得所需的内容,从而提升用户访问网站的响应速度,提高用户体验,同时可以分散访问压力,把原本用户集中访问分散到各地去。网站 的内容提供商(好比新浪、搜狐、网易等等)使用CDN,就能够在宏观层解决一部分大流量、海量用户并发等使人头疼的问题。

二、CDN的组成

内容发布网(CDN)是一个经策略性部署的总体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件,而内容管理和全局的网络流量 管理是CDN的核心所在。经过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务,达到用户所要求的服务距用户仅 有"一跳"(Single Hop)之遥。

咱们一般的内容发布模式都是将网站数据放到一处,而后应对来自世界各地的访问,咱们多数考虑的是软件部署架构,不多考虑网络硬件架构。与之造成对比 的是,CDN则强调了网络在内容发布中的重要性。经过引入主动的内容管理层的和全局负载均衡,CDN从根本上区别于传统的内容发布模式。

内容提供商承担了他们不应干也干很差的内容发布服务。

三、互联网服务的产业链

纵观整个宽带服务的价值链,内容提供商和用户位于整个价值链的两端,中间依靠网络服务提供商将其串接起来。随着互联网工业的成熟和商业模式的变革, 在这条价值链上的角色愈来愈多也愈来愈细分,出现了内容运营商、托管服务提供商、骨干网络服务提供商、接入服务提供商等等。在这一条价值链上的每个角色 都要分工合做、各司其职才能为客户提供良好的服务,从而带来多赢的局面。从内容与网络的结合模式上看,内容的发布已经走过了ICP的内容(应用)服务器和 IDC这两个阶段。IDC的热潮也催生了托管服务提供商这一角色。可是,IDC并不能解决内容的有效发布问题。内容位于网络的中心并不能解决骨干带宽的占 用和创建IP网络上的流量秩序。所以将内容推到网络的边缘,为用户提供就近性的边缘服务,从而保证服务的质量和整个网络上的访问秩序就成了一种显而易见的 选择,这就是CDN服务模式。CDN的创建解决了困扰内容运营商的内容"集中与分散"的两难选择,无疑对于构建良好的互联网价值链是有价值的,也是不可或 缺的最优网站加速服务。

四、CDN服务提供商

ChinaCache是中国最大的CDN服务提供商,是否是惟一未可知也。要想成为CDN服务提供商,恐怕要摆平电信、网通、铁通等等运营商,这得 须要什么样的能力和背景不得而知。它的服务节点在全球已经超过130个,其中国内节点超过80个,覆盖全国主要6大网络(所谓6线机房,就是这么来的)的 主要省份,象各大门户网站,好比新浪、网易等等都是租用了他们的服务。因此,你不管是在南方,或者北方,仍是在北美,访问这些门户网站,感受速度都很快, 最主要的缘由之一就是CDN发挥了效果。通常小网站是用不起这服务的,因此慢点就慢点了吧,能够租用互联互通的6线机房,若是网络足够宽的话,用户也能够 忍受。若是想继续提高用户体验的话,就须要作一些网站镜像,部署在具备表明性的几个大城市,好比华南能够部署在广州,华东能够部署在上海,华北能够部署在 北京,不过内容镜像的过程,就须要本身去部署和维护。还有的网站,采用内容分割的方式,好比创建针对各地的分站,业务状况不一样,可能部署的策略不一样。 CDN能够认为是基础网络建设的一种策略。

前面介绍了cdn的一些原理和概念,以及提供cdn基础网络服务的途径。cdn看起来对于静态内容的,好比html,js,image是很是合适的,经过cdn的部署,用户只须要一跳就能够访问到网站的内容。那对于动态内容怎么办呢?我回答一下:

动态内容按照存在形态能够分为三类。

第一类:内容长时间不需变化,这类内容通常是经过网页静化技术,实现动态内容转换成静态内容,从而达到cdn部署,典型的就是内容类网站,好比新浪、搜狐、网易等等的内容发布系统cms,内容的增删改等管理工做被准实时同步到各个节点。

第二类:内容可能会短期内发生变更,可是最终会稳定。好比论坛、博客等应用,这类服务提供的内容按照必定的时间间隔,实现批量静化,固然也有实时静化,像Mop的大杂烩、网易社区就是使用了这样的策略。

第三类:内容会实时变化,很是个性化。好比邮箱应用,这类服务提供的内容没法实现静化,只能经过实行分区域部署和负载均衡等手段进行优化。

对于提供cdn服务的厂商来说,静态内容的cdn天然没有问题,对于第三类服务,只能从通讯链路层进行相应的优化。

对于不少网站的伪静化,有的出于Seo的考虑,有的出于安全性的考虑,手段基本上是rewrite Url。它只不过是一种外在的表现形式,与Html静化是两回事,它依然是一种动态内容。

1. 负载均衡的分类

负载均衡技术在网站运营过程当中应用很是广泛,技术也很成熟。负载均衡技术按照软硬件形式分为软均衡和硬均衡。软均衡就是基于软件技术的均衡,硬均衡是基于硬件技术的均衡;

按照网络协议划分又分为四层均衡和七层均衡。四层均衡就是基于OSI网络层的数据均衡,七层均衡是基于OSI应用层的数据均衡。

各类均衡方式在大型网站中均有采用,并且大多数状况下,是多种均衡方式的组合。

2. DNS轮询均衡

这种方式,算是比较独立的一种方式,不在上述划分之列,但使用比较普遍,通常用在网站最前端。你能够作个试验,在dos命令行中运行nslook命 令。好比:nslookup www。163。com,你会看到命令给出了一堆解析后的IP地址。这些地址就是www.163.com这个域名绑定的多条A记录。咱们从浏览器发起的访 问请求http://www.163.com/,那么你输入的域名首先须要通过DNS服务器进行解析,Dns服务器的解析的过程就是按照A记录的顺序,依 次分配IP地址。Dns轮询方式实现均衡就是利用这个原理,在一个域名下面绑定N个IP地址,访问请求被均衡到不一样的设备。Dns轮询方式提供的IP地 址,在大型网站中每每是一个集群的地址,多是均衡交换机也多是均衡服务器。对于小网站的话,挂接多台服务器也没有问题。

DNS轮询均衡的优势:

一、零成本:只是在Dns服务器上绑定几个A记录,域名注册商通常都提供;

二、部署简单:就是在网络拓扑进行设备扩增,而后在Dns服务器上添加记录。

DNS轮询均衡的缺点:

一、流量分配不均:Dns解析过程其实环节不少,并且是一种层层缓存的机制,你的dns服务器虽然进行更新,可是客户机、以及网络上其它的dns服 务器不会实时更新,因此流量很难保证100%的平均。目前,dns服务器都提供了多种手段能够调整dns轮询分配的策略,可是确实没法保证很完美的均衡。

二、健康检查:Dns服务器中A记录地址中的某一台服务器宕机,DNS服务器是没法知道的,仍旧会将访问分配到此服务器。因此须要人员或者工具进行 实时检测,在某台机器宕机以后,把备份机推上生产线,若是想要从A记录地址摘除某个地址,这个通知过程须要几个小时甚至更久才能扩散到全部的客户机。

Dns轮询方式推到服务的最前端仍是颇有效的,它经过最原始的方式,把访问用户映射到不一样的服务集群上。对于大型网站来说,对外服务的IP地址是不 可能常常变更的,并且后端的集群一旦宕掉,能够迅速推上冗余集群。再加上,通常都是通过CDN部署,服务被拆分到各个局部,因此在运营过程当中不会产生太大 的影响。

3. OSI七层模型

咱们接下来说讲七层均衡。要理解四七层均衡的原理,就先要回忆一下大学课本里学的网络七层模型(OSI)。

OSI是一个开放性的通行系统互连参考模型,他是一个定义的很是好的协议规范。OSI模型有7层结构,每层均可以有几个子层。

OSI七层模型是一个很好的理论模型,可是在实际应用中都作了裁剪。尤为是TCP/IP的盛行,把7层结构压成了4层,

因此不少人都批评OSI七层模型过于复杂,可是做为一个完整的全面的网络模型,仍是被你们很是承认的。OSI的7层从上到下分别是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

OSI 7层的功能描述:

(1)应用层:与其余计算机进行通信的一个应用,它是对应应用程序的通讯服务的。例如,一个没有通讯功能的字处理程序就不能执行通讯的代码,从事字 处理工做的程序员也不关心OSI的第7层。可是,若是添加了一个传输文件的选项,那么字处理器的程序员就须要实现OSI的第7层。示 例:telnet,HTTP,FTP,WWW,NFS,SMTP等。

(2)表示层:这一层的主要功能是定义数据格式及加密。例如,FTP容许你选择以二进制或ASII格式传输。若是选择二进制,那么发送方和接收方不 改变文件的内容。若是选择ASII格式,发送方将把文本从发送方的字符集转换成标准的ASII后发送数据。在接收方将标准的ASII转换成接收方计算机的 字符集。示例:加密,ASII等。

(3)会话层:他定义了如何开始、控制和结束一个会话,包括对多个双向小时的控制和管理,以便在只完成连续消息的一部分时能够通知应用,从而使表示层看到的数据是连续的,在某些状况下,若是表示层收到了全部的数据,则用数据表明表示层。示例:RPC,SQL等。

(4)传输层:这层的功能包括是否选择差错恢复协议仍是无差错恢复协议,及在同一主机上对不一样应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的从新排序功能。示例:TCP,UDP,SPX。

(5)网络层:这层对端到端的包传输进行定义,他定义了可以标识全部结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。示例:IP,IPX等。

(6)数据链路层:他定义了在单个链路上如何传输数据。这些协议与被讨论的歌种介质有关。示例:ATM,FDDI等。

(7)物理层:OSI的物理层规范是有关传输介质的特性标准,这些规范一般也参考了其余组织制定的标准。链接头、针、针的使用、电流、电流、编码及光调制等都属于各类物理层规范中的内容。物理层经常使用多个规范完成对全部细节的定义。

相关文章
相关标签/搜索