文 | YoungChen
封面图片 | Unsplash
旧文重新排版,方便阅读
本文内容不仅仅局限于 Dynamo
1. 什么是 Dynamo
亚马逊在业务发展期间面临一些问题,主要受限于关系型数据库的可扩展性和高可用性,希望研发一套新的、基于 KV 存储模型的数据库,将之命名为 Dynamo。
相较于传统的关系型数据库 MySQL,Dynamo 的功能目标与之有一些细小的差别,例如 Amazon 的业务场景多数情况并不需要支持复杂查询,却要求必要的单节点故障容错性、数据最终一致性(即牺牲数据强一致优先保障可用性)、较强的可扩展性等。
可以肯定的是,在上述功能目标的驱使下,Dynamo 需要解决以下几个关键问题:
它要在 CAP 中做出取舍,Dynamo 选择牺牲特定情况下的强一致性(这也是大多数新兴数据库的权衡)优先保障可用性
它需要引入多节点,通过异步数据流复制完成数据备份和冗余,从而支持单节点故障切换、维持集群高可用
它需要引入某种 “再平衡(rebalance)” 算法来完成集群的自适应管理和扩展操作,Dynamo 选择了一致性哈希算法
2. Dynamo 和 MySQL 的关系
有的人有这种疑问,其实二者没有什么关系,Dynamo 叙述的是一种 NoSQL 数据库的设计思想和实现方案,它是一个由多节点实例组