
大数据时代初期,随着数据请求并发量大不断增大,一般都是采用的集群同步数据的方式处理,就是将数据库分成了很多的小库,每个数据库的数据内容是不变的,都是保存了源数据库的数据副本,通过同步或者异步方式保证数据的一致性,每个库设定特定的读写方式,比如主数据库负责写 *** 作,从数据库是负责读 *** 作,等等根据业务复杂程度以此类推,将业务在物理层面上进行了分离,但是这种方式依旧存在一定的负载压力的问题,企业数据在不断的扩增中,后面就采用分库分表的方式解决,对读写负载进行分离,但是这种实现依旧存在不足,且需要不断进行数据库服务器扩容。
NoSQL数据库大致分为5种类型
1、列族数据库:BigTable、HBase、Cassandra、Amazon SimpleDB、HadoopDB等,下面简单介绍几个
(1)Cassandra:Cassandra是一个列存储数据库,支持跨数据中心的数据复制。它的数据模型提供列索引,log-structured修改,支持反规范化,实体化视图和嵌入超高速缓存。
(2)HBase:Apache Hbase源于Google的Bigtable,是一个开源、分布式、面向列存储的模型。在Hadoop和HDFS之上提供了像Bigtable一样的功能。
(3)Amazon SimpleDB:Amazon SimpleDB是一个非关系型数据存储,它卸下数据库管理的工作。开发者使用Web服务请求存储和查询数据项
(4)Apache Accumulo:Apache Accumulo的有序的、分布式键值数据存储,基于Google的BigTable设计,建立在Apache Hadoop、Zookeeper和Thrift技术之上。
(5)Hypertable:Hypertable是一个开源、可扩展的数据库,模仿Bigtable,支持分片。
(6)Azure Tables:Windows Azure Table Storage Service为要求大量非结构化数据存储的应用提供NoSQL性能。表能够自动扩展到TB级别,能通过REST和Managed API访问。
2、键值数据库:Redis、SimpleDB、Scalaris、Memcached等,下面简单介绍几个
(1)Riak:Riak是一个开源,分布式键值数据库,支持数据复制和容错。(2)Redis:Redis是一个开源的键值存储。支持主从式复制、事务,Pub/Sub、Lua脚本,还支持给Key添加时限。
(3)Dynamo:Dynamo是一个键值分布式数据存储。它直接由亚马逊Dynamo数据库实现;在亚马逊S3产品中使用。
(4)Oracle NoSQL Database:来自Oracle的键值NoSQL数据库。它支持事务ACID(原子性、一致性、持久性和独立性)和JSON。
(5)Oracle NoSQL Database:具备数据备份和分布式键值存储系统。
(6)Voldemort:具备数据备份和分布式键值存储系统。
(7)Aerospike:Aerospike数据库是一个键值存储,支持混合内存架构,通过强一致性和可调一致性保证数据的完整性。
3、文档数据库:MongoDB、CouchDB、Perservere、Terrastore、RavenDB等,下面简单介绍几个
(1)MongoDB:开源、面向文档,也是当下最人气的NoSQL数据库。
(2)CounchDB:Apache CounchDB是一个使用JSON的文档数据库,使用Javascript做MapReduce查询,以及一个使用HTTP的API。
(3)Couchbase:NoSQL文档数据库基于JSON模型。
(4)RavenDB:RavenDB是一个基于.NET语言的面向文档数据库。
(5)MarkLogic:MarkLogic NoSQL数据库用来存储基于XML和以文档为中心的信息,支持灵活的模式。
4、图数据库:Neo4J、InfoGrid、OrientDB、GraphDB,下面简单介绍几个
(1)Neo4j:Neo4j是一个图数据库;支持ACID事务(原子性、独立性、持久性和一致性)。
(2)InfiniteGraph:一个图数据库用来维持和遍历对象间的关系,支持分布式数据存储。
(3)AllegroGraph:AllegroGraph是结合使用了内存和磁盘,提供了高可扩展性,支持SPARQ、RDFS++和Prolog推理。
5、内存数据网格:Hazelcast、Oracle Coherence、Terracotta BigMemorry、GemFire、Infinispan、GridGain、GigaSpaces,下面简单介绍几个
(1)Hazelcast:Hazelcast CE是一个开源数据分布平台,它允许开发者在数据库集群之上共享和分割数据。
(2)Oracle Coherence:Oracle的内存数据网格解决方案提供了常用数据的快速访问能力,一致性支持事务处理能力和数据的动态划分。
(3)Terracotta BigMemory:来自Terracotta的分布式内存管理解决方案。这项产品包括一个Ehcache界面、Terracotta管理控制台和BigMemory-Hadoop连接器。
(4)GemFire:Vmware vFabric GemFire是一个分布式数据管理平台,也是一个分布式的数据网格平台,支持内存数据管理、复制、划分、数据识别路由和连续查询。
(5)Infinispan:Infinispan是一个基于Java的开源键值NoSQL数据存储,和分布式数据节点平台,支持事务,peer-to-peer 及client/server 架构。
(6)GridGain:分布式、面向对象、基于内存、SQL+NoSQL键值数据库。支持ACID事务。
(7)GigaSpaces:GigaSpaces内存数据网格能够充当应用的记录系统,并支持各种各样的高速缓存场景。
引用自cnblogs@Zealic:最近几天重温了一下WOW,结合最近学习的数据库知识和自己的了解,对WOW的大概体系做了分析。当然,我仅仅只是窥豹见斑而已,希望对WOW有所了解的大侠能给我和向了解WOW的人指点;让世人更加了解WOW,让中国的游戏能够学习(不是抄袭)并超越WOW。
不知道哪来的想法,就想到了WOW的数据库的结构以及程序实现,那么,就来了解一下吧。
首先想到:Game Server 使用的是什么OS和Database
起初猜测为 : Unix/BSD ,数据库为 Oracle
这样比较适合WOW这样的大型网络游戏,因为其存储和数据量极大
网上查到的一些关键资料,可以证明我的猜想和实际相差不大
1.9C在一次服务器故障中的说明,下面只列出关键部分
08:29 收到EVA存储报警邮件,联系数据中心工程师,联系惠普工程师.
08:35 故障应急流程启动,相关人员包括THE9/HP/Blizzard US .
15:33 Oracle专家加入故障应急流程
15:50 暴雪数据库工程师开始与Oracle专家继续分析故障情况.
17:15 暴雪表示暂时还未从他们的admin以及DBA处获得任何有新的消息,他们仍然在研究此故障。
2.Blizzard的数据库管理员招聘要求
Oracle Database Administrator
The World of Warcraft development team is looking for a self-motivated and knowledgeable IT professional to help administer the WoW databases. As the person responsible for handling the database-side of WoW pushes and patches, our Live Team Oracle DBA's job duties would include designing, configuring, maintaining, monitoring, benchmarking and troubleshooting Oracle databases.
Blizzard offers a fun, creative, and technically challenging environment with excellent compensation and a full range of benefits.
Responsibilities:
Provide production on-call support.
Maintain and enhance existing databases.
Perform routine database maintenance.
Work with end users to ensure smooth production rollouts and pushes.
Assist in training other employees.
Requirements:
3+ years professional Oracle DBA experience, including Oracle 9i.
Extensive experience with database performance tuning.
Experience working with large databases (>1TB).
Experience with Oracle RAC and Partitioning features.
Proficiency in Linux/Unix environments including shell scripting.
Plusses:
Strong knowledge of SQL &PL/SQL.
Familiarity with UNIX tools and shell scripting
Familiarity with HP EVA's and Data Protector.
Passion for video games, including MMORPG's
因此WOW的服务器应该为 : HPUNIX + ORACLE
那么我就对WOW的数据库做一些猜想,至于正确与否或者符合程度集合,就无从而知了
主要分为以下几块
-游戏服务器:
这里说的是游戏中的服务器,而非上面提到的物理意义上的服务器,比如,七区的恶魔之魂、黑铁、加基森就是游戏服务器。
-游戏区:
游戏大区,一个大区是由许多个游戏服务器构成的。之所以分大区,我认为完全是因为物理原因,每个区都其物理构成应应该是一个服务器群集,而在这群集上,有许多的数据库实例,每一个数据库实例都对应一个游戏服务器。
-验证系统:
游戏中的登录、排队、验证身份应该都是又这一部分完成的。
-聊天频道:
聊天频道是一个独立的服务器,这一点可以从游戏中人物、地图都很卡而聊天却完全不受影响的情况分析出来,聊天不可以离线发送消息,因此我可以武断的认为,聊天服务器基本不 *** 作数据库,至多在当前无法处理或者玩家暂时接收不到的情况下,使用一些临时的表来保存消息;或者服务器将聊天数据全部保存到数据库中,以方便对玩家的行为查询。
另外,聊天服务器是独立于所有服务器的,每个区的所有游戏服务器都是使用对应于该区的聊天服务器。这样,可以专门针对聊天服务器的特性,对服务器的系统和数据库进行专门的优化
-副本&战场:
副本&战场(以下简称副本)我觉得也应该和聊天服务器相同,是个独立的服务器,不过他与普通游戏服务器不同,并没有保存其他的地图数据,仅仅保存了副本地图的数据。
至于如何实现跨服战场,我以为,应该是将需要的角色数据做拷贝到副本服务器中,并且锁定原本服务器中的数据(表或行),在退出战场时,用副本服务器的数据更新原来的数据。我们可以把战场看做数据库中的临时表,做了处理以后更新到需要保存的地方。
通过上述解释,也可以理解为什么在进入战场时需要加载画面了,加载画面并不仅仅是作为一个过渡画面,它还承载了加载客户端资源,与服务端通信进行处理;显示加载画面时,副本服务器应该是如上所说游戏服务器交换了角色数据。
大型副本与普通副本不同的地方,我觉得仅仅是重置时间和副本策略做了改变而已。
-地图
地图的定义是在客户端的资源中的,为防止用户篡改,BLZ对定义地图的资源文件和DBC进行使用了混淆命名以及检查校验;之所以这么认为,是因为中国WOW公测的时候,出现一些加速外挂,可以让角色直接穿越墙壁、地表等看起来不可能穿越的物体,这便验证了BLZ为了减轻服务器负担,直接在客户端进行了大部分的碰撞检测。
WOW的的实际地图结构和游戏中我们所见到的不一样,他是把一块大陆分成N个小块的地图数据,客户端仅仅需要加载玩家角色所在位置附近的所有地图块就可以了。其技术细节就不做详细分析了。
-东西大陆:
每个大陆都应该是一个独立的数据库,之所以出现加载画面,我认为是因为两个大陆的地形材质大不相同,客户端需要先释放出发大陆的所有资源,加载目的大陆的必要资源,同时转移角色的数据到目的大陆。
-角色:
游戏中的角色应该是被分离成数个表,包括玩家的属性,任务,包裹,邮箱,银行等。一些重要的,比如物品包裹、邮箱、银行,服务器会在很短(相对其他数据而言)的时间内将内存中的缓存数据写入提交到数据库中;而一些相较以上数据不是很重要的数据,则需要很长时间才会提交到数据库。这也解释了为什么服务器回档时,角色的位置和任务等都回档了,而物品却没有回档,这也造成了传说中的双手痛击。
-怪物:
世界中的怪物生成应该是使用了Prototype模式,那么保存怪物的数据其实之需要保存其会变化的值就即可。
-其他:
游戏中总是有一些事件发生,比如:暗月马戏团的来访,万圣节的活动,情人节的活动等等,这些东西应该都是具有伸缩性的,可以想象,为了方便BLZ自WOW的管理和扩展,在服务器或服务器群集管理中心中,应该有BLZ为自己和代理商提供的工具或者说脚本使用指南。至于WOW采用的脚本是什么,这个我就猜不到了,可能是Perl\Python\SH吧,反正不会是LUA。
-行为与技能:
为什么WOW玩起来感觉这么流畅,没有其他网络游戏看起来或感觉起来反应迟钝,WOW并没有每时每刻都与客户端进行通信;其主要工作原理是,客户端首先处理用户的输入,并执行相应的开始动画或处理,而实际显示结果要等待服务端处理并返回后才会显现出来,这就是为什么在掉线后,玩家还做 *** 作角色,但是却无法获得 *** 作结果。
技能和行为差不多,其实很多游戏中的限制都是在客户端进行的,这都是BLZ为了减轻服务端的负担、减少通信量而造成的。那么,我在这里大胆的猜测,只要分析出内存地址或相应代码,WOW是有很多地方可以被篡改的;因为据我所知,目前WOW的所有外挂都是通过暴力修改客户端的内存实现的,而非常见的修改网络封包,BLZ加密还是做的很不错的 :)。
基本上就分析了这么多了,我试图从自己的脑子里挖出更多的东西,可惜所了解的东西仍然太少,没办法,现这样吧。
----------------------------------------------
PS:大芒果单机版WOW采用的MySQL
多副本数据备份定义:即概念数据模型(Conceptual Data Model)又称CDM,是面向数据库用户的现实世界的模型,主要用来描述世界的概念化结构,它使数据库的设计人员在设计的初始阶段,摆脱计算机系统及DBMS的具体技术问题,集中精力分析数据以及数据之间的联系等,与具体的数据库管理系统(Database Management System,简称DBMS)无关,应用于企业的多副本数据备份领域。
UCache灾备云利用CDM多副本数据管理技术备份,
UCache灾备云采用一站式WEB管理方式,利用CDM多副本数据管理技术备份帮助企业弥补传统备份的不足,集秒级、分钟级、小时级灾备技术于一身,为企业提供更安全可靠更高效低成本投入的CDP持续数据保护方案。
UCache灾备云复杂的IT环境应用,比如:支持SAP HANA、Hadoop、KVM、Mysql、VMware、IBM DP2、Oracle等场景的数据备份/恢复、及数据迁移使用。支持海量核心业务数据的闪电恢复,极大缩短恢复所需时间,保障用户可用性数据达到秒级RTO、分钟级RTO体验,(目前UCache云灾备100G免费使用,数据压缩、重删比例:可达到7:1,实际700G的数据意思是经过加密切块压缩,及并行重删备份后实际在UCache灾备云平台上显示的占用容易仅为100G。)
企业使用UCache灾备云备份的优势:
1. 部署简单:一体化的产品形态,以及向导式的 *** 作指导,轻松实现安装部署
2. 使用简单: All-in-One-Web 管理模式, 统一管理所有备份和恢复任务
3. 管理简单:无缝集成AnyBackup Master Server,轻松实现集中管理,提升效率 , 降低成本
4. 扩展简单:一旦数据量增大 , 接入新的备份节点即可满足需求( 部分型号支持Scale-out 扩展)
5. TCO成本低:即开即用,按需订阅,d性扩容,计费颗粒小
6. 更加时实高效:增量备份、数据重删、多通道、多任务、千M带宽出口备份更高效
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)