主页

索引

模块索引

搜索页面

3.2.2. 架构师

定义

  • 所谓架构师,就是掌握大量设计理念和原则、落地到各种语言及附带工具链(生态)下的实践方法、垂直行业模型理解,定制系统模型设计和工程实践规范细则,进而控制30万+行代码项目的开发便利性、可维护性、可测试性、运营质量的资深研发群体。

如何成为好的架构师

职责:

1. 确保团队有个共同的技术愿景
    * 帮助团队向客户交付他们想要的系统
2. 只和一个团队工作
    * 技术引领者
3. 负责整个项目组的技术愿景
    * 协调多个团队间的工作

难做好的原因:

响应客户的需求变更
放弃一开始设计出完美系统的想法
设计一个可以不断演化的框架
新知识可以很容易的应用到系统中

架构师设计

如何进行性能测试,性能测试的流程是什么?性能测试的主要关注指标有哪些?

怎么理解领域驱动设计DDD? DDD的优缺点是什么?

导致系统故障无法正常访问的原因有哪些?保障系统稳定高可用的方案有哪些? 如何保护数据库中存储的用户密码,用时序图展示「用户密码」加密存储与登录验证的过程

架构师的主要能力:

1. 编程
2. 基础技术掌握能力
3. 常用技术产品的理解与应用能力
4. 性能优化与分析故障的能力
5. 常用架构模式和框架的理解 与应用能力
6. 建模以及设计文档的方法和能力
7. 业务理解与功能模块及非功能模块拆解能力
8. 快速学习能力
9. 沟通与领导能力

Shawn:“PPT 架构师”的口头禅是“细节不讨论”,一个优秀的架构师,需要对细节有多少考虑呢:

华仔:这是一个非常好的问题,也是很多同学困惑的问题,我分享一下我的做法,以我学习 Elasticsearch 为例,具体的做法是:
1. 搭建一个单机伪集群,搭建完成后看看安装路径下的文件和目录,看看配置文件有哪些配置项,不同的配置项会有什么样的影响。
2. 执行常用的操作,例如创建索引,插入、删除、查询文档,查看一下各种输出。
3. 研究其基本原理,例如索引、分片、副本等,研究的时候要多思考,例如索引应该如何建,分片数量等
4. 和其他类似系统对比,例如 Solr、Sphinx,研究其优点、缺点、适用场景。
5. 模拟一个案例看看怎么应用。例如,假设我用 Elasticsearch 来存储淘宝的商品信息,我应该如何设计索引和分片。
6. 查看业界使用的案例,思考一下别人为何这么用;看看别人测试的结果,大概了解性能范围。
7. 如果某部分特别有兴趣或者很关键,可能去看源码,例如 Elasticsearch 的选举算法
8. 如果确定要引入,会进行性能和可用性测试。

不建议拿到一个系统一开始就去读源码,效率太低,而且效果也不好

架构师沟通能力:

架构师是业务和技术之间的桥梁,同时通常情况下还会确定整体项目的步骤。
因此,架构师的沟通能力非常重要,
既要说得动老板,让老板支持自己的设计决定;
又要镇得住技术人员,让技术人员信服自己的设计选择;
同时还要能够理解业务,结合业务不同发展阶段设计合适的架构,所以也要参与产品和项目决策。
由于架构设计过程中存在很多判断和选择,而且不一定都有明确量化的标准,因此不同的人有不同的看法是普遍情况。
这种情况下架构师既需要专业能力过硬,又需要具备良好的沟通技巧,才能促使业务、项目、技术三方达成一致。

当然,架构师的核心能力还是技术能力,过硬的技术才是良好沟通的基础,
否则单纯靠沟通技巧甚至花言巧语,一次两次可能奏效,但后面被打脸打多了,也就没人信任了。

架构师的职责:

制定规范 + 指导落地

架构师根据业务需求所制定的合理且可落地的技术规范,我们将这样的规范称为架构。

微服务架构师需要具备以下基本职责:

1. 分析业务需求并切分微服务边界
2. 定义架构规范与文档标准
3. 确保微服务架构顺利落地
4. 改善微服务架构并提高开发效率

微服务架构师必须面对并克服这些挑战:

1. 架构需要适应不断变化的业务需求
2. 架构具备稳定性、扩展性、安全性、容错性等
3. 使技术团队深刻理解微服务思想
4. 展现微服务架构的价值

架构师的内功主要包含三部分:

