1
2
基于哈希的解决方案的问题是移动用户。考虑下面的场景-您有3个用户和3个服务器。用户A有一个散列值,导致其连接被您的软件分配给服务器A,用户B连接到服务器B,用户C连接到服务器C。如果服务器B停机,或者您希望将用户B迁移到新的服务器D,因为服务器B超载-您不能,因为您的软件被编码为获取用户名散列值,并基于此连接到服务器。 另外,您也会遇到分发问题——用户A、B和C的散列可以很好地解析为服务器A,因此服务器B和C处于空闲状态。 我个人会在所有服务器之间复制用户数据库表,然后在启动时随机连接到一个服务器,找到他们实际的数据库服务器,然后在这一点上继续。这样您就可以轻松地移动用户,并且,如果您在至少两个服务器之间复制数据,那么在服务器崩溃时,您就有了冗余。 |
2
2
首先,我觉得有责任告诉你,如果你足够认真地考虑设计的话,你可能不需要把它分了。切分是最后的手段。下面是珀科纳的斯瓦茨男爵谈到的(不要错过幻灯片的直接链接): http://www.percona.tv/performance/baron-schwartz-high-performance-mysql-from-a-boring-architecture-ppc-2009 根据实际的建议。 要考虑的一件事是如何重新平衡应用程序。您从3个节点开始;在某个时刻添加第四个节点。如何迁移四分之一的数据?通过重新刷新每个用户?可能是个坏主意。要考虑的一件事是将模式划分为多个编号的模式,并将模式编号散列到数据库机器上。这样,您就可以通过只移动需要触摸的模式进行迁移,而不是重新刷新所有数据。因为模式的数量(数量)大于机器的数量,所以您也不能依赖散列来查找数据库机器,而是使用可以为迁移更新的静态映射。这样,如果您的一些用户比其他用户活跃得多,并且创建了一个歪斜,那么您也可以使用每台机器模式的非均匀分布——您可以手动重新分配负载,以便更好地工作。 您仍然需要将用户映射到模式。我一直在阅读的一个有趣的方法不是散列到桶中,而是使用 二 散列函数将散列到2个存储桶,并选择两个存储桶中加载最少的(由用户、记录或其他度量)作为目标。这会导致更为均匀的分布,但当需要为用户取回数据时,会导致检查这两个分布的开销。这可以通过缓存减轻,但仍然如此。不过,还是要考虑一下。 您可能需要考虑复制这些碎片——可能是异步的,作为后台进程,用于热备份。 最后,您考虑过替代技术吗?各种大表克隆虽然不提供关系模型,但在读写方面具有非常好的伸缩特性。退房 Cassandra 和 HBase . |
PellePetimeter · 内容被裁剪,然后缩放窗口 7 年前 |
Miguel · 绘制逻辑回归非标度值 7 年前 |
manidos · 具有多个定时器的NodeJS应用程序如何扩展? 8 年前 |
user2290362 · Numpy scale 3D阵列 9 年前 |
Christo S. Christov · 均匀缩放特定点 10 年前 |
VirtualProdigy · 使用surfaceview和画布缩放动画 10 年前 |