我正在设计一个需要高可用性和可扩展性的应用程序,希望采用事件一致性数据模型来实现。出于多种原因,我知道并理解为什么这不是许多解决方案中受欢迎的架构选择,但在我的情况下很重要。
我正在寻找处理分布式/文档式数据库时需要注意的实际建议、最佳实践和问题点,特别是与电子商务(购物车样式)应用程序相关的领域,这些应用程序传统上使用关系型数据库更容易实现。
我知道使用这些类型的数据库具有挑战性,但 Google 和 Ebay 使用它们,所以它们肯定不是那么难 ;-) 任何建议都将不胜感激。
我正在设计一个需要高可用性和可扩展性的应用程序,希望采用事件一致性数据模型来实现。出于多种原因,我知道并理解为什么这不是许多解决方案中受欢迎的架构选择,但在我的情况下很重要。
我正在寻找处理分布式/文档式数据库时需要注意的实际建议、最佳实践和问题点,特别是与电子商务(购物车样式)应用程序相关的领域,这些应用程序传统上使用关系型数据库更容易实现。
我知道使用这些类型的数据库具有挑战性,但 Google 和 Ebay 使用它们,所以它们肯定不是那么难 ;-) 任何建议都将不胜感激。
顺便说一句:上次我查看E-Bay的架构时,他们在关系型数据库方面很强大,但自那以后可能已经发生了变化。(编辑:确实发生了变化-请参见评论)
一篇文章在http://highscaleability.com上概述了纽约时报如何在WAN上实现RabbitMQ和Cassandra以实现容错和高可用性。
MongoDB通过写入关注点的实现提供了很大的灵活性,可以平衡一致性和可用性。他们有出色的文档,详细介绍了如何使用它以及所有的注意事项(包括分区)。他们实施两阶段提交来维护网络上的状态(在其配置服务器上)。
谷歌在这个主题上有一篇很棒的论文,他们的photon项目实现了一个高度可扩展、高度可靠的系统,其中心是paxos算法和其他几种技术。它也恰好非常一致(端到端延迟约为10秒),容错性强,可以抵御区域性故障。所有基于分布式计算模型的系统都建立在CAP和BASE之上。这里的主要问题是,如果我们的系统提供可用性和分区容错性,我们就无法实现真正的一致性,但我们可以实现最终一致性。
最终一致性背后的思想是,每个节点始终可用于服务请求。作为权衡,数据修改会在后台传播到其他节点。这意味着系统随时可能不一致,但数据仍然大体准确。
来源: http://www.techspritz.com/eventual-consistency-and-base-model/
如何使用关系型数据库实现高可用性和可扩展性是众所周知的,有大量的知识可以用来指导如何做到这一点!
谷歌是一个特殊情况,不适用于大多数网站,它有非常高的查询量、非常大量的数据,并且最重要的是,与大多数用户没有服务级别协议。在Web搜索中没有正确答案,只有更好的答案,对于普通用户来说,谷歌已经足够好了,如果谷歌在搜索列表中漏掉了一个重要页面,作为用户你也不能抱怨。
E-Bay是一个相当不同的情况,他们以理论上更低的价格换取用户和客户接受较差的服务 - 这对他们来说很好,但这并不是每个企业的选择。