【架构设计】| 总结/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

架构 | 聊聊我心中的架构设计观相关推荐

  1. 聊聊实时数仓架构设计

    什么是实时数仓 首先需要明确什么是实时数仓,百度百科与维基百科都没有给出具体说明,哪究竟什么才是实时数仓呢?是不是可以通过实时流实时获取数据就是实时数仓?或者说流批一体就是实时数仓?在或者全面采用实时 ...

  2. 架构之路_DDD领域驱动设计总结

    推荐书籍:领域驱动设计 - 软件核心复杂性应对之道 - Eric Evans. 视频教程:DDD 微服务落地实战视频教程 一.DDD基础名词概念 领域驱动设计(DDD),它是针对复杂系统设计的一套整软 ...

  3. 朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素

    朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素 [下载文本PDF进行阅读] 本文我会来说说我认为架构评审中应该看的一些点,以及我写设计文档的一些心得.助你在架构评审中过五关斩六将,助 ...

  4. 架构漫谈:我心中的架构

    本文为<架构漫谈>系列第一篇.本文将会从:"什么是架构","架构能解决什么问题","架构和框架的区别"三个点来着重讨论,本文系个 ...

  5. 云时代架构阅读笔记十五——架构设计思维(一)

    对于架构设计人们已经提出了许多方法,分类为:工件驱动的方法:用例驱动的法:模式驱动的方法:领域驱动的方法.一个经典的架构设计过程模型,沿用了RUP中迭代增量的思想,由分析.描述.选择.构造和组合5个阶 ...

  6. 周梁伟:聊天室架构 如何跳出传统思维来设计?

    周梁伟 现任网易云信 IM云服务器端开发负责人,浙江大学计算机学院硕士.2011年加入网易,先后担任网易后台技术中心与网易大数据平台资深开发工程师,负责即时通讯领域的产品开发与应用服务器与大数据领域战 ...

  7. .NET 分布式架构开发实战之二 草稿设计

    前言: 本篇之所以称为草稿设计,是因为设计的都是在纸上完成的.反映了一个思考的过程. 本篇的议题如下: 1) 第一个数据层草图的提出 2) 对数据访问层的思考 3) 第二个数据层草图的提出 1.数据层 ...

  8. Apache架构师总结的30条设计原则!

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入新技术 Srinath|ImportSource 今天把 RPC 框架乞丐 ...

  9. 微服务架构 接口交互问题_架构师的故事:设计微服务架构

    架构师在软件项目中的作用是提供待解决问题的工作模型.架构师的工作是提供脚手架,开发人员将根据这些脚手架构建他们的代码,使应用程序所有部件都组合在一起. 在构建微服务架构时,项目的架构师主要关注以下3个 ...

最新文章

  1. Linux Graphic DRI Wayland 显示子系统
  2. 初始化稀疏矩阵 matlab,访问稀疏矩阵 - MATLAB Simulink - MathWorks 中国
  3. Python基本数据类型(三)
  4. 7个管理和优化网站资源的 Python 工具
  5. .gitignore失效 无法忽略node_modules问题
  6. 简单的hibernate环境搭建、自动生成model/配置/hibernate.xml配置文件
  7. 火星文字充斥网络 网友怒骂其侮辱汉字
  8. hc06发送at无回应_(完结)(温言穆霆琛)全章节~~全文阅读无弹窗广告
  9. 解决to_hdf() 报错ImportError: Missing optional dependency ‘tables‘. Use pip or conda to install tables.
  10. pandas rolling方法_Pandas处理时间序列数据的20个关键知识点
  11. flanneld,flannel和cni逐步深入
  12. ORK进行物体检测过程中出现的报错及解决方案
  13. 响铃:号牌上又领先了一步,小鹏汽车正在极速狂奔
  14. 重走长征路---OI每周刷题记录——hzwer
  15. 微信公众平台接口程序语音天气
  16. 学计算机推荐的平板电脑,适合学生的平板电脑_学生平板推荐2020
  17. 榨干运营成本:一亿之后再省两亿
  18. M2 MacBookAir售价是多少 M2 MacBookAir配置如何
  19. python熊猫入门
  20. 在Proteus新建项目

热门文章

  1. 鼠标手势识别 [Flash]
  2. redis基础一_常用指令
  3. PHP优于Node.js的五大理由
  4. 职场智慧之如何提升自己在公司的价值
  5. 股市红涨绿跌色系定义真的是中国特色吗?
  6. 把我的爱送给你――C#3.5(这题目似乎写错了)
  7. [Forward] 因为火炬,所以迟到,工资照扣
  8. 将组策略编辑器添加到控制面板
  9. 极客时间和极客学院_极客历史记录的本周:Twitter的诞生,OS X十周年以及太空停留时间最长的时代即将结束...
  10. api游戏编程鼠标选择拖动_如何选择合适的游戏鼠标