1. 判断力
    能够准确判断系统的复杂度在哪里
2. 执行力
    能够使用合适的方案解决复杂度问题
3. 创新力
    能够创造新的解决方案解决复杂度问题

提升内功方法:

1. 经验
    设计过的系统越多、系统越复杂,架构师的内功也就越强,
    不管是成功的架构,还是失败的架构,
    不管是踩坑的经验,还是填坑的经验,都将成为架构师内功的一部分。
2. 视野
    掌握的知识和技能越多、越深,架构师的内功也就越强,
    他山之石可以攻玉,站在巨人的肩膀上会看的更高更远。
3. 思考
    经验和视野都是外部输入,还要消化,将其变为我们自己的营养,这就是思考的作用。
    思考能够将经验和视野中的模式、判断、选择、技巧等提炼出来为我所用,思考也能促使我们产生新的创意和灵感。

总的指导原则是:积累经验,拓宽视野,深度思考

其他

架构师核心是把知识串起来,构建一个完整的认知,不留疑惑:

大部分知识是不需要深入细节的,只在你需要的时候深入,但深入的时候要很深。

架构师绝对不是要把自己打造为全才。
架构师掌控全局的核心思想是打通经络,让自己的内力在全身自然流通,浑然一体。
在不影响理解的情况下,你需要放弃很多实现细节的专研,
    但有一天你需要细节的时候,你能够知道存在这些细节,并且快速钻研进去。

架构师并不是一个纯技术岗位。我们从软件工程的视角来看,架构师的职责就是要对软件工程的执行结果负责,这包括:按时按质进行软件的迭代和发布、敏捷地响应需求变更、防范软件质量风险(避免发生软件质量事故)、降低迭代维护成本。

从技能来说,我们可能把架构师能力去归结为:

1. 理需求的能力
2. 读代码的能力
3. 抽象系统的能力

架构师修炼之道,更难的是在心性上,这包括:

1. 同理心的修炼,认同他人的能力
2. 全局观的修炼,保持好奇心和学习的韧性
    并不是所有的技术都值得深耕。我们也都没有这个精力去这么做
    要做到的是,随时想深入耕耘就能深入
3. 迭代能力的修炼,学会反思,学会在自我否定中不断成长
    学会否定自己

备注

架构师需要有自己的信仰。我们需要坚持对业务进行正交分解的信念,要坚持不断地探索各类需求的架构分解方法。“一个个业务只读、接口稳定、易于组合的模块 + 组合的方法论”

备注

作为架构师,事情优先级的排列是第一位的,有太多重要的事情值得去做。

其他

  • 架构师一定要负责整个系统中最核心和最难的地方编写,并且设计好团队合作开发方式,能根据编程经验看到未来的变化

  • 如果一个团队里需要一个架构师,一定是一位代码能力最好的,能够负责核心业务的开发,并且不能脱离实际业务

架构师职责:

架构师需要建立高效卓越的体系,在规定的时间内完成项目
架构师需要:
    1. 识别定义并确认需求
    2. 进行系统分解形成整体架构
    3. 正确地技术选型
    4. 制定技术规格说明并有效推动落地
架构师的角色:
    1. 理解并解析需求
    2. 创建有用的模型
    3. 确认并细化扩展模型
    4. 管理架构

软件架构层级

应用级:

1. 最低层级的架构
2. 层级低,但是很详细
3. 这种层级的交流一般是在一个开发团队内展开

解决方案级:

1. 架构的中间层
2. 关注一个或多个满足业务需求的应用,即商业方案
3. 这之中有些设计是高层次的,但大部分还是低层次的设计
4. 这种层级的交流开始涉及多个开发团队

企业级架构:

1. 架构的最高层级
2. 关注多个设计方案
3. 这种架构的设计层次高且抽象,因此也需要方案级和应用级的架构师对此进行细化
4. 这种层级的架构需要多个组织进行沟通

架构师可以被看作是不同工作组之间的粘合剂:

1. 横向: 在业务部和开发人员或者不同的开发团队之间架起沟通的桥梁
2. 纵向: 在管理者和开发人员之间架起桥梁
3. 技术: 将不同的技术或应用整合在一起

解决方案架构师

工作方式理解:

1. 了解和挖掘客户痛点,项目定义,现有环境管理
2. 梳理明确高阶需求和非功能性需求
3. 对客户问题已经存在什么解决方案
4. 沟通,方案建议,多次迭代,交付总体架构
5. 架构决策

