【转】大型网站架构演化一些关键点

转自:http://blog.csdn.net/yyyiran/article/details/17174331

一直都对海量服务后台架构很感兴趣,最近看完了《大型网站技术架构 & 核心原理与案例分析(李智慧 著)》一书,涵盖了大型网站架构的很多技术细节,写得极其赞!这里结合自己的一些见解,整理一个笔记出来。

// =======================================================================================

单服务器LAMP

* 大学时期常搞的LAMP,Linux+Apache+MySQL+php,接入、应用程序、数据库、文件都在一台服务器。流量小,一台机器绰绰有余

* 增长瓶颈:机器功能耦合

PS:架构设计一个核心原则就是高内聚低耦合,将网站的接入、逻辑、存储分开到专门的服务器是首先考虑的

应用逻辑和存储分离

* 3台服务器各司其职:应用服务器(CPU),文件服务器(磁盘容量),数据库服务器(磁盘IO)

* 增长瓶颈:数据库访问压力大

PS:数据库最终会读写磁盘文件,受到磁盘IO限制会首先成为瓶颈

引入缓存减少数据库读写

* 缓存是后台开发一种重要的方法,其背后遵循的是“局部性原理”,也称“28定律”:即日常80%的访问会集中在20%的数据上。将这小部分“热点”数据缓存在内存中,就可以大大降低数据库的访问次数

* 缓存分为2种,本地缓存和分布式缓存

1 本地缓存:数据缓存在应用服务器上。优点是本地内存读写操作(纳秒级),速度最快;缺点是内存大小受限,扩展性较差

2 分布式缓存:数据缓存在专用的缓存服务器上。优点是应用和存储低耦合,专门服务器维护,易扩展;缺点是读写需网络开销(毫秒级)

* 缓存数据更新:应用程序首先读缓存,读不到数据时再访问数据库,并将读到的数据写入缓存。如果这时缓存是满的,就必须淘汰一些已有数据,常用的淘汰算法是LRU,即最近最少使用

* 增长瓶颈:应用服务器并发处理能力

使用应用服务器集群提高网站并发处理能力

* “网站撑不住了,就拿机器顶!”,集群是海量服务中解决高并发的常用手段

* 负载均衡:多台应用服务器,如何将前端请求均匀分发到各台机器上,这就需要前端加一个负载均衡服务器做请求分发。nginx简单灵活的负载均衡策略被广泛使用,常见的负载均衡算法有轮询、随机、加权、来源地址hash等

增长瓶颈:数据库负载过高

PS:当网站访问量继续上升,虽然加了缓存,但是缓存不命中及应用写操作(当然也有只写缓存的策略)还是需要访问数据库

数据库读写分离

* 数据库服务器主从分离:一台主数据库服务器(Master)负责写操作,多台从数据库服务器(Slave)负责读操作,主服务器被写之后会同步数据变更到从服务器

* 数据库访问模块封装:将应用程序对数据库的操作封装成模块,使得后端数据库读写分离等变更对应用程序透明(高内聚低耦合)

到目前为止,网站总体架构如下图所示,已经能支撑起大部分网站的访问需求了。当然,不单单是网站,这些架构关键点对任何海量服务的后台开发都是相通的

当网站访问继续增加,有日均PV过亿的趋势,这时网站其实还有很多关键点可以继续优化:

使用反向代理和CDN做网站文件缓存

* 将网站一些静态文件,如图片、html页面等缓存在反向代理服务器或者CDN服务器,用户的请求可以不用到达应用服务器就返回数据给用户。是网站加速、提高用户体验的2种常用手段

1 反向代理:部署在网站中心机房

2 CDN,即内容发布系统:部署在网络提供商各地的机房,常用于视频和图片文件的缓存

使用分布式文件系统

* 当一台文件服务器满足不了网站文件存储需求时,接下来应考虑的就是使用分布式文件系统。HDFS、HBase等是当前海量文件存储比较热门的方案

使用分布式数据库和NoSQL

* 关系型数据库的分布式是大型网站业务持续增长的最后手段,可通过不同业务模块分库,相同业务模块分表等方法实现数据库的分布式部署

* NoSQL相对于关系型数据库有更简单的数据结构,更高的性能及更好的可扩展性。但对业务需求的支持也相对有限。

应用逻辑的业务模块拆分

* 一个网站必定有多种业务模块,比如购物网站都有用户模块、商品模块、订单模块等等,将这些业务模块拆分并独立维护。保证各业务模块高内聚低耦合,利于开发上团队分工,也利于后期独立部署运营

// =======================================================================================

大型网站架构设计的一些价值观:

* 大道至简。简单的设计使开发和维护变得清晰有序

* 业务和功能的划分和模块化。各业务模块,各功能模块(接入-逻辑-存储)划分清晰,高内聚低耦合,尘归尘土归土

* 架构来源于需求,而不是技术。架构设计衡量标准是满足用户的产品需求,而不是为了技术而技术

* 架构是演化而来的。别追求有完美的架构设计后再上线,好的架构往往都是不断修改甚至推翻之后慢慢演化而来的

