万网代理
9年阿里云万网代理商   热线:400-6800-390客服QQ:800018259    汇款方式 | 联系我们 | 加盟代理 | 帮助中心   
您好: [进入管理中心]   [退出系统]
万网阿里云服务器,云虚拟主机,企业邮箱,优惠促销中 [登录] [注册会员有礼] [找回密码]   
首 页 域名注册 万网空间 虚拟主机 阿里云服务器 网站建设 企业邮箱 管理中心 客服中心
域名问题
主机问题
邮箱问题
备案问题
建站问题
其他问题
如何办理汇款
产品购买流程
新闻公告
价格总览
域名基本知识
虚拟主机基本知识
域名解析教程
FTP软件上传
MSSQL使用帮助
MYSQL使用帮助
Foxmail收发信
Outlook收发信
域名注册服务条款
虚拟主机服务条款
独立主机服务条款
企业邮局服务条款
服务总章
相关法律法规
您的位置:首页 > 新闻中心 > 大型网站的架构
域名注册39元

大型网站的架构

发布时间:2010-5-14 8:27:34
我们知道,对于一个大型网站来说,可伸缩性是非常重要的,怎么样在纵向和横向有良好的可伸缩性,就需要在做架构设计的时候考虑到一个分的原则,我想在多个方面说一下怎么分:

首先是横向的分:

1. 大的网站化解为多个小网站:当我们一个网站有多个功能的时候,可以考虑把这个网站拆分成几个小模块,每一个模块可以是一个网站,这样的话我们到时候就可以很灵活地去把这些网站部署到不同的服务器上。

2. 静态动态分离:静态文件和动态文件最好分离开成2个网站,我们知道静态网站和动态网站对服务器来说压力的侧重不同,前者可能重IO后者重CPU,那么我们在选择硬件的时候也可以有侧重,而且静态和动态内容的缓存策略也不一样。典型的应用,我们一般会有独立的文件或图片服务器。 

3. 按照功能来分:比如有一个模块是负责上传的,上传操作很消耗时间,如果和其它应用混在一起的话很可能,一点点访问就会使服务器瘫痪,这种特殊的模块应该分开。安全的不安全的也要分开,还需要考虑到以后SSL的购买。 

4. 我们不一定要全部用自己的服务器,搜索、报表可以依靠别人的服务,比如google的搜索和报表服务,自己做的不一定比得过别人,服务器带宽都省了。

其次是纵向的分: 

1. 文件也相当于数据库,IO的流量可能比数据库还大,这也算是纵向级别的访问,上传的文件图片一定要和WEB服务器分开。当然,数据库和网站都放在一个服务器上的很少了,这是最基本的。

2. 对于涉及到数据库访问的动态程序来说,我们可以使用一个中间层(所谓的应用层或逻辑层)来访问数据库(部署在独立的服务器上),最大的好处就是缓存和灵活性。缓存的内存占用比较大,我们要把它和网站进程分开,而且这样做我们可以很方便的去改变一些数据访问的策略,即使到时候数据库有分布的话在这里可以做一个调配工作,这样灵活性就很大了。还有好处是中间层可以做电线网通桥梁,可能网通访问双线再访问电信会比网通直接访问电信服务器快。 有人说我不分,我可以做负载均衡,对,是可以的,但是如果分的话,同样的10台机器肯定比不分10台机器可以承受更多的访问量,而且对硬件的需求可能不会很高,因为知道需要哪个硬件特别好。争取让每一个服务期都不空闲,又都不是太忙,合理进行组合调整和扩充,这样的系统伸缩性就高了,能根据访问量来调整的前提就是之前有考虑到分,分的好处是灵活性、伸缩性、隔离性以及安全性。

对服务器来说,我们有几点是要长期观察的,任何一点都可能是瓶颈: 

1. CPU:动态文件的解析需要比较多的CPU,CPU出现瓶颈就要看是不是哪个功能过长时间占用线程,如果是就分出去。或者就是每一个请求处理时间不长,但是访问量很高,那么就加服务器。CPU是好东西,不能让他干等,不做事情。 

2. 内存:缓存从IIS进程独立出去,一般对WEB服务器来说内存不够的情况不是很多。内存比磁盘快,要合理利用。 

