第一篇、概述3~大型网站核心架构要素

原创 2016年05月30日 10:59:31

关于什么是架构,一种比较通俗的说法是“最高层次的规划,难以改变的决定”,这些规划和决定奠定了事物未来发展的方向和最终的蓝图。

具体到软件架构,维基百科是这样定义的:“有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计”。一般来说,除了系统的功能需求外,软件架构还需要关注 性能可用性伸缩性扩展性安全性这5个架构要素。

1. 性能

性能是网站的一个重要指标,除非是没得选择(比如12306大笑),否则用户无法忍受一个响应缓慢的网站。一个打开缓慢的网站会导致严重的用户流失,很多时候网站性能是网站架构升级优化的触发器。

优化网站性能的手段非常多,从用户浏览器到数据库,影响用户请求的所有环节都可以进行性能优化。

  • 浏览器端,可以通过浏览器缓存、使用页面压缩、合理布局页面、减少Cookie传输等手段改善性能。
  • 使用 CDN 和 反向代理服务器(前一篇文章中有介绍)
  • 在应用服务器端,使用服务器本地缓存和分布式缓存
  • 异步操作,将用户请求发送至消息队列等待后续任务处理
  • 在高并发情况下,将多台应用服务器组成一个集群共同对外服务,提高整体处理能力,改善性能
  • 代码层面,可以通过使用多线程、改善内存管理等手段优化性能
  • 数据库服务器端,索引、缓存、SQL优化等性能优化手段都已经比较成熟;而NoSQL数据库通过优化数据模型、存储结构、伸缩性等手段在性能方面的优势也日趋明   显。
衡量网站性能有一系列指标:响应时间、TPS、系统性能计数器等,通过监控这些指标可以分析系统瓶颈,预测网站容量,并对异常指标进行报警,保障系统可用性。对于网站而言,性能符合预期仅仅是必要条件,因为无法预知网站可能会面临的访问压力,所以必须要考察系统在高并发访问情况下,超出负载设计能力的情况下可能会出现的性能问题。网站需要长时间持续运行,还必须保证系统在持续运行且访问压力不均匀的情况下保持稳定的性能特性。

2. 可用性

大型网站几乎都承诺7x24小时可用,但事实上任何网站都不可能达到完全的7x24可用,总会有一些故障时间,扣除这些故障时间就是网站的总可用时间,这个时间换算成网站的可用性指标,以此衡量网站的可用性。一些知名的大型网站可以做到99.99%以上的可用性。
大型网站通常会有上万台服务器,每天必定会有一些服务器宕机,因此网站高可用架构设计的前提是必然会出现服务器宕机,而高可用设计的目标就是当服务器宕机的时候,服务或者应用依然可用。
网站高可用的主要手段是冗余,应用部署在多台服务器上同时提供访问,数据存储在多台服务器上互相备份,任何一台服务器宕机都不会影响应用的整体可用,也不会导致数据丢失。
对于应用服务器而言,多台服务器用过负载均衡设备组成一个集群共同对外提供服务,任何一台服务器宕机,只需把请求切换到其他服务器就可实现应用的高可用,但是一个前提条件是:应用服务器上不能保存请求的会话信息,否则服务器宕机,会话丢失,即使将用户请求转发到其他服务器上也无法完成业务处理。
对于存储服务器,由于其上存储着数据,需要对数据进行实时备份,当服务器宕机时,需要将数据访问转移到可用的服务器上,并进行数据恢复以保证继续有服务器宕机的时候数据依然可用。
除了运行环境,网站的高可用还需要软件开发过程的质量保证。通过预发布验证、自动化测试、自动化发布、灰度发布等手段,减少将故障引入线上环境的可能,避免故障范围扩大。
衡量一个系统架构设计是否满足高可用的目标,就是假设系统中任何一台或者多台服务器宕机时,以及出现各种不可预期的问题时,系统整体是否依然可用。

3. 伸缩性

所谓伸缩性,是指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。
衡量架构伸缩性的主要标准就是:是否可以用多台服务器构建集群,是否容易向集群中添加新的服务器。加入新的服务器后是否可以提供和原来的服务器无差别的服务。集群中可容纳的总的服务器数量是否有限制。
对于应用服务器集群,只要服务器上不保存数据,所有服务器都是对等的,通过使用合适的负载均衡设备就可以向集群中不断加入服务器。
对于缓存服务器集群,加入新的服务器可能会导致缓存路由失效,进而导致集群中大部分缓存数据都无法访问。虽然缓存的数据可以通过数据库重新加载,但是如果应用已经严重依赖缓存,可能会导致整个网站崩溃。需要改进缓存路由算法保证缓存数据的可访问性
关系型数据库虽然支持数据复制,主从热备等机制,但是很难做到大规模集群的可伸缩性,因此关系型数据库的集群伸缩性方案必须在数据库之外实现,通过路由分区等手段将部署有多个数据库的服务器组成一个集群
至于大部分 NoSQL 数据库产品,由于其先天就是为海量数据而生,因此其对伸缩性的支持通常都非常好,可以做到在较少运维参与的情况下实现集群规模的线性伸缩。

4. 扩展性

