架构 | 聊聊我心中的架构设计观

【架构设计| 总结/Edison Zhou


在各种面试场合,可能都会被问到“你对架构设计的理解”,我也在最近的转正答辩中被技术委员会负责人问到,这里我重新整理一下思绪,聊聊我心中的的架构设计观。

1系统的本质是什么?

作为一个技术人,恐怕会被经常问到系统架构设计的问题,即便是刚刚毕业的应届生,可能也对6大设计原则 和 23种设计模式 了然于胸(虽然可能是感性认识较多)。

自认为自己还不算一名合格的系统架构师,但是对于系统架构设计的理解也在不断的深入,今天斗胆聊聊我心中的系统架构设计观。

要聊架构设计,就得先理解什么是系统?又或者说系统的本质是什么?

系统其实是由多个要素 及 连接关系 组成的共同体,它不仅局限于我们所熟悉的IT系统,它更是我们现实生活中的各种模型。但是,现实中我们往往首先看到的是要素,但是我们真正需要的修炼的是透过表现看清要素及其连接关系

举个例子,就拿一只表来说,可能一般的人只会观察其中的表象即时针,秒针与表盘,但是有洞察力的人却会透过表象去看其中的成百上千个零件要素及其连接关系,最终得到一个钟表系统的模型。


系统论总结了要素之间的连接关系大致有这几种:因果链、增强回路、调节回路 及 滞后效应。在这几种关系中,最重要的就是 增强回路

例如,润总在《商业洞察力》中举了一个例子,微软食堂(不得不说,别人家的公司就是好,还有这么好的食堂)。微软员工对于微软食堂的口味厌倦了,但是供应商的动力却不大,因此存在一条如下图所示的调节回路。微软人力部想到的办法是改变系统模型,所谓改变系统模型就是就是改变系统中的结构模块之间的关系,让结果自己发生。因此,微软选了两家供应商,一家提供午餐,一家提供晚餐,每个季度员工评价是喜欢午餐还是晚餐,如果喜欢晚饭多,那么午餐和晚餐的供应商进行交换(要知道,做午餐比作晚餐利润多)。如果连续两个季度即半年午餐都胜出,那么更换晚餐供应商。可以看出,这个模型采用了竞争的机制,类似于“鲶鱼效应”让微软食堂又焕发生机,成为了员工的最爱。从源头来看,这是因为在调节回路的基础上,改变系统模型增加了一条增强回路,从而激发了供应商的积极性。

一个好的系统(或模型),往往同时具有以上几种关系,但都具有较为稳定的增强回路,在推动着增长的飞轮持续前进。

2架构设计核心认知

有了对系统的基础认知,架构设计也就不难理解了,它们是类似的。

抽象地来看,架构也是由元素 和 关系组成的

在架构设计中,较为稳定的、可复用的部分 会变成组件(Component)或 应用模块(Module),对应着架构中的元素

元素对应着确定性内容的处理,是看待这个世界的稳定视角;

在架构设计中,对模块或服务的拆分,是考验一个架构师的基本功,毕竟分而治之是降低复杂度的基本方法。但是,元素并不是拆分得越细越好,3个模块能搞定的功能,非要写10个模块的过度设计,只能是给当前阶段的发布计划添乱。

而那些面向不确定性的设计,则会变成协作方式,为可能的扩展做准备,这对应着架构中的关系

关系对应着不确定性内容的处理,是看待这个世界的响应视角;

稳定的关系,在架构中一般会用SOA、微服务架构来表示,做好服务调用即可;而不稳定的关系,则在架构中会会用EDA(事件驱动架构)来表示,做好异步处理(如发布订阅、最终一致性等)即可。

3好的架构设计

抽象来看,好的架构设计跟优秀的组织协作一样,既能帮助IT系统做好各模块的专业分工,又能体现模块间的协作精神。

从工程师到架构师,有一种能力是需要不断提升的,那就是对复杂业务的拆分能力、对可复用部分的抽象能力、对拆分过程的颗粒度把握,以及对未来变化的考量和设计

