有很多软件假借分布式之名, 是伪分布式, 造成这个现象很大的原因是分布式系统的定义模糊不清. 我尝试定义分布式系统:
- share nothing
- co-operate
share nothing, 系统中存在多个独立的节点, 互相不知道其它节点. 某个节点可能知道存在着其它的节点, 但它不知道其它节点在哪, 有多少个. 即使知道在哪, 数量多少, 也不知道其它节点的内容.
co-operate, 协作. 节点之间遵循某种规则, 一起完成一项大的任务. 例如分布式数据库的 sharding, 不同的节点存在不同的数据, 它们数据之和成为一个整体.
根据这两项原则, etcd 不是分布式数据库, 只是一个多机多副本的单实例数据库, 也许可以称为单机数据库, 但它又确实使用了多机. etcd 的每一个节点都知道, 其它的节点的数据和自己的数据是完全相同的(应该如此). 所以, etcd 是伪分布式系统.
两个独立部署的 MySQL 实例不能自动作为一个分布式系统, 因为它们是独立的, 也许由使用者安排不同的用途, 但它们自身没有协作, 协作是由使用者来决定的. 如果非要借用分布式之名, 可以称为用户自己分布式系统.