我目前正计划设置一个应该(迟早)全球可用的服务,对可用性和容错性有很高的要求。将具有高读取和高写入比率,系统应能够按需扩展。
我计划服务的一个更特殊的属性是,数据将极其绑定到某个地理位置 - 例如在99.99%的案例中,针对美国某个城市的数据将从未从欧洲查询(实际上,即使是某个城市的数据也不太可能从该城市旁边的城市查询)。
我想要最小化的是:
在存储技术方面,我认为我最好的存储解决方案是cassandra。我在用例中看到的选项是:
解决方案1的缺点可能是巨大的管理开销和大量的手工工作;第二种解决方案的缺点是大量不必要的数据复制;由于全世界的随机分区,第三种解决方案的缺点是网络延迟相当高。
因此,从理论上讲,我最喜欢解决方案4。在这里,我将有相当数量的管理开销,少量不必要的数据复制和良好的可用性。但是,要实现这一点(据我所知),我需要一个ByteOrderPartitioning,这是很多来源的高度推荐。
有没有办法在不使用ByteOrderPartitioning的情况下实现接近解决方案4的解决方案,或者这是ByteOrderPartitioning 可能有意义的情况还是我错过了一个明显的第五个解决方案?
答案 0 :(得分:2)
重新考虑选项2.
它不仅可以解决您的问题。它甚至可以为您解决地理冗余问题。正如您所提到的,您需要具备高可用性。在一个数据中心死亡的情况下,在不同的数据中心中拥有一个副本听起来不错。
如果您已经决定不在DC之间复制,那么这也是一个选项。您可以在不同区域拥有多个DC,而无需在它们之间进行复制。