导读:架构师是一个既能掌控整体又能洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物。看似完美的“人格模型”背后,是艰辛的探索。本文对多年的架构经验进行系统性地总结,帮助更多架构师在进阶这条路上走得更“顺畅”,姿态更“优雅”。

架构师职责

架构师不是一个人,他需要建立高效卓越的体系,带领团队去攻城略地,在规定的时间内完成项目。

架构师需要能够识别定义并确认需求,能够进行系统分解形成整体架构,能够正确地技术选型,能够制定技术规格说明并有效推动实施落地。

按 TOGAF 的定义,架构师的职责是了解并关注实际上关系重大但未变得过载的一些关键细节和界面,架构师的角色有:理解并解析需求,创建有用的模型,确认、细化并扩展模型,管理架构。

从业界来看对于架构师的理解可以大概区分为:

  • 企业架构师:专注于企业总体 IT 架构的设计。
  • IT 架构师-软件产品架构师:专注于软件产品的研发。
  • IT 架构师-应用架构师:专注于结合企业需求,定制化 IT 解决方案;大部分需要交付的工作包括总体架构、应用架构、数据架构,甚至部署架构。
  • IT 架构师-技术架构师:专注于基础设施,某种软硬件体系,甚至云平台,提交:产品建议、产品选型、部署架构、网络方案,甚至数据中心建设方案等。

架构思维

自顶向下构建架构

要点主要如下:

1.首先定义问题,而定义问题中最重要的是定义客户的问题。定义问题,特别是识别出关键问题,关键问题是对客户有体感,能够解决客户痛点,通过一定的数据化来衡量识别出来,关键问题要优先给出解决方案。

2.问题定义务必加入时间维度,把手段/方案和问题定义区分开来。

3.问题定义中,需要对问题进行升层思考后再进行升维思考,从而真正抓到问题的本质,理清和挖掘清楚需求;要善用第一性原理思维进行分析思考问题(通过第一原理,我把事情升华到最根本的真理(本质),然后从最核心处开始推理……)。 第一性原理请看《优秀架构师必须掌握方法论(第一性原理)》

4.问题解决原则:先解决客户的问题(使命),然后才能解决自己的问题(愿景);务必记住不是强调我们怎么样,而是我们能为客户具体解决什么问题,然后才是我们变成什么,从而怎么样去更好得服务客户。

5.善用多种方法对客户问题进行分析,转换成我们产品或者平台需要提供的能力,比如仓储系统 WMS 可以提供哪些商业能力。

6.对我们的现有的流程和能力模型进行梳理,找到需要提升的地方,升层思考和升维思考真正明确提升部分。

7.定义指标,并能够对指标进行拆解,然后进行数学建模。

8.将抽象出来的能力诉求转换成技术挑战,此步对于技术人员来说相当于找到了靶子,可以进行方案的设计了,需要结合自底向上的架构推导方式。

9.创新可以是业务创新,也可以是产品创新,也可以是技术创新,也可以是运营创新,升层思考、升维思考,使用第一性原理思维、生物学(进化论--进化=变异+选择+隔离、熵增定律、分形和涌现)思维等哲科思维可以帮助我们在业务,产品,技术上发现不同的创新可能。可以说哲科思维是架构师的灵魂思维。

自底向上推导应用架构

先根据业务流程,分解出系统时序图,根据时序图开始对模块进行归纳,从而得到粒度更大的模块,模块的组合/聚合构建整个系统架构。

基本上应用逻辑架构的推导有4个子路径,他们分别是:

  1. 业务概念架构:业务概念架构来自于业务概念模型和业务流程;
  2. 系统模型:来自于业务概念模型;
  3. 系统流程:来自业务流程;
  4. 非功能性的系统支撑:来自对性能、稳定性、成本的需要。

效率、稳定性、性能是最影响逻辑架构落地成物理架构的三大主要因素,所以从逻辑架构到物理架构,一定需要先对效率、稳定性和性能做出明确的量化要求。