不同于上面几个架构要素,网站的扩展性架构直接关注网站的功能需求衡量网站架构扩展性好坏的主要标准就是在网站增加新的业务产品时,是否可以实现对现有产品透明无影响,不需要任何改动或者很少改动既有业务功能就可以上限新产品。
网站可扩展架构的主要手段是 事件驱动架构 和 分布式服务
事件驱动架构在网站通常利用消息队列实现,将用户请求和其他业务事件构造成消息发布到消息队列,消息的处理者作为消费者从消息队列中获取消息进行处理。通过这种方式将消息产生和消息处理分离开来,可以透明地增加新的消息生产者任务或者新的消息消费者任务
分布式服务则是将业务和可复用服务分离开来,通过分布式服务框架调用。新增产品可以通过调用可复用的服务实现自身的业务逻辑,而对现有产品没有任何影响。可复用服务升级变更的时候,也可以通过提供多版本服务对应用实现透明升级,不需要强制应用同步变更

5.安全性

网站的安全架构就是保护网站不受恶意访问和攻击,保护网站的重要数据不被窃取。
衡量网站安全架构的标准就是针对现存和潜在的各种攻击手段与窃密手段,是否有可靠的应对策略。

版权声明:本文为博主原创文章,未经博主允许不得转载。

大型网站技术架构(三)--架构核心要素

大型网站技术架构(一)--大型网站架构演化 大型网站技术架构(二)--架构模式        所谓架构,一种通俗的说法就是“最高层次的规划,难以改变的决定”,这些规划和决定奠定了事物未来发...
  • MINEZHANGHAO
  • MINEZHANGHAO
  • 2014年05月26日 08:35
  • 6769

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

大型网站架构演化 大型网站软件系统的特点 大网站架构演化发展历程 初始阶段的网站架构 应用服务和数据服务分离 使用缓存改善网站性能 使用应用服务器集群改善网站的并发处理能力 数据库读写分离 使用反向代...
  • hubinqiang
  • hubinqiang
  • 2016年04月05日 00:53
  • 3974

读-李智慧-大型网站技术架构:核心原理与案例分析

网站构架演进 大型网站的特点 架构演化历程 价值观 架构模式 分层 分割 分布式 集群 缓存 异步 冗余 自动化 安全 性能 性能测试 web前端性能优化 应用服务器性能优化 存储性能优化 可用性 可...
  • xiaoxufox
  • xiaoxufox
  • 2016年11月24日 09:22
  • 2752

大型网站技术架构:核心原理与案例分析pdf

下载地址:网盘下载 编辑推荐 编辑 本书作者是阿里巴巴网站构建的亲历者,拥有核心技术部门的一线工作经验,直接体验了大型网站构建与发展过程中的种种生与死,蜕与变,见证了一个网站架构从幼稚...
  • cf406061841
  • cf406061841
  • 2017年07月22日 17:00
  • 921

《大型网站技术架构:核心原理与案例分析》读书笔记

由于网站的访问流量是缓慢增长的(PS除了垄断的12306),所以一般网站的架构也是不断的演化的,没有一开始就搞出个支持大并发的网站。无论从开发到发布的时间、消耗的资源上来看,或者是说从开发、维护的难度...
  • ysu108
  • ysu108
  • 2016年07月12日 10:21
  • 655

读《大型网站技术架构:核心原理与案例分析+李智慧》记一

震惊知识一: 小型网站的设计: 应用程序、数据库、文件在同一台服务器上,通常服务器操作系统使用Linux,应用程序使用PHP开发,数据库使用MySql随着网站业务的发展,一台服务器不能满足...
  • qq_17165717
  • qq_17165717
  • 2016年01月29日 21:27
  • 512

大型网站核心架构要素

一般来说软件架构需要关注性能、可用性、伸缩性、扩展性和安全性这5个架构要素。 1、性能       性能是网站架构设计的一个重要方面,任何软件架构设计方案都必须考虑可能带来的性能问题。也正因为...
  • xuepeiyu123
  • xuepeiyu123
  • 2017年02月03日 16:02
  • 51

大型网站核心架构要素

1、性能: 性能是网站的一个重要指标。性能主要的优化方式有如下: 浏览器端,使用浏览器缓存,减少http协议,减少cookie传输、页面压缩、合理的页面布局。 还可以使用CDN缓存,...
  • xuzf_yeying
  • xuzf_yeying
  • 2017年12月17日 19:54
  • 22

大型网站【核心架构要素】

很多人都说架构架构那到底什么是架构?记住:最高层次的规划,难以改变的决定,这些规划和决定奠定了事务未来发展的方向和最终的蓝图。当然了从这个意义上来说,人生规划也是一种架构,比如我们选择什么学校,学习什...
  • pangchengyong0724
  • pangchengyong0724
  • 2016年08月24日 21:29
  • 435

大型网站核心架构要素

非业务功能,还要关注性能,可用性,伸缩性,可扩展性,安全性五个要素。性能浏览器端可以浏览器缓存,压缩页面(gzip),合理布局页面,减少cookie传输等手段。 CDN, 将静态内容分发到网络机房,网...
  • three_man
  • three_man
  • 2015年10月09日 17:27
  • 10784
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第一篇、概述3~大型网站核心架构要素
举报原因:
原因补充:

(最多只允许输入30个字)