cassandra中的地理感知分区

时间:2015-04-16 13:12:31

标签: geolocation cassandra bigdata

我目前正计划设置一个应该(迟早)全球可用的服务,对可用性和容错性有很高的要求。将具有高读取和高写入比率,系统应能够按需扩展。

我计划服务的一个更特殊的属性是,数据将极其绑定到某个地理位置 - 例如在99.99%的案例中,针对美国某个城市的数据将从未从欧洲查询(实际上,即使是某个城市的数据也不太可能从该城市旁边的城市查询)。

我想要最小化的是:

  1. 管理费用
  2. 网络延迟
  3. 不必要的数据复制(我不希望完全复制美国的欧洲数据)
  4. 在存储技术方面,我认为我最好的存储解决方案是cassandra。我在用例中看到的选项是:

    1. 每个地理位置使用一个完全隔离的cassandra集群,并结合手动配置的路由服务,为每个插入/选择查询选择正确的集群
    2. 部署全局集群并为某些地理位置定义多个数据中心,以确保该地区的高可用性
    3. 不使用数据中心部署全局群集
    4. 在不使用数据中心的情况下部署全局集群,并将分区操作为地理感知。我的计划是根据地理位置操作分区密钥的前3位(例如000:北美,001:南美,010:非洲,011:南欧/西欧等)并分配剩余的位使用哈希算法(类似于cassandras随机分区器)。
    5. 解决方案1的缺点可能是巨大的管理开销和大量的手工工作;第二种解决方案的缺点是大量不必要的数据复制;由于全世界的随机分区,第三种解决方案的缺点是网络延迟相当高。

      因此,从理论上讲,我最喜欢解决方案4。在这里,我将有相当数量的管理开销,少量不必要的数据复制和良好的可用性。但是,要实现这一点(据我所知),我需要一个ByteOrderPartitioning,这是很多来源的高度推荐。

      有没有办法在不使用ByteOrderPartitioning的情况下实现接近解决方案4的解决方案,或者这是ByteOrderPartitioning 可能有意义的情况还是我错过了一个明显的第五个解决方案?

1 个答案:

答案 0 :(得分:2)

重新考虑选项2.

它不仅可以解决您的问题。它甚至可以为您解决地理冗余问题。正如您所提到的,您需要具备高可用性。在一个数据中心死亡的情况下,在不同的数据中心中拥有一个副本听起来不错。

如果您已经决定不在DC之间复制,那么这也是一个选项。您可以在不同区域拥有多个DC,而无需在它们之间进行复制。