自底向上重度依赖于演绎和归纳。

如果是产品方案已经明确,程序员需要理解这个业务需求,并根据产品方案推导出架构,此时一般使用自底向上的方法,而领域建模就是这种自底向上的分析方法。

对于自底向上的分析方法,如果提炼一下关键词,会得到如下两个关键词:

1.演绎:演绎就是逻辑推导,越是底层的,越需要演绎:

  • 从用例到业务模型就属于演绎;
  • 从业务模型到系统模型也属于演绎;
  • 根据目前的问题,推导出要实施某种稳定性措施,这是也是演绎。

2.归纳:这里的归纳是根据事物的某个维度来进行归类,越是高层的,越需要归纳:

  • 问题空间模块划分属于归纳;
  • 逻辑架构中有部分也属于归纳;
  • 根据一堆稳定性问题,归纳出,事前,事中,事后都需要做对应的操作,是就是根据时间维度来进行归纳。

领域驱动设计架构

大部分传统架构都是基于领域模型分析架构,典型的领域实现模型设计可以参考DDD(领域驱动设计),详细可以参考《实现领域驱动设计》这本书,另外《UML和模式应用》在领域建模实操方面比较好,前者偏理论了解,后者便于落地实践。

领域划分设计步骤:

1.对用户需求场景分析,识别出业务全维度 Use Case;

2.分析模型鲁棒图,识别出业务场景中所有的实体对象。鲁棒图 —— 是需求设计过程中使用的一种方法(鲁棒性分析),通过鲁棒分析法可以让设计人员更清晰,更全面地了解需求。它通常使用在需求分析后及需求设计前做软件架构分析之用,它主要注重于功能需求的设计分析工作。需求规格说明书为其输入信息,设计模型为其输出信息。它是从功能需求向设计方案过渡的第一步,重点是识别组成软件系统的高级职责模块、规划模块之间的关系。鲁棒图包含三种图形:边界、控制、实体,三个图形如下:

3、领域划分,将所有识别出的实体对象进行分类;

4、评估域划分合理性,并进行优化。

基于数据驱动设计架构

随着 IoT、大数据和人工智能的发展,以领域驱动的方式进行架构往往满足不了需求或者达不到预期的效果,在大数据时代,在大数据应用场景,我们需要转变思维,从领域分析升维到基于大数据统计分析结果来进行业务架构、应用架构、数据架构和技术架构。这里需要架构师具备数理统计分析的基础和 BI 的能力,以数据思维来架构系统,典型的系统像阿里的数据分析平台采云间和菜鸟的数据分析平台 FBI。

上述四种思维,往往在架构设计中是融合使用的,需要根据业务或者系统的需求来选择侧重思维方式。

有了架构思维的指导,具体有没有通用/标准化的架构框架以更好的执行架构设计?答案是肯定的,请关注我,后续将为您揭晓。

