假设正在创建具有第一人称视角、每个人都在其中玩的世界(如 eve online)和沙盒游戏等特点的 mmo。就上限定理而言,哪个数据库最适合它的需求?CA,AP,CP,为什么?
1 回答
CAP 理论的所有租户都必须在 MMO 中工作。数据库不会承担所有繁重的工作——服务器应用程序同样重要,甚至更重要。
视频游戏需要比数据库能够提供的更快的响应时间。这并不是说所有级别的 IT 基础架构和架构工作都没有到位以尽可能地消除瓶颈,但数据库并不是唯一负责流畅 MMO 体验的部分。
MMO 服务器进程中的大多数工作可能首先提交到内存,然后才假脱机到数据库。如果您只是要缓存应用程序启动时需要快速访问的所有内容,您甚至不需要 200 毫秒的响应时间。如果您不进行此缓存,那么无论您的数据库有多快或多激进,您都不会获得 200 毫秒的客户端响应时间。具有正确数据结构的内存更快。
有了所有这些缓存,大多数 CAP 保证就变得不那么有意义和不重要了。
...CAP 通常被用来排除在现代云计算系统的高弹性第一层中运行的服务的一致性。这些服务通常需要无状态或仅维护软状态(缓存数据),并且即使内部层服务暂时无法访问,也必须做出响应......
这不符合 MMO 的要求。MMO 服务器进程不是无状态的,并且不只是包含软状态(缓存数据)。他们将积极地预缓存大量的世界数据,以弥补数据库在提供几乎即时响应时间的保证方面的不足。
MMO 如何解决这些问题(基本上是缓存)的示例:
C
onsistency - 您可以使用数据局部性轻松解决此问题。MMO 世界中的大多数事情不会对其他任何事情产生影响。你不需要知道半个银河系以外的人在做什么,更不用说他们遇到的暴徒,或者他们在抢劫什么。所以你不需要数据库来提供它。因此,数据可以以多个 DB 之间的一致性无关紧要的方式进行分区。您需要保持一致的任何内容(不多——主要是您的角色/库存/邮件/银行/拍卖行)都可以保留在内存中,因此将具有高一致性,或者可能会在其他两个 CAP 轴之一上受到影响。A
可用性 - 您可以通过积极和算法侵入的缓存轻松解决此问题。有些数据很重要,在这种情况下,您可以缓存它。其他数据并不那么重要,在这种情况下,您并不总是需要它可用(例如,我在一致性下提到的那些可能会导致可用性失效)。P
artition Tolerance - 您可以通过缓存轻松解决失去对部分数据的访问权限的问题。内存总是可用的,你会把它塞满任何重要的东西。任何不重要的始终可以访问的东西都可能会因玩家的痛苦阈值较低而失去访问权(例如一致性下提到的事情)。
所以在这些中,C
持久性是最有价值的,因为可用性和分区容错性已经通过超激进和算法侵入性缓存来解决。即便如此,一致性仅对某些数据片段很重要。