位置独立性:构建分布式系统的新视角
1. 分布式系统与位置依赖的现状
在不久之前,大多数程序都在单台计算机上运行。然而,随着 JavaScript 在网页浏览器中的普及、手机应用的兴起以及云环境中微服务的发展,如今我们编写的大多数程序都运行在多台计算机上。曾经分布式系统是一种特殊的存在,而现在它已成为常态。为了适应这一需求,我们需要更新一些默认的假设。
其中一个需要更新的默认假设是数据具有特定位置。有些系统试图将远程对象当作本地对象来处理,例如 DCOM 使用对象标识符让代理看起来像远程对象的本地实例;远程过程调用(RPC)则试图通过一个看似普通函数的接口来隐藏网络通信的实际情况。这些系统存在的问题已有诸多讨论,在此不再赘述。
实际上,位置相关的假设更为微妙。即便我们用消息替代 RPC,用 URL 替代对象标识符,也很容易默认数据有其特定位置。每当我们确定“真相源”或“记录系统”时,就做出了这样的假设。当单个节点生成唯一标识符时,我们也依赖于位置。我们在一台机器上进行编程的默认模式,会渗透到整个系统的编程行为中。
我们期望系统具备的许多行为都依赖于位置。比如,我们期望项目按顺序排列,系统拒绝重复名称,当用户更新对象的属性时,该属性会具有用户刚赋予的值。实际上,期望属性只有单一值也是一种依赖于位置的假设。
依赖于位置的系统在该位置不可用时会出现异常。相反,如果我们追求位置独立性,就能构建出响应更迅速、更具弹性和可靠性的系统。这些系统可以在不与远程节点通信的情况下自主运行,能够容忍网络故障而不引入缺陷,并且用户单独做出的决策在其他节点和用户知晓时也会得到尊重。
2. 基于不可变性的建模
位置假设的核心
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