如何让架构有足够的“应变和适应能力”,则与架构师对业务的理解程度息息相关。

基于上面对架构设计的认知,我们或许可以这样认为,对架构层面的【专业分工】和【协作精神】的理解,是架构师的基础与核心的能力

我们可以从近几年火热的微服务架构 和 企业中台架构来理解:

微服务架构

我们都知道,在微服务架构中,每个服务的功能和数据处理是封装在一起的(和SOA类似),服务治理、监控、调用 等基础设施能力已经被封装在了框架(如Spring Cloud)中使得开发团队可以足够聚焦业务实现。

可以看到在微服务体系下,微服务开发框架、K8s、Service Mesh、Multi Runtime的出现,技术架构部分中的很多职责已经被抽象出来,它们都在体现着一个基本的原则:让系统的分工更明确、责任更清晰

人类的理解能力有限。内容包含过多的元素,会导致理解困难,需要将其拆分;

有了专业的分工,也就是催生了服务的拆分,通常业界流行且认可的方法论就是DDD(领域驱动设计),通过划分 核心域、通用域 与 支撑域,为微服务的拆分提供理论指导。

企业中台架构

在一定时期内,一个企业的技术架构的功能或组件基本是稳定的,但是业务的运转却是动态变化的。因此,企业中台架构又被搬上舞台,它往往被赋予了快速响应市场变化的使命,其关键词包括了:架构解耦、消除烟囱、能力复用...

中台架构强调“企业级能力复用”,从架构的视角来看,它突出了“可重复部分的抽象”,阿里巴巴对组织结构调整,将职能型组织调整为可复用产品型组织—共享服务中心,建设微服务中台为前台业务提供快速接入的可复用能力。可以看到,它改变的是组织关系,映射到系统层面,它也体现着协作精神。

4康威定律

说完微服务架构 和 企业中台架构,我们再来看看在半个世纪前的一篇文章,它就是康威定律。

 

在康威的这篇文章中,最有名的一句话就是:

Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations. - Melvin Conway(1967)

中文直译大概的意思就是:设计系统的组织,其产生的设计等同于组织之内、组织之间的沟通结构。

看看下面的图片,再想想Apple的产品、微软的产品设计,就能形象生动的理解这句话。

用通俗的说法就是:组织形式等同系统设计

一个系统的设计,其实也体现着团队的组织形式。小而美的团队注定比大而全的团队的沟通效率要高,做事效率要快。

换句话说,你想要什么样的系统,就搭建什么样的团队。如果你的团队分成前端团队,.NET/Java后端开发团队,DBA团队,运维团队,你的系统就会长成下面的样子:

相反,如果你的系统是按照业务边界划分的,大家按照一个业务目标去把自己的模块做出小系统,小产品的话,你的大系统就会长成下面的样子,即微服务的架构。

因此,按业务来划分团队,能让团队自然的自治内聚,明确的业务边界会减少和外部的沟通成本,每个小团队都对自己的模块的整个生命周期负责,没有边界不清,没有无效的扯皮。

此外,亚马逊的Bezos有个逗趣的比喻,如果2个披萨不够一个团队吃的,那么这个团队就太大了。事实上一般一个互联网公司小产品的团队差不多就是7人左右。

可以看到,康威定律所表述的基本原则也是元素及其连接关系,专业分工与协作精神,而这一切的出发点,都是为了降低成本 和 提高效益 以适应不断变化的市场环境。

End总结

人类在解决很多复杂问题时,都会采用类似的思维流程:将复杂问题拆解为简单问题,逐一解决再合并,并将可复用的知识抽象,以实现举一反三。

从抽象来看,架构设计的本质在于解决元素及其之间的连接关系,朝着专业分工和协作精神的方向不断演进,最终实现企业的降本增效的目的。

年终总结:Edison的2020年终总结

数字化转型:我在传统企业做数字化转型

C#刷题:C#刷剑指Offer算法题系列文章目录

.NET面试:.NET开发面试知识体系