* 不要所有问题都用技术来解决。有些技术上难以解决的问题,往往可以用业务手段来解决,如12306的整点售票改为分时段售票,从业务上来平摊用户请求量

* 衡量指标:性能、可用性、伸缩性、扩展性、安全性。

时间: 2024-11-08 01:33:13

【转】大型网站架构演化一些关键点的相关文章

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

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

《大型网站技术架构-核心原理与案例分析》之一: 大型网站架构演化

最近刚刚读完李智慧的<大型网站技术架构-核心原理与案例分析>,对每章重点内容作了一些笔记,以便加深印象及日后查阅. 一.大型网站软件系统的特点 高并发,大流量:需要面对高并发用户,大流量访问. 高可用:系统7X24小时不间断服务. 海量数据:需要存储.管理海量数据,需要使用大量服务器. 用户分布广泛,网络情况复杂:许多大型互联网都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别. 安全环境恶劣:由于互联网的开放性,使得互联网站更容易受到攻击,大型网站几乎每天都会被黑客攻击. 需求快

《大型网站技术架构》读书笔记一:大型网站架构演化

一.大型网站系统特点 (1)高并发.大流量:PV量巨大 (2)高可用:7*24小时不间断服务 (3)海量数据:文件数目分分钟xxTB (4)用户分布广泛,网络情况复杂:网络运营商 (5)安全环境恶劣:黑客的攻击 (6)需求快速变更,发布频繁:快速适应市场,满足用户需求 (7)渐进式发展:慢慢地运营出大型网站 二.大型网站架构演化过程 (1)初始阶段网站架构:一台Server就刚需-应用程序.数据库.文件等所有资源都集中在一台Server上,典型案例:基于LAMP架构的PHP网站 (2)应用和数据

读《大型网站技术架构:核心原理与案例分析》第一章:大型网站架构演化

写在前面 从开始写代码到现在,已经做了好几个项目了,BS和CS的都有,一直都以一个码农自居.但,作为一个进步的程序员,都有一个成为架构师的理想.于是,在平时的工作中,也积极的去看各种书籍,看园子里面的精品文章.希望,在这条追逐梦想的道路上,能够留下点点滴滴,也算是对知识的一种巩固,一些分享. 读书感受   快下班的时候,看了该书的第一章.算是对网站的架构演化有了一些认识. (1)初始网站的架构:一台服务器,应用程序,数据库,文件都在一台服务器上面.LMAP足矣. (2) 二级网站的架构:应用服务

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

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

大型网站架构演化过程

一:大型网站架构演化 1.初级阶段网站架构 应用服务器,数据库,文件等所有的资源都在一台服务器上,采用LAMP架构,一般我们学生开发就是采用这种架构 2.应用服务与数据服务分离(应用与数据分离) 随着网站业务的发展,一台服务器已经不能满足性能的需求,这时我们把业务服务和数据服务分开,此时网站就变成了三个服务器:应用服务器,数据库服务器,文件服务器,一般小型项目就是这种开发模式,比如我    在360我们组的项目初期没有用缓存,就是这种架构,数据库有专门的服务器 应用服务器    -> 需要处理业

大型网站架构演化

一.大型网站系统特点 (1)高并发.大流量:PV量巨大 (2)高可用:7*24小时不间断服务 (3)海量数据:文件数目分分钟xxTB (4)用户分布广泛,网络情况复杂:网络运营商 (5)安全环境恶劣:黑客的攻击 (6)需求快速变更,发布频繁:快速适应市场,满足用户需求 (7)渐进式发展:慢慢地运营出大型网站 二.大型网站架构演化过程 (1)初始阶段网站架构:一台Server就刚需—应用程序.数据库.文件等所有资源都集中在一台Server上,典型案例:基于LAMP架构的PHP网站 (2)应用和数据

读书笔记1: 大型网站架构演化

大型网站系统的特点 高并发,大流量,PV巨大 高可用,7*24 海量数据,P级别 用户分布广泛,网络情况复杂,不同运营商 安全环境恶劣,黑客攻击 需求快速变更,发布频繁,快速跟进市场,需求变更快 渐进式发展,从小网站一步一步进化 ? 大型网站架构的演化历程 初始阶段网站架构,一台服务器, 一台Server就部署-应用程序.数据库.文件等所有资源都集中在一台Server上,典型案例:基于LAMP架构的PHP网站 应用服务和数据库服务分离, 三台Server平天下-业务发展,单台不再适应业务的发展,

大型网站架构演化历程

大型网站的挑战主要来自庞大的用户,高并发的访问和海量数据,任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户,问题就会变得棘手.大型网站架构主要就是解决这类问题. 本文内容大部分来自<大型网站技术架构>,这本书很值得一看,强烈推荐. 大型网站系统的特点 高并发,大流量 需要面对高并发用户,大流量访问.Google 日均 PV 35 亿,日 IP 访问数 3 亿:腾讯 QQ 的最大在线用户数 1.4 亿(2011年数据). 高可用 系统 7 x 24 小时不间断服务. 海量数据 需要存