【问题标题】:Geo-aware partitioning in cassandracassandra 中的地理感知分区
【发布时间】:2015-04-16 13:12:30
【问题描述】:

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

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

我想要最小化的是:

  1. 管理开销
  2. 网络延迟
  3. 不必要的数据复制(我不想在美国完全复制用于欧洲的数据)

在存储技术方面,我认为我最好的存储解决方案是 cassandra。我看到的用例选项是:

  1. 在每个地理位置使用完全隔离的 cassandra 集群,并结合手动配置的路由服务,该服务会根据插入/选择查询选择正确的集群
  2. 部署全球集群并为某些地理位置定义多个数据中心,以确保该地区的高可用性
  3. 在不使用数据中心的情况下部署全局集群
  4. 在不使用数据中心的情况下部署全局集群,并将分区操作为地理感知。我的计划是根据地理位置(例如 000:北美,001:南美,010:非洲,011:南/西欧等)操作分区键的前 3 位并分配剩余位使用哈希算法(类似于 cassandras 随机分区器)。

解决方案 1 的缺点可能是巨大的管理开销和大量的人工工作;第二种解决方案的缺点是大量不必要的数据复制;第三种解决方案的缺点是由于世界范围内的随机分区,网络延迟非常高。

因此,理论上,我最喜欢解决方案 4。在这里,我将拥有相当多的管理开销、少量不必要的数据复制和良好的可用性。然而,为了实现这个(据我所知),我需要一个 ByteOrderPartitioning,许多来源都强烈反对它。

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

【问题讨论】:

    标签: geolocation cassandra bigdata


    【解决方案1】:

    重新考虑选项 2。

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

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

    【讨论】:

    • 我同意在发生中断的情况下拥有 一两个 备份 DC 是个好主意,但我不喜欢运送全部的想法每个地理位置的数据,因为这很容易导致每个地理位置的存储需求增加 10 倍,并且位置之间的流量可能增加 100 倍。
    • 所有数据必须运送到每个位置的原因是什么?你可以指定它应该去哪里。您可以将复制限制为仅复制到邻近城市。
    • 这种复制到邻近位置的限制正是我所需要的。但是在阅读了几篇关于数据分区和复制的文章之后,似乎只能为每个 DC 指定一个复制因子,但是我无法操纵某个日期只存储在一个(或可能是一个备份)DC 中
    猜你喜欢
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    相关资源
    最近更新 更多