Skip to content

Instantly share code, notes, and snippets.

@ideawu
Created December 11, 2020 11:19
Show Gist options
  • Save ideawu/b27df22ab229ea34bc7e9ed79263d821 to your computer and use it in GitHub Desktop.
Save ideawu/b27df22ab229ea34bc7e9ed79263d821 to your computer and use it in GitHub Desktop.
分布式系统的定义

有很多软件假借分布式之名, 是伪分布式, 造成这个现象很大的原因是分布式系统的定义模糊不清. 我尝试定义分布式系统:

  1. share nothing
  2. co-operate

share nothing, 系统中存在多个独立的节点, 互相不知道其它节点. 某个节点可能知道存在着其它的节点, 但它不知道其它节点在哪, 有多少个. 即使知道在哪, 数量多少, 也不知道其它节点的内容.

co-operate, 协作. 节点之间遵循某种规则, 一起完成一项大的任务. 例如分布式数据库的 sharding, 不同的节点存在不同的数据, 它们数据之和成为一个整体.

根据这两项原则, etcd 不是分布式数据库, 只是一个多机多副本的单实例数据库, 也许可以称为单机数据库, 但它又确实使用了多机. etcd 的每一个节点都知道, 其它的节点的数据和自己的数据是完全相同的(应该如此). 所以, etcd 是伪分布式系统.

两个独立部署的 MySQL 实例不能自动作为一个分布式系统, 因为它们是独立的, 也许由使用者安排不同的用途, 但它们自身没有协作, 协作是由使用者来决定的. 如果非要借用分布式之名, 可以称为用户自己分布式系统.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment