网站架构发展

综合性知识:

一步步构建大型网站架构

第一阶段

首先托管网站的服务器,cpu,磁盘,内存压力越来越大;网站响应速度越来越慢。

处理方法:将网站和数据库分别部署在不同的服务器上。

第二阶段

响应速度再次变慢,访问量又变大了,检查发现数据库操作太多,数据库连接竞争激烈。

决定用缓存机制来减少数据库连接资源的竞争和对数据库读的压力。

处理方法:增加页面缓存。

第三阶段

随着访问量的增加,发现系统又开始变的有些慢了。

增加页面片段缓存ESI。

第四阶段

发现系统中存在一些重复获取数据信息的地方,像获取用户信息等,这个时候开始考虑是不是可以将这些数据信息也缓存起来呢?

使用数据缓存,将一些数据存到本地内存中。

涉及技术:缓存技术,包括像Map数据结构、缓存算法、所选用的框架本身的实现机制等。

第五阶段

增加一台机器,如何让访问分配到这两台机器上呢?

1,考虑负载均衡方案。,负载均衡软件的选择。

2,如何保持状态信息的同步,例如用户session等,这个时候会考虑的方案有写入数据库、写入存储、cookie或同步session信息等机制等;

3、如何保持数据缓存信息的同步,例如之前缓存的用户数据等,这个时候通常会考虑的机制有缓存同步或分布式缓存;

4、如何让上传文件这些类似的功能继续正常,这个时候通常会考虑的机制是使用共享文件系统或存储等;

这一步涉及到了这些知识体系:

负载均衡技术(包括但不限于硬件负载均衡、软件负载均衡、负载算法、linux转发协议、所选用的技术的实现细节等)、主备技术(包括但不限于ARP欺骗、linuxheart-beat等)、状态信息或缓存同步技术(包括但不限于Cookie技术、UDP协议、状态信息广播、所选用的缓存同步技术的实现细节等)、共享文件技术(包括但不限于NFS等)、存储技术(包括但不限于存储设备等)。

第六阶段

发现数据库写入、更新的这些操作的部分数据库连接的资源竞争非常激烈,导致了系统变慢,这下怎么办呢?进行分库。

这一步涉及到了这些知识体系:

这一步更多的是需要从业务上做合理的划分,以实现分库,具体技术细节上没有其他的要求;

但同时随着数据量的增大和分库的进行,在数据库的设计、调优以及维护上需要做的更好,因此对这些方面的技术还是提出了很高的要求的。

第七阶段

分表、DAL和分布式缓存

  随着系统的不断运行,数据量开始大幅度增长,这个时候发现分库后查询仍然会有些慢,于是按照分库的思想开始做分表的工作。当然,这不可避免的会需要对程序进行一些修改,也许在这个时候就会发现应用自己要关心分库分表的规则等,还是有些复杂的。于是萌生能否增加一个通用的框架来实现分库分表的数据访问,这个在ebay的架构中对应的就是DAL,这个演变的过程相对而言需要花费较长的时间。当然,也有可能这个通用的框架会等到分表做完后才开始做。同时,在这个阶段可能会发现之前的缓存同步方案出现问题,因为数据量太大,导致现在不太可能将缓存存在本地,然后同步的方式,需要采用分布式缓存方案了。于是,又是一通考察和折磨,终于是将大量的数据缓存转移到分布式缓存上了。

这一步涉及到了这些知识体系:

分表更多的同样是业务上的划分,技术上涉及到的会有动态hash算法、consistenthash算法等;

DAL涉及到比较多的复杂技术,例如数据库连接的管理(超时、异常)、数据库操作的控制(超时、异常)、分库分表规则的封装等;

第八阶段

在做完分库分表这些工作后,数据库上的压力已经降到比较低了,又开始过着每天看着访问量暴增的幸福生活了。突然有一天,发现系统的访问又开始有变慢的趋势 了,这个时候首先查看数据库,压力一切正常,之后查看webserver,发现apache阻塞了很多的请求,而应用服务器对每个请求也是比较快的,看来是请求数太高导致需要排队等待,响应速度变慢。这还好办,一般来说,这个时候也会有些钱了,于是添加一些webserver服务器,在这个添加webserver服务器的过程,有可能会出现几种挑战:

  1、Apache的软负载或LVS软负载等无法承担巨大的web访问量(请求连接数、网络流量等)的调度了,这个时候如果经费允许的话,会采取的方案是购买硬件负载平衡设备,例如F5、Netsclar、Athelon之类的,如经费不允许的话,会采取的方案是将应用从逻辑上做一定的分类,然后分散到不同的软负载集群中;

  2、原有的一些状态信息同步、文件共享等方案可能会出现瓶颈,需要进行改进,也许这个时候会根据情况编写符合网站业务需求的分布式文件系统等;

  在做完这些工作后,开始进入一个看似完美的无限伸缩的时代,当网站流量增加时,应对的解决方案就是不断的添加webserver。

这一步涉及到了这些知识体系:

  到了这一步,随着机器数的不断增长、数据量的不断增长和对系统可用性的要求越来越高,这个时候要求对所采用的技术都要有更为深入的理解,并需要根据网站的需求来做更加定制性质的产品。

第九阶段

数据读写分离和廉价存储方案

  突然有一天,发现这个完美的时代也要结束了,数据库的噩梦又一次出现在眼前了。由于添加的webserver太多了,导致数据库连接的资源还是不够用,而这个时候又已经分库分表了,开始分析数据库的压力状况,可能会发现数据库的读写比很高,这个时候通常会想到数据读写分离的方案。当然,这个方案要实现并不容易,另外,可能会发现一些数据存储在数据库上有些浪费,或者说过于占用数据库资源,因此在这个阶段可能会形成的架构演变是实现数据读写分离,同时编写一些更为廉价的存储方案,例如BigTable这种。

这一步涉及到了这些知识体系:

  数据读写分离要求对数据库的复制、standby等策略有深入的掌握和理解,同时会要求具备自行实现的技术;

  廉价存储方案要求对OS的文件存储有深入的掌握和理解,同时要求对采用的语言在文件这块的实现有深入的掌握。

第十阶段

进入大型分布式应用时代和廉价服务器群梦想时代

  经过上面这个漫长而痛苦的过程,终于是再度迎来了完美的时代,不断的增加webserver就可以支撑越来越高的访问量了。对于大型网站而言,人气的重要毋庸置疑,随着人气的越来越高,各种各样的功能需求也开始爆发性的增长。这个时候突然发现,原来部署在webserver上的那个web应用已经非常庞大 了,当多个团队都开始对其进行改动时,可真是相当的不方便,复用性也相当糟糕,基本是每个团队都做了或多或少重复的事情,而且部署和维护也是相当的麻烦。因为庞大的应用包在N台机器上复制、启动都需要耗费不少的时间,出问题的时候也不是很好查,另外一个更糟糕的状况是很有可能会出现某个应用上的bug就导 致了全站都不可用,还有其他的像调优不好操作(因为机器上部署的应用什么都要做,根本就无法进行针对性的调优)等因素,根据这样的分析,开始痛下决心,将系统根据职责进行拆分,于是一个大型的分布式应用就诞生了,通常,这个步骤需要耗费相当长的时间,因为会碰到很多的挑战:

  1、拆成分布式后需要提供一个高性能、稳定的通信框架,并且需要支持多种不同的通信和远程调用方式;
  2、将一个庞大的应用拆分需要耗费很长的时间,需要进行业务的整理和系统依赖关系的控制等;
  3、如何运维(依赖管理、运行状况管理、错误追踪、调优、监控和报警等)好这个庞大的分布式应用。
  经过这一步,差不多系统的架构进入相对稳定的阶段,同时也能开始采用大量的廉价机器来支撑着巨大的访问量和数据量,结合这套架构以及这么多次演变过程吸取的经验来采用其他各种各样的方法来支撑着越来越高的访问量。

