现任 Salesforce 软件架构师的 Pat Helland 在他的 CIDR 2015 文章里回顾了不变性(immutability)架构设计的优点。Pat 认为,今天的计算与存储成本已大大降低,为大规模数据保存不变副本(immutable copies)在经济上变得可行,这样做有助于缓解协调方面的挑战。
Pat 对比了内部数据(inside data)与外部数据(outside data)的特性(见下表),并指出了采纳不变性架构的几点技术影响(注:Pat 将数据集定义为一个固定的、不可变的表的集合):
- 尽管数据集在物理上可以被改变,但在语义上是不变的(immutable)。
- 通过观测和监控数据集的读取量,可以发现新的优化点(如新增索引等)。
- 不变性是大数据(Big Data)的支柱。采用不变输入的函数式计算是幂等的,所以就算出错或重启也不要紧。
- 规范化在需要更新的数据库里是十分重要的;但对于不变的数据集,规范化不是必需的。
- 日志结构化文件系统(Log Structured File Systems)给不变性数据块带来高可用性(availability)。
表:对比内部数据与外部数据(出处:Pat Helland 的 CIDR 2015 文章)
与此同时,Jay Vyas 在 Red Hat 开发者博客上发文展示了如何用 Apache Spark 和 Cassandra 来创建不变的微服务(immutable microservices)。Jay 也谈到了构建不变微服务的好处:
本质上,不变微服务不需借助于任何重量级的安装器或配置管理就能部署,而且令负载平衡、高可用性和动态资源分享等成为可能。(.…) 不变微服务可以在任何环境下测试,因为他们对启动自己的编排层(orchestration layer)依赖很小。
不变性架构的优势在 Facebook 、 Lambda 架构和新型数据库Datomic 中均已有所体现,你做好迎接一趋势的准备了吗?
查看英文原文: Immutability Changes Everything Including Microservices
评论