3. 磁盘IO:用性能监视器找到哪些文件IO特别大,找到了就分到独立的一组文件服务器上去,或者直接做CDN。磁盘慢,大规模读取数据的应用靠缓存,大规模写入数据的应用可以靠队列来降低突发的并发。

4. 网络:我们知道,网络的通讯是比较慢的,比磁盘还慢,如果是做分布式缓存,分布式计算的话,要考虑到物理服务器之间网络通讯的时间,当然,在流量大了以后,这可以提高系统的接纳能力一个等级。静态内容可以借助CSD分担一部分,在做服务器假设的时候还要考虑中国特色的电信网通情况以及防火墙。

对SQL SERVER数据库服务器来说[UPDATE]:

其实还是水平分割和纵向分割,一个二维表,水平分割就是横过来切一刀,纵向分割就是竖直切一刀: 

1、纵向分割就是,我们不同的应用可以分到不同的DB中,不同的实例中,或者说把某个拥有很多字段的表拆分成小表。

2、横向分割就是,某些应用可能不负载,比如用户注册,但是用户表会非常大,可以把大表分开。可以采用表分区,数据存储在不同文件上,然后再部署到独立物理服务器增加IO吞吐以改善读写性能,土一点的做法就是自己定期把老的数据存档。表分区的另外一个优势可以增加数据查询速度,因为我们的页索引可以有多层了,就像一个文件夹中的文件不要太多,多分几层文件夹一样。 

3、还可以通过数据库镜像、复制订阅、事物日志,把读写分开到不同的镜像物理数据库上,一般来说够用,如果还不行可以用硬件来实现数据库的负载均衡。当然,对于BI,我们可能还会有数据仓库。 架构上考虑到了这些之后,流量大了,就可以在这个的基础上再去调整或者做WEB服务器或者应用服务器的负载均衡。很多时候我们都是在重复发现问题-》找到瓶颈-》解决这个过程。 典型的架构如下:
 
 动态WEB服务器配好点的CPU,静态WEB服务器和文件服务器磁盘好点应用服务器内存大点,缓存服务器也是,数据库服务器当然内存和CPU都要好 

大型互联网网站架构心得之二:并于换 

“分”是一个比较大的原则也是一个比较高层的原则,这次我想说一下其它两个原则:并与换。 

