摘要

这是一篇架构师思考方法论的学习笔记,原文对什么是架构,什么是架构师,架构师如何定义和分析问题进行了比较深刻的探究。

一,什么是架构

架构的三要素:

  • 职责明确的模块或者组件
  • 组件间明确的关联关系
  • 约束和指导原则

三要素是关于架构这个名词通用的定义,不局限于软件开发领域。下面具两个例子便于理解:

例1:软件架构
学习架构师的思考方法

  • 模块:模型、域
  • 关系:一对一、一对多(模型);依赖(域)
  • 原则:单一职责、开闭原则、里氏替换原则等等

例2:组织架构
学习架构师的思考方法

  • 模块:部门
  • 关系:管理 or 上报
  • 原则:各种管理原则、财务原则

下面我们具体讨论的还是软件开发中的架构。

二,什么是架构师

架构师这个角色的职责是:识别并定义问题,创建、选择或调整架构,从而找到最优的方案,解决问题。

这其实也是架构师做事的一般套路:定义问题->确定架构->提出方案->落地拿结果。这四步中,越是前面的步骤,越是重要,越是抽象,也越是困难,越能体现架构师的功力。因此有必要探讨下问题的本质。

1, 什么是问题

问题就是事物的矛盾。哪里有没有解决的矛盾,哪里就有问题。——毛泽东

架构师要定义和解决的问题,就是特定领域中的矛盾,解决了矛盾,就得到了发展,取得了收益

2, 区分问题、手段和挑战

问题和手段经常被混淆在一起,其实这三个概念可以看做矛盾的不同层次。
学习架构师的思考方法
每一个问题可以向下不断展开不断细化,下一级的问题是上一级问题的具体解决手段,当你把“提升性能”当做你Owner的问题时,提升帧率、提高页面秒开率、优化启动耗时就成为了你的具体解决手段;而手段的下一级问题,就是你将面临的挑战,比如你要优化网络耗时,你要面临的挑战就有弱网环境、一些国家区域的带宽问题等等。

3,如何定义问题

亨利福特说,如果我问客户需要什么,他们会告诉我,他们需要一匹更快的马。

定义问题经常需要思考问题背后的问题,为什么客户需要一匹更快的马?可能客户想要更快的日常交通方式,上升了一个层次后,我们立刻找到了更好的解决方案:造车。

当然当我们无法准确的分辨问题的时候,我们还可以不断缩短描述问题句子,比如提炼主谓宾,如果还不能清晰的描述那么在这几个词里再找出最最最关键的词,尤其是主语或者宾语中的词汇非常重要,它有可能就是重点,只是我们无情的忽略它了。

后面两节,介绍架构师工作中要弄清的概念,帮助大家在和不同职位的人沟通时提升效率。

三,架构的分类

和业务需求方、产品经理、技术设计聊天,他们都会提到架构,但他们口中的架构不是一回事。区分清楚工作中常用的架构分类,可以让你在开会时把不同职位的人口中的架构对号入座,以提升沟通效率。

名称 受众 目的 内容
产品功能架构 产品使用者,产品经理 指导用户,吸引用户 从用户角度,阐述产品功能模块
业务能力架构 研发人员,业务人员 用于理解业务内在的概念和联系,有助于我们分析和理解业务需求 业务能力,能力中的子能力
应用逻辑架构 研发人员,架构师,技术管理者 指导软件研发 阐述架构中各模块的职责:如系统模型,技术模块,技术模块的关系,技术模块的核心抽象,如何用设计模式来让架构符合软件设计原则,等等
应用物理(部署)架构 运维人员,架构师,技术管理者 指导运维部署软件 逻辑架构如何落地,比如使用何种微服务容器,逻辑架构的模块落地时应该是package,还是应用,是不是要跨机房部署等等
基础设施架构 架构师,技术管理者 选择什么样的中间件,存储,监控等等

四,能力和职责的区别

产品同学一般讲能力,而架构同学一般讲职责,区别如下:

能力
指一个产品能做什么,如中台本身是一个产品,对使用中台的人来说,我们应该讲中台的能力。
职责
指架构内模块的职责,用来指导开发。比如对中台的研发,应该讲架构的职责,依赖,约束。

简答来说,能力是对产品的使用者来说的,职责是对架构的实现者说的。

原文链接

相关文章: