[博客翻译]预测分布式系统的未来


原文地址:https://blog.colinbreck.com/predicting-the-future-of-distributed-systems/


在分布式系统的世界里,一些显著的变化正在悄然发生。对象存储正逐渐成为数据的基石,传统的事务处理和分析工具正融合为一,新的编程模型承诺带来更安全、可移植、应用状态管理简化或效率提升。这些变化不仅影响着系统的编程方式,还影响着它们的运营模式。尽管我渴望接纳这些创新,但选择前进的道路并非易事。

如果新技术只是提供微小的增量价值,大多数人会质疑投资的必要性。即使一项技术看似能带来突破性的改变,如果没有明确的迁移路径,或者迁移过程风险高,人们往往会选择谨慎。许多交易和分析系统转向使用对象存储,因为这带来了明显的价值提升,而选项的存在降低了风险。然而,对于新的编程模型,我们如何选择前进的道路仍显得模糊。如果人们无法理性地理解投资的价值,他们可能会继续沿用已知的技术,毕竟“没人会因为买了IBM而被解雇”。

我早就预见到事务处理和分析系统会发生变革,特别是关于对象存储和编程模型,但这并非因为我特别聪明或预测能力强,而是因为我有幸亲身体验了其中的一些。虽然我不能预知未来,但我愿意分享我的思考。

tuscan-doors-1.jpg

单扇门决策与双扇门决策

在莱克斯·弗里德曼的播客中,杰夫·贝佐斯阐述了如何通过单扇门决策和双扇门决策来管理风险。单扇门决策是最终决定,或是需要大量时间和精力才能改变的。这类决策要求我们放慢脚步,确保涉及正确的人,并尽可能收集信息。高层领导应在这些决策中发挥指导作用。

有些决策至关重要,一旦做出就难以回头,这就是单扇门决策。你需要深思熟虑,如果能找到其他分析方法,就应该暂停并执行。
——杰夫·贝佐斯

双扇门决策则相对不那么重要,如果做错了,可以随时调整方向。这类决策应迅速作出,通常由个人或小团队负责。高层不应在双扇门决策上浪费时间,因为这会削弱决策者的自主权。
——杰夫·贝佐斯

组织必须准确区分单扇门和双扇门决策。对双扇门决策应用重型决策流程代价高昂,但更糟的是,当一个原本是双扇门决策的问题被整个组织强制执行多年时,个人或团队可能做出了错误的单扇门决策。许多技术选择本质上是单扇门决策,因为它们需要大量投资,且更换成本高、耗时长。

对象存储

云对象存储已经存在近二十年,尽管它成熟可靠,但创新不断。由于对向后兼容性、系统集成和互操作性的关注,每次对对象存储的投资都像是双扇门决策,这将进一步推动采用、投资和创新的步伐。

多年前,我利用Azure Blob Storage的页面blob构建了一个工业数据共享的持久消息队列。对象存储提供了对象租约、原子写入、持久性和复制,使我们能够构建简单可靠的系统,无需担心领导选举、共识问题、数据复制等复杂性。读取端独立于写入端,无状态,可以独立扩展。尽管我当时所在的公司未能充分利用这一基础设施,但我深知对象存储架构的优势,并期待在未来再次遇到。

如今,从关系数据库、时序数据库到消息队列、数据仓库,甚至事务工作负载,许多系统都在核心架构中使用了对象存储,而不仅仅是分析工作负载或批量处理。此外,对象存储的功能也日益丰富,包括跨区域复制、不可变性、版本控制、分级存储、备份、读写一致性等。这些特性有助于满足行业规定、合规性、成本优化、数据生命周期管理、灾难恢复等需求,并以标准化的方式应用于服务中,无需在每个应用程序中直接实现。因此,对象存储不仅在架构层面吸引人,还简化了操作和一致性。

虽然我无法精确预测对象存储的未来发展,但我预计其在事务和分析系统中的流行度将持续增长。例如,将数据存储在Amazon S3的Parquet文件中似乎是个稳妥的选择。性能方面,随着延迟降低、带宽增加、缓存优化或索引改进,读取速度有望进一步提升,因为这对大量使用S3的应用程序有益。如果出现比Parquet更吸引人的存储格式,如Apache Iceberg或Delta Lake,我可以依赖开放表格式来管理这种演变,如果不想重新处理历史数据,或者在访问时或作为一次性批处理任务进行重处理。我不担心选择哪种开放表格式,因为它们都很优秀,功能趋同,并支持互操作性和迁移。

编程模型

未来十年最具颠覆性的变化可能是我们编程系统的方式,这将深刻改变软件开发和运行的本质,甚至我们对软件和基础设施的理解。大多数人尚未完全理解这一点。许多人看不到价值,几乎所有人都对如何实现这一转变持怀疑态度。虽然最终结果清晰,但前进的道路却充满挑战,因为所有的事物似乎都是单扇门决策,阻碍了采纳。

我多年来一直在期待编程模型的转变,这并非源于我个人的洞察,而是通过使用Akka这样的分布式计算工具,包括演员模型和流处理。我看到这些基本原理如何解决我在工业计算中长期面临的挑战,如流量控制、资源限制、状态管理、并发、分布、扩展和容错,而且是从根本原则出发。例如,演员模型可以用来表示物联网设备,管理状态,但执行和分布留给运行时,以线程安全的方式进行。Reactive Streams提供了一种接口,表达程序逻辑,同时让运行时处理系统动态,确保可靠性。我能预见这些模型逻辑上可以扩展到状态ful函数,甚至更远,正如我在2018年的主题演讲《从快数据到企业关键操作技术》中