所谓网站的伸缩性是指不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务处理能力。

京东网(www.360buy.com )在2011年年末的图书促销活动中,由于优惠幅度大引得 大量买家访问,结果导致网站服务不可用,大部分用户在提交订单后,页面显示“Service
is too busy\当天晚上,京东网老板刘强东在微博发布消息称,已购买多台服务器以增加交易处理能力,第二天继续促销一天。结果第二天,用户在提交订单后,页面继续是
"Service is too busy"o显然京东网当时的系统伸缩能力较弱,特别是订单处理子系统几乎 没有什么伸缩能力。

与这些缺乏伸缩能力、关键时候掉链子的案例相对应的是淘宝网2012年“双十一” 的促销活动,在活动开始的第一分钟,即有1000万独立用户访问网站,当天成功交易的 订单总额达191亿,虽然淘宝网及支付宝网站岀现了一些问题,但系统总体可用,绝大 部分交易顺利完成。

大型网站的“大型”,在用户层面可以理解为大量用户及大量访问,如Facebook有超过10亿用户;在功能方面可以理解为功能庞杂、产品众多,如腾讯有超过1600种产品;在 技术层面可以理解为网站需要部署大量的服务器,如Google大约有近100万台服务器。

曾经讨论过,大型网站不是一开始就是大型网站的,而是从小型网站逐步 演化而来的,Google诞生的时候也才只有一台服务器。设计一个大型网站或者一个大型 软件系统,和将一个小网站逐渐演化成一个大型网站,其技术方案是完全不同的。前者 如传统的银行系统,在设计之初就决定了系统的规模,如要服务的用户数、要处理的交 易数等,然后采购大型计算机等昂贵的设备,将软件系统部署在上面,即成为一个大型 系统,有朝一日这个大型系统也不能满足需求了,就花更多的钱打造一个更大型的系统。而网站一开始不可能规划出自己的规模,也不可能有那么多钱去开发一个大型系统,更 不可能到了某个阶段再重新打造一个系统,只能摸着石头过河,从一台廉价的PC服务器 开始自己的大型系统演化之路。

在这个渐进式的演化过程中,最重要的技术手段就是使用服务器集群,通过不断地向集群中添加服务器来增强整个集群的处理能力。这就是网站系统的伸缩性架构,只要 技术上能做到向集群中加入服务器的数量和集群的处理能力成线性关系,那么网站就可 以以此手段不断提升自己的规模,从一个服务几十人的小网站发展成服务几十亿人的大 网站,从只能存储几个G图片的小网站发展成存储几百P图片的大网站。这个演化过程总体来说是渐进式的,而且总是在“伸”,也就是说,网站的规模和服务器的规模总是在不断扩大(通常,一个需要“缩”的网站可能已经无法经营下去了)。但是这个过程也可能因为运营上的需要而出现脉冲,比如前面案例中提到的电商网站的 促销活动:在某个短时间内,网站的访问量和交易规模突然爆发式增长,然后又回归正 常状态。这时就需要网站的技术架构具有极好的伸缩性一一活动期间向服务器集群中加 入更多服务器(及向网络服务商租借更多的网络带宽)以满足用户访问,活动结束后又 将这些服务器下线以节约成本。

国内有许多传统企业“触网”,将传统业务搬上互联网,这是一件值得称道
的事,传统行业与互联网结合将会创造出新的经济模式,改善人们的生活。但遗 憾的是,有些传统企业将自己的管理模式和经营理念也照搬到互联网领域一一在 技术方面的表现就是一开始就企图打造一个大型网站。

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


1 不同功能进行物理分离实现伸缩

网站发展早期——通过增加服务器提高网站处理能力时,新增服务器总是从现有服 务器中分离出部分功能和服务,如图6.1所示。

每次分离都会有更多的服务器加入网站,使用新增的服务器处理某种特定服务。事 实上,通过物理上分离不同的网站功能,实现网站伸缩性的手段,不仅可以用在网站发 展早期,而且可以在网站发展的任何阶段使用。具体又可分成如下两种情况。

纵向分离(分层后分离):将业务处理流程上的不同部分分离部署,实现系统伸缩性,
如图6.2所示。

横向分离(业务分割后分离):将不同的业务模块分离部署,实现系统伸缩性。

横向分离的粒度可以非常小,甚至可以一个关键网页部署一个独立服务,比如对于 电商网站非常重要的产品详情页面,商铺页面,搜索列表页面,每个页面都可以独立部 署,专门维护。


2 单一功能通过集群规模实现伸缩

将不同功能分离部署可以实现一定程度的伸缩性,但是随着网站访问量的逐步增加, 即使分离到最小粒度的独立部署,单一的服务器也不能满足业务规模的要求。因此必须 使用服务器集群,即将相同服务部署在多台服务器上构成一个集群整体对外提供服务。

当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来 拉车。

以搜索服务器为例,如果一台服务器可以提供每秒1000次的请求服务,即QPS (Query Per Second )为1000o那么如果网站高峰时每秒搜索访问量为10000,就需要部署 10台服务器构成一个集群。若以缓存服务器为例,如果每台服务器可缓存40GB数据, 那么要缓存100GB数据,就需要部署3台服务器构成一个集群。当然这些例子的计算都 是简化的,事实上,计算一个服务的集群规模,需要同时考虑其对可用性、性能的影响 及关联服务集群的影响。

