简谈网站架构发展

  大型网站的发展都是由一个小网站开始的,随着现在越来越多的大型网站出现,导致越来越少的架构师能够去经历一个网站真正从小到大历程。从这点上来说,不对不说是有点遗憾,但是不管是农业社会的发展,还是工业社会的发展,以及当下互联网时代的发展,我们人类教育,科技,文明发展无一不是站在巨人的肩膀上。只有这样才能迅速成长。在这个知识大爆炸的时代,这兴许是已成为自然规律。

虽然现在越来越少有机会去亲身去经历一个小型网站如何逐步进化,蜕变成庞然大物的,但是我们可以参考现有的大型网站,研究它们是如何一步一步走到今天的。不管何种的大型网站架构,一般都会经历从简单到复杂,从单服务器到集群的演变。鄙人不才,作为新手,初探此径。总结了它们一般所经历的几个演变阶段。由于每个行业的业务存在较大差别,所以在某些方面可能会有不同,该演变阶段只是提供了一个简单的演变思路。真正的演变历程,原比我们想象要复杂的多,那是多少前辈与先驱者辛勤劳动与智慧的结晶。

第一阶段:有家网站初长成

由于网站规模很小,所有的程序,文件都会部署在通一台应用服务器上,甚至采用虚拟技术与其它网站共同部署在一台应用服务器上。

那么它的架构大致如下图:

第二阶段:分而治之

随着网站规模增大,将应用程序,文件存储,数据库单独部署,从而满足更多用户请求

由于每台应用服务器作用不同,它们关注的东西也不尽相同,如应用服务器,我们通常所说的

程序代码都跑在上面,那么最关注的是CPU。

单独部署架构大致如下:

第三阶段:二八定律

耳熟能详的二八定律再次降临,无论在管理,销售,教育等等领域,都有这经典二八理论一说。那么它对架构有着什么影响呢?

上个阶段我们已经将数据库,文件,应用程序作了单独部署,但是随着用户量的增大,数据库压力将面临挑战。由于大多数用户感兴趣所访问的数据(热门商品,公共数据),一般占了总数据的20%,就像热卖的商品只有性价比高的,或促销的那几样一个道理。那么既然如此我们可以把经常访问的数据事先加载入缓存,这样就不用每次都去访问数据库了。

加入缓存后的架构:

第四阶段:人多力量大的应用

加了缓存后,数据库的压力是得到了缓解,但是应用还是要被每个用户实实在在访问的,随着用户进一步增大,考虑增加应用服务器,实现集群技术采用负载均衡很好分摊了各服务器的压力。

应用服务器集群化后的架构图:

第五阶段:速度与主仆

在之前阶段中我们已经对经常访问的数据做了缓存,减轻了数据库的压力。但是缓存的只能是用户需要访问的数据,对于用户需要写入的数据,还是需要实实在在去访问数据库的,所以随着该类型的业务增长,数据库模块必须做出改变。一般我们会采用读写分离的技术,某几台数据服务器负责写操作,某几台数据服务器负责读操作,负责写的一般称之为主服务器,负责读的则称之为从服务器。然后将主服务器的数据同步到从服务器,从而保证数据的一致性。一般在这个阶段,说明我们网站的用户规模已经不可小觑了,那么用户体验将变得更加重要。用户体验最直接的影响就是用户通过浏览器来访问你的网页,你让用户看到网页上内容的时间。这个时间不仅仅取决服务的提供者我们,还取决于用户使用的浏览器,用户的使用网络服务商。所以我们必须尽可能让用户第一时间看到他们想要看到的。一般我们会在负载均衡前再部署2类应用设备,一类叫反向代理服务器,一类叫CDN(内容分发网络,有专门的服务提供商)这二者的本质还是缓存,我们将一些静态元素(html,js,css)和常用的数据缓存在上面,用户发起请求时,部分请求可直接由它们负责响应,大大提升了响应速度。由于用户有着区域性特点,通过在不同区域增加CDN节点,也能起到提升用户体验的效果。

该阶段的架构图大致如下:

第六阶段:集群普遍化

随着用户规模越来越大,主从式的数据库也出现了瓶颈,管理的文件也增加了不少,那么我们就将它们也集群化吧

数据库的集群还可以采用关系数据库与NoSQL数据库混合模式,不仅高效而且灵活。还有可以增加搜索引擎来检索数据。

第七阶段:SOA与分类

一般到了第六阶段,已经能够应付比较大规模的用户了,但是有的网站,由于其业务繁多,逻辑复杂,或者某些应用在特殊的应用场景下,其压力远远大于其他应用服务器。那么一般我们会采用SOA思想,将不同的应用拆分到不同的应用服务器集群,将相同的应用封装成公共服务,统一管理。不同应用之间还可以采用异步方式,缓解压力,加速响应。

一般到此为止,能够应付绝大多数海量用户了。当然一样的架构,由于其内部模块设计,算法,数据结构等因素,最后的表现也不尽相同。还有不同的企业,由于其业务导向,侧重点不一样,架构上也会做相应的调整。所以没有一成不变的大型网站架构,不变的只有其本质思想。

