我们在每个数据中心都有一台由6台机器组成的系统,我们有三台数据中心。我们的应用服务器部署在所有数据中心的每台机器中。我们在所有三个数据中心部署的每个应用服务器中都有缓存层。
现在我们需要做的是:
截至目前,我们的系统设计如下:
我们有1780个内存映射文件,每个文件只包含特定的customer id's
数据集。并且每台机器都负责特定的内存映射文件,并在此基础上对系统进行分片。通常,每台机器负责大约150个主文件和150个辅助文件,因此每台机器都知道我正在服务的客户ID数据,并且我们的客户知道要为特定客户ID调用哪台机器。
我的问题是在这里我们使用文件作为概念来划分所有三个数据中心的“客户ID”。我不确定这会如何扩展。我正在研究Cassandra架构以及它们如何在内部进行,它们使用"vnodes"
和令牌范围来对数据进行分区。
问题: -
我们是否可以采用任何简化的方法来调整所有三个数据中心中每台机器的客户ID,而不是使用此预定义的1780文件概念?到目前为止,这个系统工作正常,但问题是我们正在考虑使用Kafka,我相信如果我们有1780个分区,Kafka的性能会降低。因此,当我们需要在数据中心的所有计算机上分割客户ID时,我试图了解人们如何解决这类问题。
注意:我们不能让每台机器保存所有客户的数据,因为我们有大量数据无法存储在单机内存中,因此我们对所有数据中心进行分片。
答案 0 :(得分:0)
是否有任何简化的方法我们可以适应shard the 所有三个数据中心的每台机器上的客户ID代替 使用这个预定义的1780文件概念?
嗯,这可能听起来太容易了,但我可以提出以下建议。
您的客户数据库共有T
台机器。您为机器0...T-1
编号。现在,您将属于ID = N的客户的所有信息都添加到计算机#N mod T
和#(N-1) mod T
。这是我能想象的最简单的分片键,但如果你需要它可能会更复杂。