分布式系统架构设计36式 – 第0式 - 设计总决
动机
在“不易、简易、变易”这三个范畴里,技术是属于“变易”范畴的,其千变万化;“方法论”是属于“简易”范畴的,其具有领域普适性的指导能力;而架构设计总决属于“不易”的范畴,其具有第一性原理的本质指导能力。本文的目的之一即是挖掘出分布式系统架构设计的第一性原理,使其可以应用于千变万化的不同的技术领域。
架构是由人设计出来的,其与设计的人的架构理念强相关,欲彻底了解一个产品的架构必须要能量化它的设计理念,从而才能更好的由现象到本质了解一个技术,因此本文的目的之二即是量化人的架构设计理念。
设计哲学
什么是分布式系统的设计哲学?首先这里的设计哲学不是产品的设计哲学,它是一种工程哲学,是分布式系统架构设计原则以及设计方法论的指导思想,是架构师的内功。其目的是为了指导架构设计的过程,克服架构设计难题从而达到最终的架构设计目标。不同的架构师有自己不同的设计哲学观,这里我提出分布式系统架构设计哲学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路径提升性能,这也是网络空间换时间;采用最新的硬件提升性能,这可以是计算换时间,也可以是存储或网络空间换时间。
小结
本文讲述了分布式系统架构设计总决,其可分为设计哲学、设计原则以及设计方法论,从而可以依据这三个方面量化人的设计理念。
分布式系统架构设计36式 – 第0式 - 设计总决相关推荐
- 分布式系统架构设计三十六式之服务治理 - 第一式 - 隔板模式
导读 日拱一卒,功不唐捐,分享是最好的学习,一个知识领域里的 "道 法 术 器" 这四个境界需要从 微观.中观以及宏观 三个角度来把握.微观是实践,中观讲套路,宏观靠领悟.本系列文 ...
- 插件式架构设计实践一:插件式系统架构设计简介
本系列博文将使用微软RIA技术解决方案Silverlight以及扩展性管理框架Managed Extensibility Framework(MEF),以插件式架构设计为导线,分享本人在从事基于微软S ...
- 《架构设计2.0大型分布式系统架构方法论与实践》三高笔记
目录 前言 高并发 高并发读 动静分离与CDN加速 缓存 并发读与Pipeline 重写轻读 读写分离 批量 高并发写 数据分片 任务分片 异步化 批量 高可靠 七板斧 高可用 高可用架构几个核心问题 ...
- 从Storm和Spark 学习流式实时分布式计算的设计
转自:http://www.dataguru.cn/thread-341168-1-1.html 流式实时分布式计算系统在互联网公司占有举足轻重的地位,尤其在在线和近线的海量数据处理上.而处理这些海量 ...
- 【大型分布式网站】抗住千万流量的大型分布式系统架构设计
一.大型分布式网站架构技术 1.1 大型网站的特点 用户多,分布广泛 大流量,高并发 海量数据,服务高可用 安全环境恶劣,易受网络攻击 功能多,变更快,频繁发布 从小到大,渐进发展 以用户为中心 免费 ...
- 【iOS架构】iOS ReactiveCocoa函数响应式编程
声明式编程 声明式编程(declarative programming)是一种编程范型,与命令式编程相对立.它描述目标的性质,让电脑明白目标,而非流程.声明式编程不用告诉电脑问题领域,从而避免随之而来 ...
- 【系统设计】分布式系统架构设计
1.目录 到底什么是架构设计 系统架构的演化发展 架构设计形式与方法 架构的一些实践经验 总结回顾与作业实践 2.到底什么是架构设计 什么是架构(Architecture) 架构(Architectu ...
- 从Elasticsearch来看分布式系统架构设计,真是666~
欢迎关注方志朋的博客,回复"666"获面试宝典 分布式系统类型多,涉及面非常广,不同类型的系统有不同的特点,批量计算和实时计算就差别非常大.这篇文章中,重点会讨论下分布式数据系统的 ...
- html5/css3响应式布局介绍及设计流程
html5/css3响应式布局介绍 html5/css3响应式布局介绍及设计流程,利用css3的media query媒体查询功能.移动终端一般都是对css3支持比较好的高级浏览器不需要考虑响应式布局 ...
最新文章
- python的编程模式-python编程(python开发的三种运行模式)【转】
- python可视化界面工具_8个流行的 Python可视化工具包,你喜欢哪个?
- 【转】SQL Server 2005 数据类型和.Net数据类型的对应关系
- IntelliJ IDEA部署javaweb项目
- 成都至柬埔寨金边定期直飞航线开通
- bottomnavigationview放大两边没有_有没有什么HAPPYEND的动漫?
- python中reversed函数,Python3
- 大数据Hadoop生态圈-组件介绍
- SPRD平台功耗调试分享
- 接口测试平台代码实现15:基于生态考虑的菜单重构+意见反馈功能设计
- 数据库中反引号的作用
- win10 nginx部署前端项目(静态资源服务器和HTML)
- 《浅谈-Android系统越用反应越慢的问题》
- 美元与人民币汇率 Python
- Java EE结构理解 与Dao模式 no7.
- 【保姆级·创建对象】如何通过Supplier创建对象
- 蓝牙baseband概述
- cgcs2000大地坐标系地图_CGCS2000 国家大地坐标系及其应用.ppt
- Python入门操作-时间序列分析的重要性
- ubuntu系统安装谷歌浏览器和搜狗输入法