一、大型网站架构设计

转载 2016年05月31日 16:03:12

一、大型网站架构设计

1.  架构

为了考虑web架构的伸缩性,扩展性及重用性,目前许多大型门户网站及大平台,均大量采用中间件的设计,中间件又细分为业务流中间件,服务中间件,消息队列中间件,缓存中间件,数据库中间件等。

大型网站架构设计

整个架构是分层的分布式的架构,纵向包括CDN,负载均衡/反向代理,web应用,业务层,基础服务层,数据存储层。水平方向包括对整个平台的配置管理部署和监控。

2.  设计思路

1)  空间换时间

多级缓存,静态化

Ø  客户端页面缓存(http header中包含Expires/Cache of Control,last modified(304,server不返回body,客户端可以继续用cache,减少流量),ETag)

Ø  反向代理缓存

Ø  应用端的缓存(memcache)

Ø  内存数据库

Ø  Buffer、cache机制(数据库,中间件等)

索引

Ø  哈希索引适合综合数组的寻址和链表的插入特性,可以实现数据的快速存取。

Ø  B树索引适合于查询为主导的场景,避免多次的IO,提高查询的效率。

Ø  倒排索引实现单词到文档映射关系的最佳实现方式和最有效的索引结构,广泛用在搜索领域。

Ø  Bitmap是一种非常简洁快速的数据结构,他能同时使存储空间和速度最优化(而不必空间换时间),适合于海量数据的的计算场景。

2)  并行与分布式计算

任务切分、分而治之(MR)

在大规模的数据中,数据存在一定的局部性的特征,利用局部性的原理将海量数据计算的问题分而治之。

MR模型是无共享的架构,数据集分布至各个节点。处理时,每个节点就近读取本地存储的数据处理(map),将处理后的数据进行合并(combine)、排序(shuffle and sort)后再分发(至reduce节点),避免了大量数据的传输,提高了处理效率。

多进程、多线程并行执行(MPP)

并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器/进程/线程来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。

和MR的区别在于,它是基于问题分解的,而不是基于数据分解。

3)  多维度的可用

负载均衡、容灾、备份

随着平台并发量的增大,需要扩容节点进行集群,利用负载均衡设备进行请求的分发;负载均衡设备通常在提供负载均衡的同时,也提供失效检测功能;同时为了提高可用性,需要有容灾备份,以防止节点宕机失效带来的不可用问题;备份有在线的和离线备份,可以根据失效性要求的不同,进行选择不同的备份策略。

读写分离

读写分离是对数据库来讲的,随着系统并发量的增大,提高数据访问可用性的一个重要手段就是写数据和读数据进行分离;当然在读写分离的同时,需要关注数据的一致性问题;对于一致性的问题,在分布式的系统CAP定量中,更多的关注于可用性。

依赖关系

平台中各个模块之间的关系尽量是低耦合的,可以通过相关的消息组件进行交互,能异步则异步,分清楚数据流转的主流程和副流程,主副是异步的,比如记录日志可以是异步操作的,增加整个系统的可用性。

当然在异步处理中,为了确保数据得到接收或者处理,往往需要确认机制(confirm、ack)。

但是有些场景中,虽然请求已经得到处理,但是因其他原因(比如网络不稳定),确认消息没有返回,那么这种情况下需要进行请求的重发,对请求的处理设计因重发因素需要考虑幂等性。

监控

监控也是提高整个平台可用性的一个重要手段,多平台进行多个维度的监控;模块在运行时候是透明的,以达到运行期白盒化。

4)  伸缩

拆分

拆分包括对业务的拆分和对数据库的拆分。

系统的资源总是有限的,一段比较长的业务执行如果是一竿子执行的方式,在大量并发的操作下,这种阻塞的方式,无法有效的及时释放资源给其他进程执行,这样系统的吞吐量不高。

需要把业务进行逻辑的分段,采用异步非阻塞的方式,提高系统的吞吐量。

随着数据量和并发量的增加,读写分离不能满足系统并发性能的要求,需要对数据进行切分,包括对数据进行分库和分表。这种分库分表的方式,需要增加对数据的路由逻辑支持。

无状态

对于系统的伸缩性而言,模块最好是无状态的,通过增加节点就可以提高整个的吞吐量。

5)  优化资源利用

系统容量有限

系统的容量是有限的,承受的并发量也是有限的,在架构设计时,一定需要考虑流量的控制,防止因意外攻击或者瞬时并发量的冲击导致系统崩溃。在设计时增加流控的措施,可考虑对请求进行排队,超出预期的范围,可以进行告警或者丢弃。

原子操作与并发控制

对于共享资源的访问,为了防止冲突,需要进行并发的控制,同时有些交易需要有事务性来保证交易的一致性,所以在交易系统的设计时,需考虑原子操作和并发控制。

