`
923723914
  • 浏览: 653942 次
文章分类
社区版块
存档分类
最新评论

WEB服务基础架构的演变

 
阅读更多

谈谈WEB服务基础架构的演变

前言:

上次谈了一些语义网应用发展的趋势的个人看法(见 我对语义网(Semantic Web)应用发展的一些看法),这次我们回过头来看看随着web应用的不断发展,其下作技术支撑的基础架构的演变趋势。

Web应用的通用基础服务平台包含数据存储、分布计算、消息通讯、安全认证等等多方面内容。我这里不去一一谈到(很多我也不熟悉,呵呵!),而是有重点的谈谈随目前web应用规模化之后变的尤为突出的——“数据存储平台”和“数据分布计算平台”的架构特点。

第一部分:WEB应用中的数据存储架构

过去我们要想去搭建个一般网站,数据存储方面无需多想,直接使用mysql,sql2000等关系数据库就绰绰有余。但是当前的大规模web应用往往传统的关系数据库就有些力不从心了。究其原因是因为大规模web应用数据存储、访问、和数据组织上出现的一些的新特点:

• 数据存储特点 —— 数据量很大!远超过了传统单机关系数据库容纳的能力。

• 数据访问方式 —— 并发压力很大,需要承受并发访问能力强;重视系统的可用性,可适当牺牲数据一致性这些特性有的和传统关系数据库设计初衷有相悖之处

• 数据的组织特点 —— 更多的非结构化数据和半结构化数据,而非关系数据库擅长的结构化数据。

下面我们具体来看看这些新特性,以及架构上需要进行的改变。

WEB应用的数据存储需求和对策

需求很简单,归纳起来,有三点中重要:

Ø 支持海量数据 —— 互联网应用作为全球化应用,其数据量变的越来越大(可想像一下,动暨数以白亿计的网页内容需要多大的存储容量)。

Ø 支持方便扩容 —— 当你需要更多机器支持存储需要时,要能方便快速和安全的——尽量不影响或者少影响业务——进行存储扩容。

Ø 保证数据可靠性 —— 数据就是财富,马虎不得。互联网企业往往为了成本而使用大量的廉价机器做存储,其稳定性自然不能和实验室的高性能存储服务器相比,所以机器故障的风险高了许多。

Ø

存储架构上的相应对策如下:

1 支持海量数据最直接方法是分布存储。分布存储方法很多,最简单的就是对数据做分区(Partation)。

2 扩容目标是将一台机器的数据劈开,从而将一部分转移到新添加的存储点上。要降低存储扩容对系统服务的影响有很多策略——按分区逐步扩容,这样只会影响该分区的数据访问;还有就是避免劈表(劈表往往需要扫表并对数据重新组织这种耗时的重运算)所采用的数据分段方式(也就是在一台机器内再进行更细的数据分区),如此一来避免了避表,只需要将部分段迁移就可。Amzon 的Dynamo的系统就是采用该方法(具体描述可见前文对云计算中几种基础设施(Dynamo,Bigtable,Map/Reduce等)的朴素看法)。

3 数据可靠性保证一般采用多副本技术——一份数据同时在不同机器上存储几个相同副本(不但有利于实现数据冗余存储,而且还能起到负载均衡作用)。比如对一份数据存储3个副本,那么三台机器同期发生故障的机会几乎没有,所以大可认为该数据是安全的。

WEB应用的数据访问需求和对策

Web数据的访问的主要特点可归纳如下:

Ø 高并发访问,尤其是读优先。

Ø 高可用性——系统访问服务不中断(对互联网应用来说这点往往是被重点强调的)。

Ø 较高的容错要求——系统要求能容忍一定程度的网络链接故障、网络分区故障、机器故障。因为机器多了、分布广了出问题的概率也多得多了。

Ø 数据访问并非需要严格一直性。

存储架构上的相应对策如下:

最大的技术策略是放弃传统数据访问所要求的 ACID 特性而遵循 BASE + CAP特性—— 所谓ACID 是指:DBMS强调ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性 (Durability)。这些特性保证数据的一致性和安全性,但实现起来必然降低了系统的可用性和访问速度。 因而现在普遍认可的方向是保证可用性和速度,而放弃一定的数据一致性和安全性(互联网应用中多数数据是可再生的,或者容忍错误的,不要求那么准)。BASE + CAP正式这种策略的抽象含义。BASE 是指:基本可用(Basically Availble);软状态(Soft-state);最终一致性(Eventual Consistency )。CAP特性是指:一致性(Consistency);可用性(Availability);分区容忍性(Tolerance of network Partition)等三个需求无法同时满足,必须有取舍。(如果不熟悉这些概念去google 找找吧,尤其是最终一致性这点最为精彩,可参看http://www.allthingsdistributed.com/2007/12/eventually_consistent.html)

为了提高系统吞吐和数据安全,上面我们谈到使用副本技术。而副本系统的访问策略则有一些不同选择。罗列一下吧!

副本传播方式可有——同步方式和异步方式,所谓同步方式是说写入所有副本到给定点需要同步完成;而异步方式则是先写一份到某个点上,然后该点将在延后一定时刻后才将其传播到其它点上。显然同步方式更安全、各副本数据一致性,但可用性低(如果严格同步要求,则是一个点死掉,则写操作即认为失败)、效率低。而异步则效率高(可合并数个请求再一次传播)、可用性高(不要求所有待写入点都严格可用)、但各副本会有一个不一致窗口(因为数据有可能还没传播完成)。

访问逻辑控制方式可有—— 多master 和单master 方式。多master是指每个副本存储点都可接受读写请求,且由其控制传播逻辑。而单master则只能有制定的点负责接收请求,其他点只负责接收master传播过来的读写请求。显然多master效率更高,但更需要控制请求顺序,修正数据冲突。——往往需要借助诸如“数据核对”、“集中决算”等副本冲突解决机制。而单master由于读写都在一个点上串行化了,因此不用解决数据冲突,但缺点就是效率低。

上述四个方式可相互组合,各有利弊。你需要根据自己的应用情况,来选择合适的策略组合。(上述的各种技术google上都能找到丰富资料!)

WEB数据组织特点

WEB数据的组织特性可归纳如下:

1.非结构化和半结构化数据 —— web数据常常属于这种无明确schema的数据。它们字段稀疏、字段个数目不定、且字段可不断演化。

2.有向图的点边关系描述 —— 诸如朋友关系等信息,更适合有向图存储,而非关系数据库。

存储架构上的相应对策如下:

1 使用Truple space的方法存储非结构化数据。Truple space的特点是一条记录可包含任意多的属性值(muti map类似)。这和关系数据库不同,你的记录可以无固定的schema,因此很合适存储非机构化数据(目前amzon 的simpledb就是采用了此结构完成存储)

2 另外数据组织也更面向列。因为web数据挖掘更多不需要使用整条记录,而一般仅仅需要其中部分列就够了。另外web数据的产生也多是按列产生,而非一次就将以整条记录全部写入。由于这些原因,将数据按列组织、顺序存放数据更有利于磁头移动效率,也就是更有利于存储效率。

3 采用面向图的数据库。图数据库更有利于描述对象关系,而且很方便按照关系来遍历数据,对很多web应用更有效(代表例子是neo4j项目)。

另外要说明,WEB应用中的数据的检索要求一般较传统应用中低一些,很多情况下不需要支持join等多表间的联合操作。所以上述组织结构能满足大多数需求了。

第二部分:海量计算架构

当前大规模web应用的需要大量的计算能力(可想像一下page rank的计算量),显然单机已经提供这种计算力,所以计算自然需要采用分布计算。

分布计算的关键问题有两点:

1 算法是否可以划分成独立部分,以便能做分布计算。

2 获取计算数据以及中间结果存储代价很高,因为海量数据的读取会带来沉重的IO压。

对于这两个特点,目前采用的普遍架构是—— Map/Reduce架构,其概括来讲就是将计算划分成子计算,然后将计算程序下发到数据存储节点,就地进行计算——以减少IO消耗——后在合并出最终结果。(这并非一个创新思想,很久之前就有诸多尝试:比如IBM曾经搞国一个叫Aglet的移动代理项目,就是将计算程序下发到各节点计算和收集信息)。 Map就是划分任务阶段,reduce则是合并任务阶段;而任务划分是放到存储点进行本地计算的,最后再把这些中间结果交给reduce计算得到最终结果的。(关于这方面的资料请去看hadoop的开源实现吧)

分享到:
评论

相关推荐

    WEB网站千万级访问架构演变之路

    ### WEB网站千万级访问架构演变之路 #### 一、引言 随着互联网技术的发展与普及,网站访问量呈现爆发式增长。为了应对这种变化,网站架构必须经历一系列的演变过程来适应不同规模的访问需求。从最初简单的单机模式...

    BS系统架构演变策略

    首先,架构演变的第一步是**物理分离Web服务器和数据库**。在网站初期,应用和数据库可能部署在同一台服务器上,但随着访问量增加,这种部署方式会导致性能瓶颈和相互影响。为了解决这个问题,将Web服务器和数据库...

    大型网站架构演变文档

    #### 架构演变第一步:物理分离Web服务器与数据库 **背景**:随着网站的逐步发展,最初的单一主机难以应对不断增长的访问量及由此产生的性能瓶颈。 **解决方案**:将Web服务器与数据库分离至不同的物理服务器。 *...

    详解:大型网站架构演变和知识体系

    #### 架构演变的第一步:物理分离Web服务器与数据库 在网站初创阶段,通常是通过租用或托管单一服务器的方式搭建基础架构。随着时间推移,如果该网站获得了良好的反馈并积累了相当数量的访问者,服务器的压力将逐渐...

    大型网站架构演变和知识体系.docx

    **架构演变第一步:物理分离Web服务器和数据库** 初期,网站可能在单一服务器上运行,但随着流量增加,数据库与应用程序之间的交互可能导致性能瓶颈。为了解决这个问题,首先采取的措施是将Web服务器和数据库物理...

    大型网站架构演变和知识体系.pdf

    ### 大型网站架构演变与知识体系解析 #### 一、引言 随着互联网的快速发展,网站面临的用户规模和业务需求日益增长,这对网站的技术架构提出了更高的要求。《大型网站架构演变和知识体系》这本书详细介绍了从最初的...

    面向服务计算(一)---Web应用体系架构.pptx

    面向服务计算(一)---Web应用体系架构主要探讨了基于Web的应用程序的演变、特性以及其工作原理。Web应用程序是以Web技术为基础,利用HTTP协议进行通信,并通过浏览器作为用户界面的交互工具。以下是对这些概念的详细...

    Java Web服务开发

    内容简介:本书全面深入地探讨了下一代分布式计算技术—— Web服务,深入透彻地阐述了如何使用Java实现和部署Web服务,同时也全面介绍了与之相关的基础知识。在详细介绍了Web服务之后,本书还引导您探讨Web服务体系...

    从运维角度看中大型网站架构演变之路

    ### 从运维角度看中大型网站架构演变之路 随着互联网的发展,中大型网站面临的挑战日益增多,这不仅体现在用户数量的增长上,还体现在对系统稳定性和性能的要求上。本文旨在通过一个具体的案例,来探讨中大型网站...

    了解_Web_服务规范_第_2_部分:Web_服务描述语言_(WSDL)

    Web服务描述语言(WSDL)是现代网络服务架构中的关键要素,它不仅定义了服务的界面,还描述了服务的实现细节,促进了服务的互操作性和可发现性。掌握WSDL的基本原理和实践对于任何从事Web服务开发的软件工程师都是必...

    同一个web从Servlet演变包springboot

    【标题】: "同一个Web应用从Servlet到Spring Boot的演进" 在Web开发领域,Servlet技术是基础,而Spring Boot则是现代Web应用的主流...这种演进体现了Web开发技术的进步,也是适应现代敏捷开发和微服务架构的必然选择。

    WEB应用的架构与开发.pptx

    WEB应用的架构与开发是一个广泛的领域,涵盖了许多关键技术和概念。...总的来说,WEB应用的架构与开发是一门涵盖广泛的技术学科,需要开发者具备扎实的编程基础、良好的系统设计能力以及对新兴技术的敏锐洞察。

    Web Service Architecture

    随着技术的发展,Web服务已经演变为更复杂的服务组合,形成了服务导向架构(SOA),并进一步推动了云计算和API经济的发展。 总的来说,Web服务架构是互联网技术的一次重大革命,它通过标准化的接口和消息传递,使...

    NET平台及Web服务.pptx

    Web应用的基本架构是客户机/服务器(C/S)模型,但在Web世界中,这一模式演变为浏览器/服务器(B/S)模式,用户使用统一的浏览器访问服务器上的资源。在设计Web窗体时,通常涉及Page_Init、Page_Load、事件处理和...

    计算机网络应用系统的基础架构.ppt

    计算机网络应用系统的基础架构是构建高效、稳定且适应业务需求的IT系统的关键组成部分。这个架构涉及到多个层次,包括网络系统、服务器系统、CPU系统、操作系统以及应用开发系统。每个部分都对整体系统的性能、可靠...

    webserver重新定义

    随着互联网技术的不断发展,Web服务器的角色也在不断演变,"Web服务器重新定义"意味着对传统Web服务器的功能、性能和架构进行了革新,以适应新的需求和技术趋势。 【描述】:“Web服务器重新定义” Web服务器的...

Global site tag (gtag.js) - Google Analytics