您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > GemFire与12306
GemFire与12306GemFire介绍有状态架构所面临的挑战•应用服务器在高负载的压力下可以很好地进行扩展,但是应用状态管理还必须与数据库服务器进行交互•关系型数据库设计植根于过去的技术•固有的I/O瓶颈,强一致性锁机制•集中架构设计导致扩展瓶颈•云环境是虚拟化的、分布式的•虚拟化的分布式架构并不适合RDBMS•高可用性有限•完全双活的高可用性难以实现传统关系型数据库所面临的挑战一次写入日志二次写入数据文件Buffers以IO优化为主频繁的I/O读写设计架构不适应现在的应用特点•对ACID关注太多•磁盘同步瓶颈GemFire的前世今生1982年GemStoneSystems成立于美国俄勒冈州西北部城市比弗顿市。GemStone是领先的分布式数据管理技术软件公司,在此方面有着厚重的历史。最初使用Smalltalk语言开发出了第一代面向对象的数据库。并成为Smalltalk执行委员会成员。1986年第一代产品Gemstone/S正式面世,受到金融市场的广泛欢迎。90年代中后期随着Java语言的广泛应用,GemStone与Sun公司合作,参与到JEE的规范制定(JCache-JSR107),并陆续更新与JEE平台相结合的产品。GemStone开发出了GemFire,成为业界第一个满足J2EE标准的中间件。GemFire拥有全新的应用框架,兼容Java,C++,C#。而GemFire在CEP(complexeventprocessing),EventStreamProcessing,DataVirtualization,DistributedCaching几个方面有着举足轻重的地位。2008年初金融危机后,金融监管法规Dodd-Frank、Basel3等陆续出台,各大投资银行为了减少系统风险和增加透明度,加强了金融衍生品交易平台的投资规模,Gemfire击败Oracle等老牌厂商,跻身为华尔街第一大分布式数据处理平台软件。2010年5月VMware收购了老牌厂商Gemstone,并入SpringSource部门。什么是GemFire?分布式池化内存和硬盘资源•超低延迟和超高吞吐量•动态的线性扩展能力•持续高可用性•MapReduce并行处理•数据感知路由基于内存的海量数据实时处理平台AseminalpaperonthearchitectureofelasticapplicationswaswrittenbyPatHelland(TandemComputing,Amazon.com,Microsoft)“LifeBeyondDistributedTransactions:anApostate’sOpinion”://blogs.msdn.com/b/pathelland/这片论文描述了我们的应用系统架构需要怎样的步骤来达到线性扩展,同时不使用大型硬件产品弹性架构扩展系统顶层不必担心扩展问题Helland指出了线性扩展应用的分层架构底层知道应用是跨多台物理机分布的中间抽象层ScaleAgnosticCodeProgramAbstractionScaleAwareCode面向分层架构GemFire整体分布式架构GemfireDistributedSystem运行在Gemfire上的VMs组成了分布式系统。每一个MV都作为一个Gemfire对等体存在。启动Gemfire对等体,在每个VM对等体上你创建了一个缓存。每一个缓存管理到其他VM对等体的连接。通过UDP多播或者TCP位置服务,互相发现。RegionsRegion是一个分布式系统之上的抽象概念。一个Region允许你在系统的多个VM中存储数据,不用考虑数据存在那个对等体上。Region给你一个map接口能透明地从合适的VM上获取数据。这个Region类扩展了java.util.Map接口,但是它也支持查询和事务。ReplicatedRegions一个ReplicatedRegion保存着所有分区的数据拷贝PartitionedRegionsPartitionedRegions只保存一部分分区的数据拷贝DynamicRegions分布式成员,如p2p,ClientCachingGemfire分布式系统是一个网格结构,所有的Peer直接互相连接。Gemfire也支持客户端,客户端有他们自己的本地数据缓存,他们能够更新他们的本地缓存,通过注册服务器来更新改变的数据。Shared-NothingPersistenceGemfire支持’非共享’持久化,每一个peer持久化数据到本地磁盘,Gemfire持久化也允许你在磁盘上维护一份配置的数据拷贝。DistributedMember在Gemfire分布式系统中,加入到集群中的某个成员,有多种角色。DistributedTransaction在Gemfire分布式系统中,在多个网络节点上访问或更新数据,跨节点来协调事务提交或回滚。DistributedLock通过特定的分布式管理器定义一个专有资源,跨整个分布式系统锁定任意的名称。CacheClient接入到Gemfire分布式系统的客户端,负责管理本地缓存的生命周期。CacheServerGemfire分布式系统的服务器节点。DistributionLocator注册客户端和服务器成员,使双方能够互相发现,同时可以提供一定的负载均衡功能。CQGemfire分布式系统能够为客户端提供持续查询服务,一旦服务器内的数据发生变化,可立刻同步到客户端。Gateway外部分布式系统的本地代理端,主要作为跨WAN网同步数据的出口节点。GemFire基本概念介绍GemFire核心功能层DataManagermentLayer数据保存,查询和为客户端提供访问接口。此层也负责跨分布式系统同步内存中的数据。MembershipandDiscovery分布式系统通过指定网络协议、地址和端口来发现系统成员。成员关系和发现机制动态更新系统成员列表,跨分布式系统维护统一的集群成员视图。DataDistributionandNotification数据能够跨多个主机进行同步和分区。数据更新和删除操作可接收到其他成员的ACK确认。缓存中数据的更新、通告发送到注册了数据更新的应用上。Communication通信层使用TCP/UDP协议进行消息通信,默认情况下,发现协议是基于UDP多播机制,数据分布是基于TCP/IP协议。GemFire1.Peer-to-Peer缓存嵌入在应用程序中,与应用共享堆空间Session复制和L2缓存GemFire主要拓扑结构OSJavaAPPJVMA/SOSJavaAPPJVMA/SGemFireJVM2.Client/Server中间缓存层由分布式集群系统来管理Session复制,L2缓存,数据关键应用,容灾,持续可靠性…GemFire拓扑结构OSJavaAPPJVMA/SC/S拓扑支持本地客户端(C#,C++)OSJavaAPPJVMA/SWinC#APPCLR.NETOSOSJVM3.多站点部署通过缓存数据在多站点之间同步,形成双向多活的数据中心。如果任意一个站点的应用系统瘫痪,可以自动切换到其他站点继续运营GemFire拓扑结构WANGemFireJVMOSCAPPJVMA/SOSJavaAPPJVMA/SWinC#APPCLR.NETOSOSJVMGemFireJVMOSCAPPJVMA/SOSJavaAPPJVMA/SWinC#APPCLR.NETOSOSJVMGemFire数据模型•单一的逻辑命名空间•Regions是一个ConcurrentMap•键值对结构数据跨节点物理分布DataRegionPortfoliosDataRegionTradesDataRegionPricesChildregionsDataRegion主要特性•DataRegion的主要特性–溢出数据到磁盘(LRU)–持久化到磁盘(逆向)–跨集群节点进行数据同步–分区–跨集群节点池化内存–从外部数据源延迟加载数据–OQL语句•DataRegion的主要操作–同步读,同步写,异步写–数据分布模型•D-no-ACK,D-ACK和GLOBAL(有锁)GemFire重要特性介绍多站点部署Gemfire集群可以跨地域部署在多个数据中心数据分区哈希分区,联位绑定数据复制数据多副本冗余数据溢出数据从内存写到临时文件上数据持久化数据从内存写到永久文件上跨集群同步数据通过GatewayHub跨WAN网进行数据同步延迟加载数据CacheLoader、JDBCL2缓存数据将数据缓存在内存中,使用LRU算法进行异步读写数据数据重平衡分布式系统通过此操作使各个节点的数据负载平均事件流处理MQ、CEP操作分布式事务支持分布式事务分布式锁支持分布式锁类SQL语句支持CQL查询MapReduce利用Function函数执行Scatter-Gether并行处理数据压缩和快照将Region中的数据压缩后,导出到快照文件中备份GemFire分布式事务-ACID原子性和一致性•MVCC事务控制•TransactionStateThread•ReservationSystem•FailureDetectionSystemGemFire分布式事务-ACID隔离Process-basedThread:控制事务更新,提交后可见VolatileRead:无锁读,快速响应读操作TransactionWrite:基于事务写,如果事务用一个键写一个值,此时这个键已经被读了,后续的读将要返回事务引用。持久性Persistence:通过将内存中的数据写入永久性磁盘来保障。RedundancyCopy:用于保障内存、网络和VM之间的可靠性。GemFire分布式事务对于分布式Region来说,数据经常跨多个缓存节点分布,但是事务只在一个缓存节点管理,因此可能多个region会参与到一个事务中。事务操作首先作用在数据主拷贝节点,然后分布到其他成员,而不考虑是哪个成员先开始的缓存操作。-运行事务代码的成员被称为事务初始化器.-管理事务和数据的成员被称为事务数据节点事务数据节点可能是事务初始化器也可能不是。当事务提交时,事务数据节点发布这份数据到其他节点。GemFire分布式事务分区区域的事务M1运行着两个事务,T1和T2。T1作用在M1的Y数据上,因此M1既是事务初始化器也是事务数据节点;T2作用在M2的X和W数据上,因此M1是事务初始化器,M2是事务数据节点。事务在数据节点上管理,包括事务视图、所有操作、所有本地缓存事件处理,当T2被提交时,M2的缓存被更新,事务事件跨系统来分布,好像此事务源于M2。GemFire分布式事务复制区域的事务对于复制区域,事务和其操作被应用到本地成员,然后事务的状态被发布到其他成员,而数据如何传播,则根据region的属性设置。①local—非分布式,在本地处理事务冲突.与partitionedregion不兼容②distributed-no-ack—本地处理事务冲突,成员之间缺乏协调.③distributed-ack—即在本地处理事务冲突,又在成员之间处理事务冲突分布式事务工作原理Transactionview在并发访问缓存的时候,事务之间是隔离的。每一个事务都有自己的私有视图,包括已读取的条目和其变更。当一个数据条目进入事务的时候,将在事务视图上生成一个数据状态的快照,此事务能够保存数据的原有状态,快照的另外一个用处是在提交阶段恢复写冲突。此事务维护着当前条目的视图,用来在事务中做出的变更。当提交成功时,在事务视图中记录的变更被合并到缓存上。如果提交失败或者事务回滚,所有的变更都将丢弃。当事务提交时,事务管理系统使用“two-phasecommitprotocol”:1.通过驻留线程,预留事务中所有的变更条目(对于分区区域,在事务运行的数据节点上做预留)2.在受影响的键上检查缓存,确保所有的数据条目都处于相
本文标题:GemFire与12306
链接地址:https://www.777doc.com/doc-4225093 .html