探索分布式系统中的不可变架构
1. 分布式系统的挑战
分布式系统的构建充满了困难。在日常生活中,我们在使用网站购物时,可能会看到“请勿重复点击提交”的警告,或者有些网站在点击购买按钮后会将其禁用。这其实反映了分布式系统中的一个难题,网站开发者可能没有找到解决重复收费问题的有效办法。
再比如在火车上使用移动应用保存数据时,如果火车进入隧道,应用可能会卡顿。此时我们会面临一系列问题:火车能否在应用放弃前驶出隧道?网络恢复后应用能否自行修正?还是会丢失数据需要重新输入?
对于参与分布式系统创建的人员来说,不同角色有不同的职责:
- QA 人员需要设想所有可能的场景,并在实验室中进行复现。
- 开发人员要为各种异常和竞态条件编写代码。
- 架构师则要解决可能出现的故障和缓解措施的难题。
2. 不可变解决方案
分布式系统在编写、测试和维护方面都存在困难,它们不可靠、不可预测且不安全。传统构建分布式系统的过程很可能会遗漏影响用户的缺陷,但这并非个人的过错,只要依赖人工去发现、修复和缓解这些问题,就难免会有缺陷被遗漏。
不可变的概念为解决分布式系统问题提供了新思路。简单来说,不可变就是将数据记录下来,确保其永远不会被修改、更新或删除。不可变能够解决分布式系统的问题,原因在于每个不可变对象的副本都与其他副本一样可靠。只要数据不发生变化,保持远程副本的同步就变得非常简单。
3. 不可变面临的问题
然而,不可变与计算机的实际工作方式相悖。计算机的内存是有限的,它通过修改内存位置的内容来更新内部状态。因此,在计算机上对不可变数据进行建模面临两个主要问题:
超级会员免费看
订阅专栏 解锁全文

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



