【发布时间】:2015-04-16 13:12:30
【问题描述】:
我目前正计划设置一项服务,该服务应该(迟早)全球可用,对可用性和容错性有很高的要求。将有很高的读取和写入比率,并且系统应该能够按需扩展。
我计划的服务的一个更特殊的属性是,数据将非常绑定到某个地理位置 - 例如。在 99.99% 的情况下,针对美国城市的数据将永远不会从欧洲查询(实际上,即使针对某个城市的数据也不太可能从该城市旁边的城市查询)。
我想要最小化的是:
- 管理开销
- 网络延迟
- 不必要的数据复制(我不想在美国完全复制用于欧洲的数据)
在存储技术方面,我认为我最好的存储解决方案是 cassandra。我看到的用例选项是:
- 在每个地理位置使用完全隔离的 cassandra 集群,并结合手动配置的路由服务,该服务会根据插入/选择查询选择正确的集群
- 部署全球集群并为某些地理位置定义多个数据中心,以确保该地区的高可用性
- 在不使用数据中心的情况下部署全局集群
- 在不使用数据中心的情况下部署全局集群,并将分区操作为地理感知。我的计划是根据地理位置(例如 000:北美,001:南美,010:非洲,011:南/西欧等)操作分区键的前 3 位并分配剩余位使用哈希算法(类似于 cassandras 随机分区器)。
解决方案 1 的缺点可能是巨大的管理开销和大量的人工工作;第二种解决方案的缺点是大量不必要的数据复制;第三种解决方案的缺点是由于世界范围内的随机分区,网络延迟非常高。
因此,理论上,我最喜欢解决方案 4。在这里,我将拥有相当多的管理开销、少量不必要的数据复制和良好的可用性。然而,为了实现这个(据我所知),我需要一个 ByteOrderPartitioning,许多来源都强烈反对它。
有没有办法在不使用 ByteOrderPartitioning 的情况下实现接近解决方案 4 的解决方案,或者这是 ByteOrderPartitioning可能有意义的情况,还是我错过了明显的第五个解决方案?
【问题讨论】:
标签: geolocation cassandra bigdata