如果你想拥有一个分布式系统(即“最终一致性”的东西),你需要人来构建、维护和操作它。
我发现有三类人对“最终一致性”的问题很少:
- 在分布式系统方面有扎实背景的人。他们已经了解了最终一致性拜占庭失败之类的东西。如果您了解Paxos与假期无关,那么您可能就是其中之一。
- 有网络编程经验的人。他们可能会错过理论背景,但对异步和“无全局时钟和计数器”范式有直观的理解。如果你拥有至少 8 本书理查德史蒂文斯你可能是其中之一。
- 非常有经验的编码人员,几乎没有接触过 RDBMS。内核人员,来自科学计算和游戏行业的人浮现在脑海中。
总而言之,这些人在就业市场上很受追捧。例如,75% 左右的分布式系统学者离开了运行大型、自行设计的分布式系统的机构,例如证券交易所。
借助 Hardoop、SimpleDB 和 CouchDB 等产品,整个事情变得更加简单,但在分布式系统技术上构建一些东西仍然是一个巨大的挑战。
另一方面,RDBMS 是一个非常好的工程。他们广为人知,他们的专业知识可在就业市场上获得。有很多不错的工具、教育机会和许多高技能的专家可以按小时租用。因此,请三思而后行,您无法继续使用 RDBMS 方法——也许再加上一些巧妙的作弊。我通常会向学生介绍 Lifejournal 架构。
对于分布式数据库,经验要少得多。这正是您迄今为止发现的建议如此之少的原因。
如果您决心使用“最终一致性”,我认为除了不成熟的工具之外,主要挑战是每个相关人员的心态。您的 API 用户(编码人员)和应用程序用户(您的员工和客户)是否愿意并且能够接受这种不一致?您可以对某些类别的用户隐藏它吗?我们不习惯计算机不一致的心态。有货或没有货。“也许”不是用户期望的答案。
还要记住,“最终”对算法设计者来说可能意味着很长一段时间。你能接受多长时间的不一致?
对于购物车应用程序,您可能希望真正实现分布式:使用客户端浏览器作为数据存储。在结帐时,您可以将购物车提交到服务器端批处理系统。这意味着对于目录,您需要只读高可用性(更容易),并且购物车提交是一个非常狭窄的界面,不需要交易。稍后处理订单没有(软)实时要求,因此更容易。
顺便说一句:上次我检查 E-Bay 架构时,它们在 RDBMS 中的位置很大,但从那时起它可能已经发生了变化。(编辑:它确实改变了 - 见评论)