具体来说,集群伸缩性又可分为应用服务器集群伸缩性和数据服务器集群伸缩性。这两种集群由于对数据状态管理的不同,技术实现也有非常大的区别。而数据服务器集 群也可分为缓存数据服务器集群和存储数据服务器集群,这两种集群的伸缩性设计也不 大相同。

17 网站架构的伸缩性设计相关推荐

  1. 大型网站的可伸缩性架构如何设计?

    1. 网站架构的伸缩性设计 1.1. 不同功能进行物理分离实现伸缩 纵向分离(分层后分离):将业务处理流程上的不同部分分离部署,实现系统伸缩性. 横向分离(业务分割后分离):将不同的业务模块分离部署, ...

  2. 高并发的大型网站架构设计

    最近在学习大型网站的架构设计,便想把学习过程中的一些东西总结记录下来,以便复习和巩固提高.先来看看大型网站架构图: 从左边开始,先是CDN服务器和反向代理服务器,都用于缓存一些用户需要请求的资源.两者 ...

  3. 大型门户网站的可伸缩性架构设计

    大型门户网站的可伸缩性架构设计   2009-12-28 来源:网络   我们知道,对于一个大型门户网站来说,可伸缩性是非常重要的,怎么样在纵向和横向有良好的可伸缩性,就需要在做架构设计的时候考虑到一 ...

  4. 高并发高流量的大型网站架构设计

    Web2.0的兴起,掀起了互联网新一轮的网络创业大潮.以用户为导向的新网站建设概念,细分了网站功能和用户群,不仅成功的造就了一大批新生的网站,也极大的方便了上网的人们.但Web2.0以用户为导向的理念 ...

  5. [转]高并发高流量网站架构设计(参考)

    高并发高流量网站架构设计(参考) 2009-11-24 16:19:58 来自: sharp(follow my heart) 目 录 1引言9 1.1互联网的发展9 1.2互联网网站建设的新趋势9 ...

  6. 优酷 YouTube Twitter及JustinTV视频网站架构设计笔记

    本文是整理的关于优酷.YouTube.Twitter及JustinTV几个视频网站的架构或笔记,对于不管是视频网站.门户网站或者其它的网站,在架构上都有一定的参考意义,毕竟成功者的背后总有值得学习的地 ...

  7. 优酷、YouTube、Twitter及JustinTV视频网站架构设计笔记

    摘自:http://www.csdn.net/article/2012-11-23/2812183-JustinTV_real-time_architecture 本文是整理的关于优酷.YouTube ...

  8. 优酷、YouTube、Twitter及JustinTV视频网站架构设计

    优酷视频网站架构 一.网站基本数据概览 据2010年统计,优酷网日均独立访问人数(uv)达到了8900万,日均访问量(pv)更是达到了17亿,优酷凭借这一数据成为google榜单中国内视频网站排名最高 ...

  9. 网站架构设计发展路径学习

    1.系统概况图 图1.1 系统架构概况图 图1.2 较为完整的系统架构图 2.系统使用的主要技术 下列排名不分先后 2.1前端 JavaScript,html,css,silverlight,flas ...

最新文章

  1. ajax+lucene pdf,基于Ajax/Lucene的站内搜索技术研究
  2. 盯住未来!揭秘英特尔的AI芯片生意
  3. 还记得那个提速8倍的IDEA插件吗?VS Code版本也发布啦!
  4. opengl 纹理贴到对应的位置_一步步学OpenGL(27) -《公告牌技术与几何着色器》
  5. Angular之ngx-permissions安装入门
  6. linuxliveu盘怎么用_施耐德LMC058 plc用U盘怎么传输程序?
  7. UI:使用 pod 引入 AFNetworking
  8. 正则表达式30分钟入门教程(转载)
  9. jdk LinkedList源码解析
  10. 博客平台、Markdown编辑器与hexo admin简介
  11. Xfce4里添加登录后程序自动运行
  12. 情人节那点事,Power BI告诉你
  13. Java连接数据库实现增删改;查。
  14. 《深入理解JAVA虚拟机》周志明 第三版 - 第三章 垃圾收集器与内存分配策略
  15. 《Python黑帽子》python3代码实现(第五章)
  16. 2022电工(中级)操作证考试题库及模拟考试
  17. Kinect与TOF、双目、结构光相机比较相机国产、非国产统计参数对比分析
  18. Kafka服务器命令总结
  19. 今年建筑工程设计乙级资质办理申报流程
  20. GEA 3.2 C/C++ 的数据、代码及内存

热门文章

  1. 华为 组播之IGMPv2、IGMPv3
  2. 【Python】基础入门
  3. CClientDC 和 CDC 的区别
  4. Maemo Linux手机平台系列分析:(16) Maemo应用开发: GTK+基础
  5. android+手机管家,腾讯手机管家—QQ微信保护
  6. 君润人力,用技术提升整体人资效益
  7. Fortity 安全评测结果及解决方案
  8. EPSON RX8010SJ RTC 调试笔记之五, 固定周期定时中断功能 (Fixed-cycle Timer Interrupt Function)
  9. 指定DIV局部刷新的简单实现,很简单,但是网上搜到的大部分都很复杂
  10. Mac的Finder访达中如何显示~系统根目录