职责:

从客户视图看:
    1. 坚定客户高层信心: 利用架构和解决方案能力,帮助客户选择相关解决方案
    2. 解决客户中层问题: 利用相关解决方案,帮助客户解决业务问题,获得业务价值
    3. 引领客户 IT 员工: 技术引领,方法引领,产品引领
从项目视图看:
    1. 对接管理部门: 汇报技术方案,进度,技术沟通
    2. 对接 PM, 项目 PM: 协助项目计划,人员管理等。负责所有技术交付物的指导
    3. 对接业务部门和需求人员: 了解和挖掘痛点,帮忙梳理高级业务需求,指导需求工艺
    4. 对接开发: 产品支持,技术指导,架构指导
    5. 对接测试: 配合测试计划和工艺制定。配合性能测试或者非功能性测试
    6. 对接运维: 产品支持,运维支持
    7. 对接配置和环境: 产品支持
    8. 其余资源整合

软件架构师职责

  • 定义和确定所需的开发技术和平台

  • 定义开发标准,如编程标准,工具,审核流程,测试方法等

  • 对确定和理解业务需求提供技术支持

  • 设计系统并根据需求作出决策

  • 对架构定义,设计和决策进行讨论记录

  • 检查并审核架构和代码,比如检查前期确定的模式与编程标准是否被正确实施

  • 与其他部门和架构师合作

  • 对开发人员的引导和咨询

  • 将高级设计细化,并转化为较低级的设计

按照系统设计实现过程:

1. 支持售前或需求阶段,提供概念架构或技术咨询
2. 系统分析,架构设计,技术选型,产出架构解决方案
3. 指导项目团队成员,按照架构设计完成,开发,测试和发布
4. 开发或设计开发框架,制定编码或者编程规范,设计架构原型,验证架构原型
5. 组织技术或架构培训,把我技术或者架构方向
6. 实现与成本的方案平衡,干系人沟通,技术风险管理,技术领袖

按照项目阶段:

1. 售前阶段: 给予商务支持,提供系统解决方案和架构咨询
2. 需求阶段: 与需求分析师一起,参与项目沟通,协助完成技术或者业务咨询和需求模型,兼顾业务专家身份
3. 架构阶段: 进行系统分析与设计,进行系统抽象,设计系统模型,进行技术原型,开发架构原型等
4. 设计阶段: 指导设计人员完成详细设计
5. 开发阶段: 指导开发人员按设计实现,解决技术难题
6. 测试阶段: 指导测试人员工作,特别是非功能需求测试
7. 发布阶段: 指导部署人员按照部署架构进行部署,及时解答或反馈运行期间架构问题
8. 其他工作: 技术选型,人员培训,技术指导

软件架构师工作流程

架构的工作流程是一个系统如何从需求,架构到实现的的过程和方法

良好的架构:

需要架构师具备技术和架构设计能力之外,还需要具有良好丰富的业务知识
从软件工程角度,架构师不仅要参与系统架构和设计阶段外,还要参与需求分析阶段,开发,测试,发布,试运行阶段

需求分析主要包括需求模型,架构模型,设计模型和解决方案模型:

1. 需求模型: 参与需求分析和需求模型设计,提供技术建议或引导需求定义,提供解决方案指导
    主要参与者:需求分析师,业务分析师
    辅助参与者:架构师,设计师
2. 架构模型: 根据需求模型,产出架构模型
    选择架构对象: 关键流程,核心用例和非功能需求
    流程建模: 梳理需求关键流程,分析业务对象,子系统,模块,设计出系统的交互流程
    领域建模: 梳理业务流程中设计的对象,子系统模块,划分子系统,模块,核心对象,通信机制,事务模型等
    输出总体架构: 根据领域模型和业务流程模型,结合组件架构,部署架构,通信机制,输出系统体架构方案
    架构验证: 验证架构可用性,可以用评审或架构原型的方式,进行评审或实际测试验证
    主要参与者:架构师,架构委员会
    辅助参与者:系统设计师,开发人员,测试人员
3. 设计模型: 在架构师的指导下,根据系统架构,完成各子系统,模块,功能,接口的概要或详细设计
    主要参与者:系统设计师,高级工程师
    辅助参与者:架构师
    解决方案模型: 架构模型,设计模型,架构原型等统一组成架构解决方案

一个完整的系统架构包括:

1. 整体架构
2. 子系统
3. 模块
4. 功能概要或详细设计
5. 通信机制
6. 事务机制
7. 接口定义,包括内部和外部
8. 领域模型
9. 业务流程
10. 数据库设计
11. 中间件
12. 组件架构
13. 部署架构

系统解决方案标准:

1. 满足功能和非功能性需求
2. 符合项目要求的规模和成本
3. 满足开发,测试和发布要求

架构思维

自顶向下构建架构

定义问题:

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

问题定义加入时间维度:

将方案和问题定义区分开来

分析问题定义:

需要对问题进行升层思考后再进行升维思考,从而真正抓到问题的本质,
    理清和挖掘清楚需求
要善用第一性原理思维进行分析思考问题

问题解决原则:

使命: 先解决客户的问题
愿景: 然后才能解决自己的问题
强调的是能够为客户具体解决什么问题,然后才是我们能变成什么,从而怎样去更好地服务客户

善用多种方法对客户问题进行分析:

将客户问题转换成产品和平台需要提供的能力
比如仓储系统 WMS 可以提供哪些商业能力

梳理现有流程和能力模型:

找到需要提升的地方,升层思考和升维思考真正明确提升的部分

定义指标:

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

能力诉求转化为技术挑战:

将能力诉求转换为技术人员的方案设计,需要结合自底向上的架构推导方式

创新:

创新可以是业务创新,也可以是产品创新,也可以是技术创新,也可以是运营创新
升层思考,升维思考,使用第一性原理思维帮助自己在业务,产品,技术上发现不同的创新可能
哲科思维是架构师的灵魂思维
https://img.zhaoweiguo.com/uPic/2022/04/OxVldU.jpg

caption

自底向上推导应用架构

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

应用逻辑架构的推导有 4 个子路径:

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

最影响逻辑结构落地成物理架构的三大主要因素:

1. 效率
2. 稳定性
3. 性能

从逻辑架构到物理架构,一定需要先对效率,稳定性和性能做出明确的量化要求

自底向上依赖于演绎和归纳:

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

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

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

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

1. 问题空间模块划分属于归纳
2. 逻辑架构也有的属于归纳
3. 根据一堆稳定性问题来归纳出事前,事中,事后都需要的对应的操作,是就时间维度来进行归纳
https://img.zhaoweiguo.com/uPic/2022/04/1YLQBS.jpg

caption

必备技能

设计

理论层面:

1. 了解基本的设计模式
2. 研究一下模式与反模式
3. 了解质量度量

实践层面:

1. 尝试理解不同的技术栈
2. 分析和理解应用模式:
    查看当前流行的框架
    在实践中学习很多模式
    理解如何在框架中应用模式,为什么要这样做
    深入地研究代码并了解如何实现的

决策

架构师需要制定决策,指引项目甚至整个公司的正确方向:

1. 分清主次:
    概念完整性
    一致性
2. 优先级
3. 认清自己的能力,明确自己的职责
4. 评估多种选择

成长方式

广度

广度: 架构师应该对所在领域的主流技术体系有一个全面清晰的认识,每一种技术不需要深入的了解,但必须指导每个技术的三个层面 每种技术的由来,为什么会出现这种技术?这种技术是用来解决什么问题的? 每种技术是什么?技术的基本组成是什么? 解决同一个问题的相同技术各自优缺点是什么?更适合哪种场景?只有清晰认识同一类型技术的优缺点,才能在技术选型能够使用更加合理的技术 广度学习方法:对各主流技术一一通过搜索引擎了解三个层面的内容

高度

高度: 架构师应该具备能够从纷繁杂乱的信息中建立抽象的能力 业务抽象: 能够从软件和产品的复杂需求中抽象出核心业务实体,并给业务实体建立合理的关系 技术抽象: 能够对复杂的技术架构进行分层抽象,服务抽象或者微服务抽象,组件抽象,并为各层和各层服务之间调用建立合理关系 高度学习方法:深入理解和学习面向对象,设计模式,琢磨优秀开源框架的设计原理和设计思想

深度

深度: 架构师对主流技术有深入理解 对主流技术的原理,运作机理有基本全面的理解 至少要对一种技术有深入的认识,是这种技术的专家,熟悉源代码

宽度

宽度: 架构师要熟知当前的技术前沿和热点,能够使用新的技术解决问题。比如微服务,大数据,云计算,人工智能 宽度学习方法:订阅相关的技术咨询,定期了解,对于和所负责工作相关的技术进一步了解

主页

索引

模块索引

搜索页面