该阶段的架构图:

时间: 2024-08-03 09:22:56

简谈网站架构发展的相关文章

浅谈网站架构演变

浅谈网站架构 作为一个从事后台开发已经2年的程序员来讲,大部分时间都忙于业务逻辑分析,往往忽略了业务之上的架构层面的设计. 本文作为网站架构知识的补充,不仅开拓了眼界,也对以后的程序设计益处多多.下面我们就一起来看看网站架构的演变历史. 网站架构的演变大致分为如下几个阶段: 1 初始阶段的网站架构 网站在最初开始时没有太多人访问,用一台服务器就完全可以胜任,此时的网站架构如下图所示. 应用程序,文件存储,数据库所有的资源都在一台服务器上.也就是经典的LAMP架构模型(Linux操作系统+部署在A

网站架构发展历程

注:本文摘自李智慧的<大型网站技术架构> 1.初始阶段的网站架构 小型互联网公司一般在最初阶段都是将:应用程序.数据库.文件等所有的资源都在一台服务器上.通常服务器操作系统使用Linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用MySQL,汇集各种免费开源软件及一台廉价服务器就可以开始网站的发展之路了. 2.应用服务和数据服务分离 随着网站业务的发展,一台服务器逐渐不能满足需求:越来越多的用户访问导致性能越来越差,越来越多的数据导致存储空间不足.这时就需要将应用和数据分离.

网站架构发展

综合性知识: 一步步构建大型网站架构 第一阶段 首先托管网站的服务器,cpu,磁盘,内存压力越来越大:网站响应速度越来越慢. 处理方法:将网站和数据库分别部署在不同的服务器上. 第二阶段 响应速度再次变慢,访问量又变大了,检查发现数据库操作太多,数据库连接竞争激烈. 决定用缓存机制来减少数据库连接资源的竞争和对数据库读的压力. 处理方法:增加页面缓存. 第三阶段 随着访问量的增加,发现系统又开始变的有些慢了. 增加页面片段缓存ESI. 第四阶段 发现系统中存在一些重复获取数据信息的地方,像获取用

阿里巴巴中文网站架构发展历程

大型网站技术架构(一):大型网站架构演化

第一章:大型网站架构演化 九层之台,始于垒土:千里之行,始于足下. 对于网站的发展,亦是如此,从上世纪90年代开始,互联网经历了20多年的发展,发生了翻天覆地的变化,今天,全球有一半的人使用互联网,从信息检索到实时通信,从电子购物到文化娱乐,互联网渗透到了生活的每一个角落.但是,构建一个高性能的网站,绝非一朝一夕可以完成,我们来看下,作为一个大型网站系统应有的特点: 1.大型网站系统应有的特点 高并发,大流量:需要面对高并发用户,大流量访问.举个例子,去往迪拜的飞机有200张票,但是有100w人

网站架构的伸缩性设计

回顾网站架构发展历程,网站架构发展史就是一部不断向网站添加服务器的历史,只要工程师能向网站的服务器集群中添加新的机器, 只要新添加的服务器能线性提高网站的整体服务处理能力,网站就无需为不断增长的用户和访问而焦虑. 一般来说网站的伸缩性设计可分为两类,一类是根据功能进行物理分离实现伸缩,一类是单一功能通过集群实现伸缩. 前者是不同的服务器部署不同的服务,提供不同的功能:后者是集群内的多台服务器部署相同的服务,提供相同的功能. 1.不同功能进行物理分离实现伸缩 网站发展早期--通过增加服务器提高网站

【架构】浅谈web网站架构演变过程

浅谈web网站架构演变过程 前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变. 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 阶段一.单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件.此时我们使用一个容器,如tomcat.jetty.jboos,然后直接使用JSP/servlet技术,或者使用一些开源的框架如maven+spring+struct+hibernate.maven+spri

客户端GUI测试技术和自动化测试架构设计简谈

客户端自动化特点 客户端的自动化,通常做过的人都不是很愿意深入讨论.因为除了功能和逻辑之外,不得不面对各种界面变化,各种和环境交互,各种兼容问题以及想不到灰色地带,就算这样,也找不到太多有效的bug.然而即便如此,客户端的自动化必须去做,尤其是GUI的.它的自动化特点是: 复杂 成本高 不容易发现问题 技术要求高 架构很难通用 下面,从一些基本的东西开始一点点的讨论客户端GUI测试的一些问题和处理办法,以及自动化架构设计的一些思路.事实上就像上面说的,GUI的测试并不是为了发现bug,而是回归的

浅谈千万级PV/IP规模高性能高并发网站架构

高并发访问的核心原则其实就一句话“把所有的用户访问请求都尽量往前推”. 如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部(指挥部就是数据库及分布式存储). 如:能缓存在用户电脑本地的,就不要让他去访问CDN. 能缓存CDN服务器上的,就不要让CDN去访问源(静态服务器)了.能访问静态服务器的,就不要去 访问动态服务器.以此类推:能不访问数据库和存储就一定不要去访问数据库和存储. 说起来很轻松,实际做起来却不容易,但只要稍加努力