并为什么要分?是因为我们希望通过分来提高系统的承载能力,那并又是并什么呢?我想了一下有几个方面可以并:
1.合并用户请求,最基本的就是合并CSS/图片/脚本,还可以合并页面。不过合并就可能产生流量的浪费,需要有一个平衡点。
2.合并接口的粒度,如果做分布式应用的话,我们可能不会直接访问数据库而是调用应用层提供的接口,由于是网络调用,代价比较大,因此在设计的时候尽量提供粒度比较粗的接口,一次调用返回比较多的数据,而不是细化到添加删除修改的层次。
3.合并接口的部署,对于频繁的跨机器调用可以考虑有一些数据冗余,把跨网络的服务编程进程间通讯,甚至转到客户端来做。比如论坛发贴时候脏词的过滤,直接调用应用层提供的接口(跨机器)是可以的,但是可能代价比较大,可以把这个接口使用IPC方式部署在本机。
换时间换空间,空间换时间是常见的做法,具体一点说:
1.缓存。缓存的重要性早计算机的硬件中就有重要的体现。对于网站,有很多种缓存,可以是客户端资源的缓存,可以是页面输出缓存,也可以是应用层的数据缓存,目的都是一样的,或是减少了服务器请求次数,或是减少了请求的处理过程,或是减少了数据库的访问次数。当然,生成静态文件也可以算是一种缓存。不访问磁盘固然不可能,但是我们要极大限度降低磁盘访问的机会。
2.有的时候为了获取极快的响应,我们还会不惜代价采用重复计算。比如,我们的某个操作很可能会由于网络问题等原因响应比较慢,在设计的时候可以有一个统一的处理接口,由这个接口分发到不同的服务器去异步实现这个操作,哪个服务器先返回了结果我们就用这个结果,然后杀死其他服务器的冗余操作。
3.网站一般追求比较快的响应,一般不太会在比较高的层次用时间来换取空间,但是在一些用户独有数据的处理算法上可能还是会考虑到空间的节省问题。
4.有的时候我们会用一些聚合表来存放聚合数据,也就是进行一些预计算提高复杂计算(比如报表)的性能。当然,对于数据分析,构建多维数据库也是一种不错的选择。有很多网友留言说说的比较粗,没有什么具体的东西。我觉得架构这个东西很难去说具体怎么做,因为具体实施的时候要看情况去应用的,由于没有完美的东西,所以做架构通常是去做一个平衡,很可能某一个侧重不同会影响到架构的实施。希望我的这些文章能给大家一个提示的作用,看了之后如果你觉得“这点我倒没有考虑到,以后要注意”那或许就是最大的帮助了,下面我想说一些其它方面的问题,每一条都很零散,算是一个补充吧:
1.到底是采用已有的东西还是自己去做需要详细考虑的,采用别人的东西可能比较稳定,但是自己的控制少了一点,采用自己做的东西可以很灵活,但是可能会问题比较多。不管怎么样,我们在采用一个第三方框架的时候务必要进行缜密的调查,看到他的不足,否则项目很可能在后期被这个框架制约,反之,决定自己去做一个框架的时候也要看到自己需要什么其他框架不能提供的东西。
2.数据传输的时候可以做压缩,但要考虑到压缩解压缩需要CPU资源,在IO(磁盘,带宽,传输能力)和CPU之间有一个平衡的考虑。
3.理想的可伸缩性架构是可以自由增加或替换服务器,无需去停机维护或做很大的调整。在使用一个统一的调度中心来调度这些服务器,分配请求的时候,我们要考虑一下调度服务器能承受多少流量。
4.使用大量的廉价服务器还是少量的高配服务器?如何根据需求来组合服务器发挥最大作用。
5.对于分布式构架,我们尽量让每一个节点保持简单的逻辑,尽量减少同一层次节点之间的依赖,另外。需要有统一的地方来管理所有的节点。
6.功能分解、使用异步进行整合、故障转移、失效保护。
7. 软件的架构升级和计算机硬件的架构升级很像,可能有一段时期,我们是在慢慢提高整体能力,2年也才提高了几倍,之后发现只有通过某种彻底的架构改变才能提高数十倍的能力,升级之后,我们或许又会遇到其他问题。就像CPU,是简单提高主频还是彻底更换架构。
8.数据方面,读写分离、数据库分隔、功能划分、缓存、镜像。
9.硬件网络上的架构很重要,但软件开发中的一些细节不可忽略,好的架构不意味着不需要代码审阅。按此在新窗口浏览图片
 相关资讯:
有关万网CN域名申请开通说明 2012-12-5 9:05:16
万网备案通过域名绑定失败原因 2012-11-24 10:31:51
万网M3和L1型空间如何启用gzip 2012-10-30 19:31:36
谈谈域名仲裁失败的那些案例 2012-10-28 20:39:04
朝鲜平板域名alilang.com已经被注册有10年 2012-10-23 22:02:00
最近几天域名交易行情整体表现积极 2012-10-19 21:51:28
好消息万网虚拟主机加量不加价 2012-7-2 13:42:56
短信平台停止新购通知公告 2012-6-19 21:38:48
域名注册商Donuts公司申请了超过300个新顶级域名 2012-6-8 18:48:23
关于万网中国域名注册和服务调整的通知 2012-6-7 18:51:40
万网向个人开放国内域名注册 2012-6-6 20:11:26
万网支持asp+access的空间有哪些 2012-5-27 9:50:01
万网主机寄放网站违法信息处理方法 2012-5-23 19:21:30
万网翔云普及型和翔云标准型正式上线 2012-5-12 22:43:07
非万网备案接入教程和解决方案 2012-4-25 10:27:46
手机平台 关于我们 | 工作机会 | 付费方式 | 帮助中心 | 联系我们 | 网站地图 | 友情连接
合作伙伴万网 | 万网域名注册 | 万网空间 | 阿里云服务器 | 阿里云虚拟主机 | 阿里云企业邮箱 | 自助建站
Copyright 中国万网核心代理商-维启在线 All Rights wanwangdaili Reserved
在线QQ客服:>>咨询客服
全国统一服务热线:400-6800-390(免长途电话费)
备案专员:95187按3, 阿里云代理万网ID:30608136
《中华人民共和国电信与信息服务业务》信息产业部备案号 皖ICP备14010012号-3
《中华人民共和国增值电信业务经营许可证》经营许可证编号ICP证050062号