这一步涉及到了这些知识体系:

  这一步涉及的知识体系非常的多,要求对通信、远程调用、消息机制等有深入的理解和掌握,要求的都是从理论、硬件级、操作系统级以及所采用的语言的实现都有清楚的理解。

该文章摘抄自网络。http://kb.cnblogs.com/page/99549/

一步步构建大型网站架构

我感觉读写分离和做的比较早,我们曾经都是最先做的读写分离,其实分库分表感觉很费劲的。

时间: 2024-10-12 13:00:40

网站架构发展的相关文章

简谈网站架构发展

大型网站的发展都是由一个小网站开始的,随着现在越来越多的大型网站出现,导致越来越少的架构师能够去经历一个网站真正从小到大历程.从这点上来说,不对不说是有点遗憾,但是不管是农业社会的发展,还是工业社会的发展,以及当下互联网时代的发展,我们人类教育,科技,文明发展无一不是站在巨人的肩膀上.只有这样才能迅速成长.在这个知识大爆炸的时代,这兴许是已成为自然规律. 虽然现在越来越少有机会去亲身去经历一个小型网站如何逐步进化,蜕变成庞然大物的,但是我们可以参考现有的大型网站,研究它们是如何一步一步走到今天的

网站架构发展历程

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

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

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

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

网站架构的伸缩性设计

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

(转)大型网站架构演化发展历程

前面已经描述了大型网站系统的特点,而对一个大型网站系统,其架构也是重要的一个环节. 大型网站技术主要的挑战来自于庞大的用户.高并发以及海量的数据这三个方面.大型网站的形成就像一颗大树的成长,历尽长时间的磨练,最后枝繁叶茂,服务他人. 初始网站架构结构 起初的网站鉴于用户量.访问量较少,只需要一台服务器足以,应用程序.数据库.文件等其所有资源放在一太服务器上就已经足够满足此时的需求,这时候网站的架构就几个简单组成部分如下图 应用和数据服务分离 随着网站业务需求的发展,越来越多的用户进行访问,此时一

网站架构演化发展历程

大型网站系统的特点 1,高并发,大流量:需要面对高并发用户,大流量访问. 2,高可用:不间断服务. 3,海量数据:管理处理海量数据,使用大量服务器. 4,需求快速变更,发布频繁:互联网产品为快速适应用户需求,版本迭代. 1. 初始阶段的网站架构 2. 应用服务器和数据服务分离 随着网站业务的发展,一台服务器逐渐不能满足需求:越来越多的用户访问导致性能越来越差,越来越多的数据导致存储空间不足.这是就需要将应用和数据分离.应用和数据分离后整个网站使用三台服务器:应用服务器.文件服务器和数据库服务器,

1.2 大型网站架构演化发展过程[读书敲录]

大型网站技术挑战主要来自庞大的用户,高并发的访问和海量的数据,任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户,问题就会变得很棘手.大型网站架构主要就是解决这类问题. 1.2.1初始阶段的网站架构 大型网站都是从小型网站发展而来,网站架构也是一样,是从小型网站架构逐步演化而来.小型网站最开始的时没有太多人访问,只需要一台服务器就绰绰有余,这时的网站架构如图1.1所示. 图1.1初始阶段的网站架构 应用程序.数据库.文件等所有资源都在一台服务器上.通常服务器操作系统使用Linux,应用

大型网站架构演化发展历程(一)

1.初始阶段的网站架构 大型网站都是由小型网站发展而来,网站架构也是一样.小型网站最开始没有多少人访问,只需要一台服务器就绰绰有余. 2.应用服务和数据服务分离 随着网站业务的发展,越来越多的用户访问导致性能越来越差,越来越多的数据导致存储空间不足.这时就需要将应用和数据分离.这时需要三台服务器:应用服务器.文件服务器和数据库服务器,如下图.这三台服务器对硬件的资源要求各不相同:应用服务器需要处理大量的业务逻辑,需要更快更强大的CPU:数据库服务器需要快速检索磁盘和缓存,因此需要更快的磁盘和更大