保证并发控制一些常用高性能手段有,乐观锁、Latch(锁?)、mutex(互斥锁)、写时复制、CAS等;多版本的并发控制MVCC通常是保证一致性的重要手段,这个在数据库的设计中经常会用到。

基于逻辑的不同,采取不一样的策略

平台中业务逻辑存在不同的类型,有计算复杂型的,有消耗IO型的,同时就同一种类型而言,不同的业务逻辑消耗的资源数量也是不一样的,这就需要针对不同的逻辑采取不同的策略。

针对IO型的,可以采取基于事件驱动的异步非阻塞的方式,单线程方式可以减少线程的切换引起的开销,或者在多线程的情况下采取自旋锁spin的方式,减少对线程的切换(比如oracle latch设计);对于计算型的,充分利用多线程进行操作。

同一类型的调用方式,不同的业务进行合适的资源分配,设置不同的计算节点数量或者线程数量,对业务进行分流,优先执行优先级别高的业务。

容错隔离

系统的有些业务模块在出现错误时,为了减少并发下对正常请求的处理的影响,有时候需要考虑对这些异常状态的请求进行单独渠道的处理,甚至暂时自动禁止这些异常的业务模块。

有些请求的失败可能是偶然的暂时的失败(比如网络不稳定),需要进行请求重试的考虑。

资源释放

系统的资源是有限的,在使用资源时,一定要在最后释放资源,无论是请求走的是正常路径还是异常的路径,以便于资源的及时回收,供其他请求使用。

在设计通信的架构时,往往需要考虑超时的控制。

 

Lucene实践(二):Lucene总体设计架构

Lucene总的来说是:一个高效的,可扩展的,全文检索库。全部用Java实现,无须配置。仅支持纯文本文件的索引(Indexing)和搜索(Search)。不负责由其他格式的文件抽取纯文本文件,或从网络...
  • zmx729618
  • zmx729618
  • 2016年10月26日 15:14
  • 333

架构设计的指导思想——总结《大型网站技术架构:核心原理与案例分析》一书

本文分为两大部分,9个架构模式和8个架构要素。9个架构模式分别是分层,分割,分布式,集群,缓存,异步,冗余,自动化,安全。8个架构要素分别是性能,可用性,可伸缩,可扩展,安全,成本,可维护,可移植。 ...
  • zhouqinuan
  • zhouqinuan
  • 2017年05月16日 21:34
  • 199

大型网站数据库优化及浅析大型网站的架构(转)

大型网站数据库优化千万人同时访问的网站,一般是有很多个数据库同时工作,说明白一点就是数据库集群和并发控制,这样的网站实时性也是相对的。这些网站都有一些共同的特点:数据量大,在线人数多,并发请求多,pa...
  • iflash50
  • iflash50
  • 2009年06月19日 10:09
  • 11335

基于Java技术的大型网站架构设计方案

基于Java技术的大型网站架构设计方案 笑游江湖 发表于 2014-03-16 16:56:00 | 分类标签: 网站架构 JAVA 高并发 1、Web层 主体架构可以基于 Struts 1...
  • JackieLiuLixi
  • JackieLiuLixi
  • 2014年05月23日 17:24
  • 15582

大型网站技术架构(六)网站的伸缩性架构

网站系统的伸缩性架构最重要的技术手段就是使用服务器集群功能,通过不断地向集群中添加服务器来增强整个集群的处理能力。“伸”即网站的规模和服务器的规模总是在不断扩大。 1、网站架构的伸缩性设计 网...
  • u012562943
  • u012562943
  • 2015年12月25日 16:23
  • 1255

大型网站架构设计

 
  • Diogin
  • Diogin
  • 2007年07月25日 20:58
  • 24943

大型网站的架构设计图分享-转

大型网站的架构设计图分享-转 近段时间以来,通过接触有关海量数据处理和搜索引擎的诸多技术,常常见识到不少精妙绝伦的架构图。除了每每感叹于每幅图表面上的绘制的精细之外,更为架构图背后所隐藏的设计思...
  • h348592532
  • h348592532
  • 2015年05月20日 17:49
  • 1209

大型网站架构设计及技术分析(一)

一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美 化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网...
  • wnety
  • wnety
  • 2011年07月04日 13:17
  • 941

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

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

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

大型网站技术架构:核心原理与案例分析》作者是拥有核心技术部门的一线工作经验,直接体验了大型网站构建与发展过程中的种种生与死,蜕与变,见证了一个网站架构从幼稚走向成熟稳定的历程。   没有晦涩难懂的术语...
  • Cloud_Strife_1985
  • Cloud_Strife_1985
  • 2015年03月01日 13:57
  • 1836
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一、大型网站架构设计
举报原因:
原因补充:

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