最近公司决定做一个面向个人的应用。虽然前期可能并发不会很大但是还是研究了一下支付宝和Ebay的分布式架构,以备用。
首先CAP理论。
我们通常在集中式环境中遇到的事务基本都是遵循ACID原则的。也就是说数据库中的数据有着很强的一致性。
但是在一个分布式环境中由于会遇到读写分离的情况,根据著名的CAP理论,为了更大程度的保证A(availability)和P(partition tolerance),需要在一些情况下对C(consistency)有所妥协。这就是俗称的弱一致性。但是弱贵弱,终归还是要回到一致状态的,于是这个叫最终一致性(Eventually Consistent). 最终一致性的实现是存储系统需要考虑的问题。这个要考虑到Master/Slave的replication的实现方式。
再者就是事务的实现模型。
本地事务不用说了。为了满足分布式事务的需求,业界有一个XA协议下的2 Phase Commit事务模型。
这个模型就是保证了跨数据源的事务或者全部提交或者全部回滚。在一定程度上满足了分布式环境中事务的一致性问题,
但是因为采用的是2阶段提交的方式,效率很低。 于是有了一些解决分布式环境下事务一致性的替代方案。比较著名的一种就是Best Efforts 1 Phase Pattern. 这个方案的原理就是尽量拖延事务提交的顺序。争取在最后把跨多个数据源的多个事务(按照我们需要的顺序)同时提交或者回滚。 这个方案面临的挑战就是当事务没有全部提交系统出现Error的时候怎么办。这个情况下数据就出现了不一致的情况。 但是毕竟这种应用Crash级别的问题比较少见,而且可以在业务里做适当的判断以减少这种情况带来的影响,所以这个方案还是不错的。我看了下阿里巴巴的CobarClient和国内的Guzz,都是用的这种事务模式。
当然,读写分离的实现, 数据库的垂直分割(根据业务功能进行分库), 水平分割(大表的分割),以及应用本身不同系统模块的分割也是需要考虑的。这些对于系统的水平扩展都是非常非常重要的。
同时,为了尽可能的减轻系统压力,有必要采取一些静态化以及缓存技术(对象缓存,静态缓存,页面缓存,局部缓存)以及
对于静态资源进行单独分割(比如:图片服务器,脚本服务器等).
最后从系统设计层面上讲有一个比较重要的原则就是能异步的地方尽量异步。异步对于实现系统的分割以及水平扩展非常有效。
有时间偶去研究一下Guzz然后跟大家做一个比较详细的分享。
最后,以源自Ebay的我很喜欢的一句话来结束这篇小文:
Partition Everything,
Asynchrony Everywhere,
Automate Everything,
Everything Fails,
Embrace Inconsistency,
Expect (R)evolution,
Dependencies Matter,
Respect Authority,
Never Enough Data,
Custom
Infrastructure.
分享到:
相关推荐
研究分布式文件系统时间也不短了,接触过的文件系统也不少,趁着这2014到来之际,花点时间用来总结总结。接触过的文件系统有glusterfs、moosefs、lustre及hdfs等,其架构简单顺带解说一点,总体来说分为元数据中心式...
作者在本科学习的时候习惯在学习完一门课程之后对课程整体每一章进行梳理总结,一方面能重新回顾和理解,另一方面可以给学弟学妹留下一点资料。 ———————————————— 版权声明:本文为博主原创文章,...
DL是一个高性能的日志复制服务,提供了持久化、复制以及强一致性的功能,这对于构建可靠的分布式系统都是至关重要的,如复制状态机(replicated-state-machines)、通用的发布/订阅系统、分布式数据库以及分布式队列...
Java在过去有一点超前于它的时代,当时市场的动力落后于Java,但是现在Java可以而且已经取得成功。 1.2 Java语言的特点 1. 平台无关性 Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。使用...
读了“扔物线”老师的小册《Git原理详解及实用指南》感觉收获良多,于是想写点东西做一个总结,即加深自己的印象也希望能给社区小伙伴一点帮助,写的不对的地方还请多多指导。身为一个初入前端半年的菜鸟,由伊始的...
比来比去可一点都不好玩,适合就好。这个框架是我到目前总结的尽可能提高自己开发效率的工具集(或者有更好的说法?)。提供给需要它的朋友,希望它可以帮助大家更轻松的完成开发的工作. 关于cmlphp的介绍也可以看看我...
我对J2EE和.NET的一点理解 难分难舍的DSO(一) InternalsVisibleToAttribute,友元程序集访问属性 Essential .NET 读书笔记 [第一部分] NET FrameWork的Collections支持 .NET的反射在软件设计上的应用 关于跨程序集...
4 3.4.1星型结构 4 3.4.2环形结构 6 3.4.3树型结构 7 四、总结 8 五、主要参考文献 8 一、设计目的 随着计算机网络的普及,为了能让公司更好的与现代社会的发展接轨。更快的获取市场 信息,为了让外界厂解该公司的...
下一页是我云计算对我们的科研人员的一些挑战,这是我的一个总结,我感觉第一你要认识到云计算是我们在做十年二十年之后管理创新的扩展,和事业的延续,当然(奥得死)是IBM的运营人员,第二就是要认识到云计算真正...
以下类比可以帮助说明这一点。 小说家和剧本作家很少从头开始设计剧情。他们总是沿袭一些业已存在的模式,像“悲剧性英雄”模式(《麦克白》、《哈姆雷特》 等)或“浪漫小说”模式(存在着无数浪漫小说)。同样地,面向...
<<page 1>> page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 第一章 第一章第一章 第一章 .NET 编 编 ... 比尔....这一天 微软公司正式推出了其下一代...
对于服务器来说就特别重要,因为安全补丁关乎到系统安全,而微软网站经常发布最新的系统安全补丁,可以用系统自带的windows update程序随时更新。 2.iis安全设置之FTP目录的设定。FTP目录没有设置也容易被别人攻击,...