优秀架构师必须具备的架构思维(自顶向下和自底向上架构设计思维)相关推荐

  1. 什么是系统架构师,系统架构师应具备哪些能力?

    目录 什么是系统架构师? 系统架构师应具备哪些能力? 什么是系统架构师? 系统架构师是一个既需要掌控整体,又需要洞悉局部瓶颈,并依据具体的业务场景给出解决方案的团队领导型人物.一个架构师需要有足够的想 ...

  2. JAVA EE架构师需要具备的知识

    JAVA EE架构师需要具备的知识 1.构架师胚胎(程序员):学习的知识是语言基础.设计基础.通信基础等,应该在大学完成,内容包括 java.c.c++.uml.RUP.XML.socket 通信(通 ...

  3. Java架构师要具备哪些能力?

    正所谓,不想成为架构师的程序员不是好程序员.架构师是IT架构中的灵魂人物,不仅如此,架构师的薪资待遇远高于程序员.那么,想要成为一名架构师需要具备哪些能力呢? 在具体分析架构师该具备的素质前,我们首先 ...

  4. [架构之路-3]:架构师 - 软件架构师也是魔法师,架构师应具备的四大方面的技能

    目录 前言: 一.业务能力(业务领域)-- 面向业务 1.1 业务场景 1.2 业务技能 二.沟通能力(管理领域) -- 面向"人" 三.技术能力(计算机领域) -- 面向计算机 ...

  5. 腾讯云tca架构师认证题库内容全面吗?腾讯云tca架构师要具备哪些能力?

    现在科技的发展非常快速,有的时候已经到了让人难以相信的程度,比如大家当前比较关注的云计算领域,它的变化非常大,很多朋友都来没有弄明白是怎么一回事呢,但是这个市场发展的前景是非常好的,有很多朋友都想去参 ...

  6. 测试架构师需要具备哪些能力?

    目录 前言 为什么软件项目需要架构设计? 测试架构师需要解决什么问题? 测试架构师需要具备哪些能力? 测试工程师如何培养架构能力? 前言 相比于我们常见的研发架构师,测试架构师是近几年才出现的一个岗位 ...

  7. python架构师是做什么的_什么是架构师?架构师应该具备什么样的能力?

    前段时间网上最流行的三个问题:" 我是谁?"." 我从哪里来?"." 要到哪里去?".这三个问题不只是网上流行的问题也是哲学家们最常思考的问 ...

  8. 前端架构师需要具备的技能_成为前端开发人员需要具备的最高技能

    前端架构师需要具备的技能 With reference to Web Development, Front end development is mainly client-side developm ...

  9. 什么是架构师?架构师应该具备什么样的能力?

    前段时间网上最流行的三个问题:" 我是谁?"." 我从哪里来?"." 要到哪里去?".这三个问题不只是网上流行的问题也是哲学家们最常思考的问 ...

  10. 架构师应具备的概要技能

    1 技术领域知识 架构师可以不是技术专家,但必须拥有良好的设计技巧和程序开发技术,与最新技术保持同步,了解宏观上的问题而不必了解每个细节.软件架构不仅仅是设计. 2 业务领域知识   架构必须务实,拥 ...

最新文章

  1. 转发和重定向的区别?
  2. SpringBoot(二):设置springboot同一接口程序启动入口
  3. MoeCTF 2021Re部分------Algorithm_revenge
  4. Linux下安装spf13-vim
  5. python中jupyter notebook 去掉警告
  6. yacc 简易计算机规则,Lex Yacc 学习笔记(2)- 简单计算器
  7. android screencap 源码,android后台截屏实现(3)--编译screencap
  8. spark之常见的机器学习算法
  9. 一种低成本的机械动平衡方法 郑氏橡皮泥动平衡法
  10. 贴片晶振的焊接方法和注意事项
  11. R语言——(四)、数据读入与预处理
  12. 激光雷达障碍物检测与追踪实战——基于欧几里德聚类的激光雷达障碍物检测
  13. 超全总结!一文囊括李航《统计学习方法》几乎所有的知识点!
  14. 关于DS12C887 以外部RAM方式访问
  15. 辛弃疾最经典的10首词
  16. 研发管理心得,从技术小白做到CTO(研发总监)的辛酸之路
  17. NLP中文分词工具比较
  18. linux中隐藏得木马程序,Linux远控分析
  19. java time_java常用类Time
  20. 历经10年,我写了一个没人用的编程语言

热门文章

  1. H3CSE题库有关问题
  2. 了解单片机解密的一些知识
  3. “绿坝”最终会不了了之
  4. html swf修改参数,HTML网页中如何向swf传递参数
  5. 树莓派安装拼音输入法(此处为谷歌拼音输入法)
  6. C++ 捕获程序异常奔溃minidump
  7. 从程序员到合格的软件设计师
  8. 学术界布局区块链,日本东京大学开始提供区块链课程
  9. java 中文转英文性能最快
  10. 今日头条张一鸣:做CEO要避免理性的自负