动机
在“不易、简易、变易”这三个范畴里,技术是属于“变易”范畴的,其千变万化;“方法论”是属于“简易”范畴的,其具有领域普适性的指导能力;而架构设计总决属于“不易”的范畴,其具有第一性原理的本质指导能力。本文的目的之一即是挖掘出分布式系统架构设计的第一性原理,使其可以应用于千变万化的不同的技术领域。
架构是由人设计出来的,其与设计的人的架构理念强相关,欲彻底了解一个产品的架构必须要能量化它的设计理念,从而才能更好的由现象到本质了解一个技术,因此本文的目的之二即是量化人的架构设计理念。
设计哲学
什么是分布式系统的设计哲学?首先这里的设计哲学不是产品的设计哲学,它是一种工程哲学,是分布式系统架构设计原则以及设计方法论的指导思想,是架构师的内功。其目的是为了指导架构设计的过程,克服架构设计难题从而达到最终的架构设计目标。不同的架构师有自己不同的设计哲学观,这里我提出分布式系统架构设计哲学9式,即:
抽象 分层 解耦 拆分 聚合 治理 模型 取舍 演化
这9个词每个词展开来讲都可以是一篇大论,不同的架构设计师有自己不同的设计哲学观,也就形成了不同的架构设计原则以及设计方法论,并不存在一个普适的、统一的架构设计哲学,适合自己的才是最好的,每个人的领悟不同,因此这里也就不展开来讲。
设计原则
同设计哲学一样,不同的架构设计师有着自己不同的设计原则观,在这里,我认为最合适的分布式系统的架构设计原则有二,即:
-
最佳物种原则
-
功能非功能原则
最佳物种原则
最佳物种原则其来源是生物的物种进化理论,讲的是产品原则,其可以一分为二:
1,最佳原则。天上飞的是鸟儿,地上奔跑的是走兽,水里游的是鱼儿。架构设计由大及小,由外及内也是如此。比如计算用的是分布式计算、存储用的是分布式存储,调度用的是分布式调度,其负责的领域各不相同,不存在一个全能的分布式中间件可以最佳的完成计算、存储、调度三合一的功能。从小处来讲也是如此,比如分布式系统内部的注册、路由、成员管理、服务提供、复制、安全、算法模型、存储等各有其自己最佳的设计方案,再依据这些最佳组件、最佳方案组合出一个最佳分布式中间件,从而计算的归计算、存储的归存储、调度的归调度。
2,进化原则。万物由微而显,由简而繁,物竞天择,优胜劣汰,好的架构是根据业务演化而来,而不是一开始就完美的设计好的。但是不管是微还是显,其最本质的功能还是不变的,一个产品从POC到MVP再到企业级达标其最核心的功能是不变的,比如计算、存储与调度。
功能非功能原则
功能非功能原则,讲的是技术原则,架构的目的是提供该领域的功能,然而功夫却是体现在非功能。比如常见的几个深度学习框架在功能上都具有深度学习训练与推理的能力,但是让用户决定是否选择这个框架的主要决定性因素却体现在其非功能,比如性能、可用性、可靠性、易用性、服务支持以及版权等。
从大体上来说,分布式系统的架构设计都是围绕其功能与非功能的量化设计来进行的,非功能又可以一分为二,即:质量与约束,比如:
客户对产品质量的需求一般可以用四个字概括,即”多、快、好、省“,然而客户在产品交付的时间、质量与成本上的取舍,客户原来遗留的系统,当前国家的法律法规,市场上的技术趋势以及竞争对手与行业标准等都属于当前客户需要考虑的约束条件。
用户的产品质量需求一般称为使用质量需求,其一般包括:合适的性能(Performant)、可用性(Availability)、可靠性(Reliability)、可伸缩性(Scalability)、韧性(resilience)、可观测性(Observability)、可服务性(Serviceability)、安全性(security)、易用性(usability)、可运维性(operability)等,而用户的约束需求包括 用户的业务环境、用户的能力以及用户群的特征等。
团队的质量需求指的是产品开发周期内的质量需求,高质量的代码几个最重要的要素有:可测试性( testability)、可维护性(Maintainability)、可扩展性( extensibility)、可读性( readability)等,而团队的约束需求有:资源预算、上级要求、开发团队的能力、产品规划、此外还有信息安全以及产品运行环境 的约束等。
设计方法论
同设计哲学与设计原则一样,不同的架构设计师有着自己不同的设计方法论,在这里,我认为分布式系统的架构设计方法论可以总结成以下口诀,即分布式9法10功能口诀,如下:
分布式9法:
少读少写少依赖
业务拆业务合
功能拆性能聚
时空换同异换
硬件顺天性
服务需治理
数据保一致
哪都不可靠
事事慎权衡
分布式10功能:
提供 注册 配置 调用 路由
监控 追踪 治理 编排 安全
在分布式系统里几乎所有的功能与设计思路都可以用这个“9法10功能”口诀来解读,例如“时空换同异换” 讲的是性能优化的路数,解读开来说即是:时间换空间、空间换时间、同步换异步、异步换同步。例如:采用cache的功能可以减少计算的时间,这是存储空间换时间从而提升性能;采用批处理的方式提升性能,这是减少计算时间;采用同步换异步的方式提升性能也是减少计算时间;减少IO的数据量从而提升性能,这是存储空间换时间;减少IO路径提升性能,这也是网络空间换时间;采用最新的硬件提升性能,这可以是计算换时间,也可以是存储或网络空间换时间。
小结
本文讲述了分布式系统架构设计总决,其可分为设计哲学、设计原则以及设计方法论,从而可以依据这三个方面量化人的设计理念。