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

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的开源实现吧)

分享到:
评论

相关推荐

    Java Web服务开发

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

    服务端高并发分布式架构的演变过程

    在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍:分布式系统中的多个模块在不同服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署在不同的服务器上,或...

    腾讯大讲堂 - 2012精品讲座合集(pdf)

    6-QQ基础数据库架构演变之路 7-QQ空间技术架构之峥嵘岁月 8-架构之美-开放环境下的网络架构 9-智能应用和云服务:手机浏览器的未来之门 10-开放之路:成就创新的四把钥匙 11-从十元到十亿:腾讯包月产品深度思维 12-...

    J2ME the Complete Reference j2me的完全开发参考

    本书共分为5个部分:J2ME基础、J2ME用户界面、J2ME数据管理、J2ME个人信息管理器配置、J2ME网络与Web服务。书中结合具体实例,讲解了开发J2ME、Web服务、PDA和移动电话应用程序所需的知识与技术,并且提供了基于...

    大型分布式网站架构与实践

     1.3.1 服务化的演变 30  1.3.2 负载均衡算法 33  1.3.3 动态配置规则 39  1.3.4 ZooKeeper介绍与环境搭建 40  1.3.5 ZooKeeper API使用简介 43  1.3.6 zkClient的使用 47  1.3.7 路由和负载均衡的实现 50 ...

    ASP.NET4高级程序设计(第4版) 3/3

    1.2 ASP.NET的演变 9 1.2.1 ASP.NET1.0和ASP.NET1.1 9 1.2.2 ASP.NET2.0 9 1.2.3 ASP.NET3.5 10 1.2.4 ASP.NET4 12 1.2.5 Silverlight 14 1.3 总结 15 第2章 Visual Studio 16 2.1 Visual Studio...

    领域驱动设计与模式实战

    7.3.3 将规则绑定到与领域有关的转换,还是绑定到与基础架构有关的转换 7.3.4 精化原则:所有状态,即使是错误状态,都应该是可保存的 7.4 与持久化有关的基本的规则API的需求 7.4.1 回到已发现的API问题上 7.4.2 ...

    ArchSummit深圳2018-1

    AS深圳2018-《从前后端分离看Web应用架构演变》-剪巽.pdf AS深圳2018-《工程师转型产品经理的几个必备技能》-Jason+Ng阿禅.pdf AS深圳2018-《Kubernetes项目与“基础设施民主化”的探索》-张磊.pdf 孙俊-...

    看透springMvc源代码分析与实践.pdf

    本书不仅详细地分析Spring MVC的结构及其实现细节,而且讲解网站的不同架构及其演变的过程,以及网络底层协议的概念及其实现方法,帮助读者开发更高效的网站。 通过本书,你将: 系统学习网站的各种架构以及每种架构...

    看透springMvc源代码分析与实践-扫描版本

    解压后大小(57.7M) 国内资深Web开发专家根据Spring MVC全新技术撰写,基于实际生产环境,从基础知识、源代码和实战3个维度对Spring MVC的结构和实现进行详细讲解 全面介绍Spring MVC的架构、原理、核心概念和操作...

    看透springMvc源代码分析与实践

    国内资深Web开发专家根据Spring MVC全新技术撰写,基于实际生产环境,从基础知识、源代码和实战3个维度对Spring MVC的结构和实现进行详细讲解 全面介绍Spring MVC的架构、原理、核心概念和操作,通过案例完整呈现...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    1.2 ASP.NET的演变 1.2.1 ASP.NET1.0和ASP.NET1.1 1.2.2 ASP.NET2.0 1.2.3 ASP.NET3.5 1.2.4 ASP.NET4 1.2.5 Silverlight 1.3 总结 第2章 Visual Studio 2.1 Visual Studio 2.1.1 网站和Web项目...

    scaleway-terraform-demo:示例将terraform与nomad,consul和fabio一起用于Scaleway

    是不可知的云自动化工具,可随着配置的演变安全有效地管理基础架构。 在其最新版本中,Terraform附带了支持,这使其成为版本管理和轻松开发Scaleway基础结构的强大工具。 在这篇博客文章中,我通过使用Consul,...

    云存储技术

    由此,信息技术已进入以数据为中心的时代,不断激增的数据量和数据虚拟化技术的发展,让传统的基础架构、数据存储方式和数据分析不断面临新的挑战。而随着存储技术的不断发展和完善,企业的IT技术架构正在从以服务器...

    网络架构师148讲视频课程

    │ 第148节:阶段一之后的发展和架构演变.avi │ ├─x-gen-ppt │ 使用外部主题.pdf │ 具体调用.pdf │ 分发调度.pdf │ 整体介绍.pdf │ 模板管理.pdf │ 生成代理.pdf │ 生成输出.pdf │ 自定义外部主题.pdf ...

    Learn-More-Do-Less:Java资料库

    Java 知识点,持续迭代中。 如果对你有帮助请点下 Star,有疑问欢迎提有好的想法请提 设计模式 源码分析 JDK 线程相关源码 框架使用 web 层框架 Spring MVC Webflux ...从架构演变到展望未来 从Synchro

Global site tag (gtag.js) - Google Analytics