.NET大会:2020年中国.NET开发者大会PDF资料


????扫码关注EdisonTalk

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299492.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GeneralUpdate 2021.08.14更新公告

GeneralUpdate是基于.net standard2.0开发的一款(c/s应用)自动升级程序。该组件将更新的核心部分抽离出来方便应用于多种项目当中目前适用于wpf,控制台应用,winfrom。1.Notice预计会使用Blazor开发GeneralUpdate官网,介…

这可能是这次疫情最搞笑的事情,可看着看着却鼻酸了

全世界只有3.14 % 的人关注了青少年数学之旅最近在广州地铁,有人戴了这种自制的硬核“面罩”!广州地铁后来回应说,这些人其实也戴了口罩,否则光戴着桶还是不可以进地铁的目测这种“全方位防护”效果应该不错网友爆料说&#xff0c…

面试问外观模式???这不就是设计模式里面的吗?我给你上一课吧,面试官

面试问外观模式???这不就是设计模式里面的吗?我给你上一课吧,面试官外观模式介绍实现步骤 1Shape.java步骤 2Rectangle.javaSquare.javaCircle.java步骤 3ShapeMaker.java步骤 4FacadePatternDemo.java步骤 5外观模式 …

[转]IIS的完整控制类

using System;using System.Data;using System.DirectoryServices;using System.Collections; namespace CreateWebDir{ /// <summary> // IISManager 的摘要说明。 /// </summary>public class IISManager{ //定义需要使用的 private st…

让Windows XP系统快上几倍的三个绝招

让Windows XP系统快上几倍的三个绝招1、减少开机磁盘扫描等待时间&#xff0c;开始→运行&#xff0c;键入chkntfs /t:0 2、删除系统备份文件&#xff1a;在各种软硬件安装妥当之后&#xff0c;其实XP需要更新文件的时候就很少了。 开始→运行&#xff0c;敲入&#xff1a;sfc.…

ab st语言编程手册_西门子PLC编程SCL和LAD谁才是王者?一起讨论一下

现在很多大品牌的中高级 PLC 都支持国际电工委员会 IEC61131 标准中规范的五种编程语言的混合编程&#xff0c;即梯形图&#xff08;LD&#xff09;、结构化文本(ST)、流程图&#xff08;SFC&#xff09;、指令表&#xff08;IL&#xff09;和功能块(FB)。在这五种编程语言中&a…

获取本地IP和mac等信息

1获取mac protected string getHostMacName() { string mac ""; ManagementClass mc; mc new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection moc mc.GetInstances(); foreach (ManagementObject mo in moc) { if …

ASP.NET Core自定义响应内容

问题在业务开发中&#xff0c;对Web API的返回格式有一定要求&#xff0c;需要是定制化的Json结构&#xff0c;用于前端统一处理&#xff1a;{Status : 0,Message: "",Info : xxx }Status表示响应的状态码&#xff0c;0为成功&#xff1b;Message表示错误消息&#x…

这个被称为20世纪最伟大人物的最强理科生,到底有多强,你根本不了解

▲ 点击查看从素有“计算机界诺贝奖”之称的图灵奖&#xff0c;距离现在已经走过了半个多世纪。在这50多年间&#xff0c;诞生了几十位顶尖的计算机科学家以及几十项科技成就。从智能设备到5G&#xff0c;从无人车到AI&#xff0c;在计算机的进化版图中&#xff0c;计算机从一个…

蚁族之痛:过年如过关

看着腾讯网长大&#xff0c;从十年前到现在&#xff0c;现在QQ.com也是我认为门户里做得最好的了。看了一下今天的话题《蚁族之痛&#xff1a;春节恐归症》&#xff0c;感觉说得很对&#xff0c;说出了我们这代人的心声。以前听大人们讲年关的来头&#xff1a;说是农民最怕的就…

倾情研发十年记

写在亚洲研究院成立十周年、亚洲工程院成立五周年之际今天是微软亚洲研究院成立十周年的日子&#xff0c;微软亚洲工程院也刚刚度过它的五周岁生日。在这个特殊的时刻&#xff0c;回望这些年来全心投入研发的日子&#xff0c;我心中充满了自豪和对未来的期待。十年前&#xff0…

华为二面!!!被问常用API,这也太偏门了吧,我秀了一波hhhh~

华为二面!!&#xff01;被问常用API&#xff0c;这也太偏门了吧&#xff0c;我秀了一波hhhh~常用API一、API概述二、Scanner类代码三、Random类代码四、* ArrayList类**存储基本数据类型**代码五、匿名对象昨天我去了华为面试&#xff0c;问我常用API&#xff0c;我以为我被搞到…

空值为0非空为1_万达广场4周年,1降到底!0元送万张杂技团门票、人气餐饮6.8折,这波周年庆我先锁为敬...

作为向来宠你没商量的国民商场4周年店庆&#xff0c;福利当然少不了&#xff01;黄金克减zui高100元餐饮全单6.8折&#xff0c;更享折上zhe更有街舞争霸赛、王者荣耀争霸赛等精彩活动等你打卡&#xff0c;?就问你来不来&#xff1f;精品超市&#xff0c;实力宠粉没有套路&…

linux注意的一些地方

assert宏的原型定义在<assert.h>中&#xff0c;其作用是如果它的条件返回错误&#xff0c;则终止程序执行 #include <assert.h>void assert( int expression ); assert的作用是现计算表达式 expression &#xff0c;如果其值为假&#xff08;即为0&#xff09;&…

处理多个选择结果

比如说选择段落 $("p”)&#xff0c;这样就会把页面的所有段落都选中。jQuery提供.each()方法来对选中的结果进行循环处理&#xff0c;而且在每次执行函数时&#xff0c;都会给函数传递匹配元素在选中结果里所处位置的数字值作为参数&#xff08;从零开始的整形变量&#…

随手拈来尽是折劲额事体

昨天中午&#xff0c;justina同学请我去港丽吃饭&#xff0c;世界顿时美好了&#xff01; 猛地发现&#xff0c;港丽的酸菜鱼竟然非常好吃&#xff0c;除了价钱贵&#xff0c;基本没有缺点了。 吃饭的时候&#xff0c;看到两件有劲的事情&#xff0c;一件比一件更折劲&#xff…

清北学霸的书单居然那么有讲究?看看你比学霸少看了哪些书......

一直以来&#xff0c;少年物理学家为大家分享了许多物理知识、科学家的小故事&#xff0c;以及生活中的趣味科学&#xff0c;得到了许多粉丝们的支持&#xff01;为了表达对大家的感谢&#xff0c;在新春之际&#xff0c;我们决定发起“最美学习萌娃”评选活动&#xff0c;借助…

FastGithub让Github畅通无阻

前言我近半年来被github的抽风虐得没脾气了&#xff0c;虽然我有代理的方式来上网&#xff0c;但代理速度并不理想&#xff0c;而且有时代理服务一起跟着抽风。这时候&#xff0c;我会搜索“github访问不了”相关题材&#xff0c;其中有“Github镜像服务器加速版”的&#xff0…

.Net性能调优-垃圾回收!!!最全垃圾回收来了

目前项目开发基本都基于.NetCore 3.1以上了&#xff0c;有些老版本的规则和概念也没有列出来,低版本的垃圾回收类型和内存释放方式会有所不同 垃圾回收器为什么存在 开发人员不必手动释放内存。 有效分配托管堆上的对象。 回收不再使用的对象&#xff0c;清除它们的内存&…

平流式初沉池贮砂斗计算_城市污水处理厂产泥量的计算

污泥是污水处理过程的副产物&#xff0c;包括筛余物、沉泥、浮渣和剩余污泥等。污泥体积约占处理水量的0.3%~0.5%左右&#xff0c;如水进行深度处理&#xff0c;污泥量还可能增加0.5~1倍。一、污水处理污泥分类及特性1、按成分不同分污泥&#xff1a;以有机物为主要成分。其主要…