相信不少IT人士都有过搭建本身主页的经验,10多年前的我的主页都很是简单,不少由Frontpage构建,多属于静态HTML页面,最多加一点 特效而已。不过10年间,技术的进步是惊人的。如今,一个网站毫不可能仅仅由几个HTML页面构成。咱们随便举一个例子,国内图片网站 yupoo.com,在 chinarank排名1000左右,而Alexa排名则为5000左右,这个网站不算大,就是这样一个中型站点,拥有超过60台服务器,架构中涉及的 Web服务器就包括了Lighttpd、Apache和 nginx。Yupoo的流量不算大,就已经拥有了60台服务器,事实上,排名前几位的网站,都拥有成千上万台服务器,如何协调这些服务器之间的工做负 载,如何统一指挥调度,如何维护这些服务器硬件都是棘手的挑战。nginx
负载均衡:数据库
负载均衡是全部大中型网站必备的部署。显然,大型网站天天上千万独立IP的访问量,一个Web服务器根本承担不了,网站后台必需有多台服务器共同工做,所以各类负载均衡技术就应运而生了。缓存
较早的负载均衡是DNS负载均衡。原理很简单,只要在域名解析的时候,将多个地址配置成同一个域名,负载均衡就完成了。不一样用户点击同一个域名的时 候,实际上只解析给用户一个地址,这样用户实际上访问的是不一样的Web服务器,就减轻了每一个服务器的负担。这个DNS负载均衡方法,通常而言是随机抽取地 址。DNS负载均衡早期被普遍使用,优势是简单易用,可是DNS负载均衡仍是有一些问题存在。若是某一台服务器发生了故障,而DNS的下一个刷新周期又没 到,这样就可能致使某些用户没法访问站点的状况发生。而另外一个缺点在于DNS负载均衡随机性太强,好比一段时间内众多访问都被指向同一个地址,而另外的地 址却闲置,就形成了局部繁忙的不良现象。并且有时某处服务器正在运行其余应用而处于繁忙状态,DNS负载均衡也无从得知,而依旧平均的解析域名。服务器
稍微复杂一点的负载均衡,是反向代理,当外部有请求到代理服务器,代理服务器再将该请求均匀的转发到内网的服务器上。这种方式被普遍采用,好比说上 面提到的又拍网yupoo.com,就采用了nginx做为反向代理。此外,如今还能够购买专业的硬件设备,好比 Plentyoffish.com(全球最大的婚介网站)就采用了网捷网络公司的Web交换器ServerIron做为硬件负载均 衡,ServerIron 可以有效地处理 16,000,000个并发链接,而且能够改善服务器负载均衡和缓冲转换,像ServerIron这类的硬件产品并不是只有网捷一家提供,因为大型网站预算 充裕,所以也能够选择一些其余的硬件设备来作负载均衡。固然了,咱们也别忽略了最基本的软件负载均衡——Windows Server就带有这样的功能。网络
负载均衡还有一个极为简单的方法,就是创建镜像站点。好比华军软件或者天空软件,都直接采用了镜像站点。这个方式很直接,省去了不少麻烦。以华军软 件园为例,登录华军软件园的时候,咱们将有多种选择,可选电信、网通等网络;而下载某一软件的时候,为了使用户获得更快的速度,天空和华军在中国各地都安 排了服务器,能够提供距离最近的下载服务。不过,也有一些麻烦,就是每一次选择都是人工手动选择。总之,这一系列负载均衡方法,都得以让大型网站的负载均 匀,不会有哪一个服务器有太大的压力。架构
CDN:并发
CDN( Content Delivery Network),内容分发网络也是大型网站必备的部署之一。CDN的原理不难理解,就是将网页内容存放到离用户更近的缓存服务器上,减小路由,从而加快 远距离的访问速度。好比说,你随意登录一个国外小站,速度可能很慢。由于国外网站到国内的最终客户端的路径冗长,可是若是你登录部署了CDN的网站,好比 Plentyoffish.com,你会发现速度很是快,跟国内的网站访问速度差别已经没法从感知上判断。依照Cache存放的位置不一样,CDN也有一些 类别,不一样的网站会根据具体需求,有不一样的选择。CDN一般是由独立的CDN商提供的。举一个例子,就是网易,个人查询时间是2008年2月28日,咱们 发现,同一个域名下的有不少个IP地址,这就说明了首页CDN的部署。负载均衡
C:\>nslookup www.163.com异步
Server: ns.lnpta.net.cn数据库设计
Address: 202.96.64.68
Non-authoritative answer:
Name: www.cache.split.netease.com
Addresses: 202.108.9.37, 202.108.9.38, 202.108.9.39, 202.108.9.51
202.108.9.52, 202.108.9.31, 202.108.9.32, 202.108.9.33, 202.108.9.34
202.108.9.36
Aliases: www.163.com
而咱们若是查询一个简单的我的网站,则不可能有CDN;另外,若是有兴趣,咱们也能够仔细察看一个网站多个二级域名的CDN状况。
平台设计:
大型网站通常都有着很是复杂的与用户交互的内容,必须大量调用数据库,所以一个完善的数据库设计对于大型网站很是重要。例如上面提到的 Plentyoffish.com,这个站实际上是我的网站,但流量大的惊人,该网站有一个主要的数据库,两个搜索数据库,早些时 候,plentyoffish.com的数据库设计问题频频,常常到数据库堵塞,因此站长花费时间最多的地方就是数据库优化。数据库优化没有什么特别的捷 径,其实不多有一次成型的完美数据库构建,只能是按照特定的须要来设计数据库,若有不足再去着手改进。不过大型网站仍是有一些共性,好比说图片存储单独使 用图片数据库,尽可能使用静态页面来减小数据库调用等等。
还有不少大型网站,都有着很是深厚的技术实力,能够开发属于本身的平台。好比说谷歌,Google.com就有着本身独特的平台,主要包括 GFS、MapReduce和 BigTable。由于海量数据存储,因此常规的数据库调用查询是很是恐怖的,每次查询都将调用百亿个页面,成千上万个并发检索足以使得谷歌系统崩溃,因 此Google File System将大量页面以独特的方法压缩以后再提供检索;整个系统一共包括超过两百个集群,再由MapReduce来协同做业。不只仅谷歌,好比百度、中 搜等等网站也都有本身研发的独特的平台。
硬件配置:
大型网站的硬件配置必定就好吗?答案是否认的。好比说全球最大的网站谷歌,google.com的整个架构的基础是几十万台普通的PC级别服务器。 谷歌一些服务器的细节为商业机密,可是根据谷歌已经披露的资料显示,在2006年以前谷歌拥有45万台服务器,这些服务器都是很是普通的PC级服务器,甚 至硬盘接口都仍是有些过期的IDE接口。这也是谷歌的独特架构决定的,而对比谷歌,维基百科则拥有很是强势的服务器,所有为SCSI硬盘,并且主要的主机 中都有多达6块硬盘,超过16GB内存。这比较容易理解,由于谷歌在全球拥有不少个数据中心,员工数量众多,彻底有能力管理数以万计服务器的运行,而维基 百科则为非营利机构,主要依靠捐赠生存,员工数量很是稀少,所以必须配备强势的服务器。其实,每一个网站都应该根据本身独特的状况来配置硬件,目前 1TB SATA硬盘已经步入了量产阶段,但是2年之前1TB的硬盘只能经过RAID 0来实现,可见硬件的更新速度很是惊人,因此即使预算充裕,在配置服务器的时候也应该多考虑实际用途,而不必定要拥有最好的配置。
总结:
以上只是大型网站的归纳总结,其实每一个网站都有本身独特的一面,因此以上的每一条规则都未必是死规定。好比说着重沟通的Twitter.com,本质就是一个异步聊天室,所以静态页面就不见的有必要。总之,网站架构没有死定律,只要合适网站的,就是好的架构。