需求分析引言:架构漫谈(五)架构师成长之路

我研发领域也从事了一些年,期间也做过一些架构设计工作,包括C#单体转型为Java微服务、Python单体转型为Java微服务等,
也尝试着从自己的经验角度,来汇总一些知识点,同时描述一下如何成长为一个合格的软件架构师,仅供参考,也欢迎跟我一起探讨。

一、架构师的定义

顾名思义,架构师就是指在某个公司/团队里,从事系统架构工作的人。
首先要明确的一点,本文讲的架构师并不是一个职位,而是指一个角色,就是从事架构工作的人。

  • 每个公司、甚至一个公司的不同团队,对架构师的认知都不一样,对架构师的定义及承担的职责也各不相同;
  • 每个团队,都有人或多或少的在做架构的工作,比如团队主程、资深开发人员;

所以不是说你的职位是架构师,你就达到了架构师的标准;同理,你的职位不是架构师,但是你可能就是这个团队公认的架构师。
作为架构师要注意的点:
架构师不能脱离现有的开发环境、项目的现状、公司的资源投入等,不能坐在空中楼阁里,指挥团队作战。

架构师分类

根据不同领域的细分,架构师也有一些细分的定义,一般会有:

  • 软件架构师:负责设计和规划软件系统的整体架构,涵盖需求分析、技术选型、领域划分、应用部署等;
  • 数据架构师:负责数据系统的设计和规划,含数据仓库、数据收集和治理等;
  • 网络架构师:负责系统整体网络的设计和规划,含互联网接入、路由交换、VPN和网络安全等;
  • 云架构师:在云计算盛行的当前,负责云计算的部署和规划,含云平台选型、容器管理能力、虚拟化、自动化等;
  • 安全架构师:负责软件系统的安全架构规划,包括全局的安全策略、访问控制、漏洞管理、审计策略等;
  • 前端架构师:一般特指浏览器应用架构师,负责前端应用的整体架构设计,包括前端框架、技术栈、跨浏览器兼容和统一能力封装、性能优化等;
  • 移动应用架构师:一般指Android/iOS应用架构师,负责移动应用的整体架构设计,包括移动安全、技术栈、跨平台兼容、测试方案设计、性能优化等;
  • 后端架构师:主要负责应用的后端架构设计,包括数据库设计、API设计、性能优化、数据安全等。

以上细分并不一定全面,而且很多领域的边界其实是不够清晰的,比如:

  • 软件架构师一般涵盖整个软件系统,对各个领域都应该有一定的了解,并有一定的侧重(后端居多)
  • 前端架构师和后端架构师,都应当对API进行规范化和输出评审;
  • 比如软件架构师和数据架构师,都要关注数据的安全、跨系统的消息传输协议等。

软件架构师的职责

  • 1、全面了解业务需求
    作为架构师,最重要的是精通业务,甚至要求成为领域专家,在系列第一讲就说了:发现问题比解决问题更重要
    如果不了解业务,设计出来的架构是不可信赖的。

  • 2、能简化和抽象问题
    这是架构师设计和开发高质量软件系统的关键能力,可以帮助团队在复杂的环境中更好地理解业务需求和进行设计、开发。
    以用户登录系统为例:

    • 可以简化登录问题为:接收用户提交的登录类型、接收用户提交的凭证、校验用户凭证是否有效,
    • 抽象为一个接口,提供3个方法:
      matchLoginType(HttpServletRequest request) 是否当前类处理的登录类型
      readCredential(HttpServletRequest request) 根据登录类型,读取登录凭证
      validCredential(UserCredential info) 验证登录凭证
    • 添加不同的实现,比如账号密码登录实现、微信登录实现、LDAP登录实现、Token登录实现等等
    • 至于前端展现、用户交互方式,这些都是相对不重要的细节,约定好标准的前后端接口交互规则就可以了
  • 3、在有限资源内提出合适可行的解决方案
    我们的软件/硬件/人力/时间等资源都是有限的,架构师要权限这些限制,在有限资源下寻求最优解决方案。
    比如:工期有限时,架构师要能评估业务实际情况,拆解模块/功能,选择符合需要的最低功能组合进行优先设计实现;
    比如:新旧系统重构时,架构师要根据团队人员、擅长技能情况进行技术选型,要衡量如何对业务最小影响的情况下,平滑过渡和人员分配的能力。

  • 4、满足业务需求,保证系统质量
    要求架构师能正确理解业务需求,并输出系统所需的非功能性需求,包括可靠性、性能、容错性等;
    然后设计合适的技术方案,并持续跟踪过程,以保证质量。

  • 5、在可预测的时间段内的可扩展性
    这个一般分2方面:

    • 架构师要深度理解需求,能预估一定时间内的需求变化情况
      比如用户登录系统,不应只设计账号密码登录,应根据用户群体特征,增加微信扫码登录、Google身份登录等;
    • 架构师要考虑系统的伸缩性,包括水平扩展和垂直扩展,同时要兼顾成本,避免过度设计:
      • 水平扩展:系统在访问量增长的情况下,能快速扩容节点,分散旧节点的负载能力应对;
      • 垂直扩展:系统的单节点有足够的扩展能力,如CPU增强、内存增加、网络带宽增长等。
  • 6、在系统的生命周期内持续演进
    架构师根据业务的增长情况,对系统进行持续的监控、评估和迭代改进。
    最终目标就是在不影响业务增长的情况下,持续提升系统的可靠性和吞吐量。

软件架构师的能力要求

作为一名合适的软件架构师,一般应该拥有的能力:

  • 1、技术能力
    架构师首先一定是一名出色的技术人员,可以说没体验过分库分表的架构师确实不太合格,他应该是:
    • 高级程序员:
      架构师一定要有丰富的程序开发经验,什么设计模式、HashMap原理、B+树等等,都不在话下;
      一些核心系统或通用框架设计,通常也需要架构师进行代码编写和指导;
    • 多技术领域知识:
      架构师应该拥有足够的技术广度,了解不同的技术领域知识,如了解前端浏览器渲染过程、客户端开发技术栈、kafka收发原理、分布式相关理论和一些产品实现、容器和K8S、负载均衡技术等等,才能在面对具体问题的时候,提出合适的技术选型、部署方案和实现;
    • 问题解决专家和救火员:
      架构师一定要有丰富的问题解决经验,能解决很多一般技术人员无法解决的疑难杂症;
      有完善的问题解决流程经验,如生产事故优先安排恢复,再进行故障定位解决的一整套处理方案;
    • 合适的运维工程师:
      一些紧急或特殊的问题,需要架构师进行线上诊断; 在线下重现时,需要部署相应服务;
      架构师也应当有一些常见服务的部署/运维/监控经验,如Centos、Windows、supervisor、crontab、redis、mysql、kafka等等;
      另外,在一些中小型团队,一般没有专职的运维人员,也是由架构师负责运维;
  • 2、业务分析和抽象能力
    架构师应该深入了解行业知识,要让自己成为领域专家,才能更准确、清晰的把用户需求转化为技术需求,
    同时架构师应该要有抽象能力,即把技术需求转化为抽象的具体良好可扩展性的架构;
    比如一个商城系统,能抽象为:
    登录 -> 购物车 -> 下单 -> 支付 -> 发货
    同时可以抽象出通用的认证服务、订单服务、支付服务、库存管理服务,以及各服务间的消息传输协议等;
    同时,看到商品,就知道要设计分类表、SPU数据表和SKU数据表,商品的评价要剥离成独立的评论服务等。
    注:六大设计原则,其实也适用于软件架构设计,在划分领域边界、模块拆分时也要考虑单一职责、开闭原则、接口隔离等等。
  • 3、 管理能力
    这个点比较大,通常来说,架构师也应该具备团队管理能力,包括较强的沟通和理解能力、项目进度管理和资源调配能力、团队协作与氛围激励能力;
    最重要的是沟通和理解能力,如果不能理解别人提出的问题,无法清晰的表达自己的想法,连问题都无法清晰发现和定义,更不要谈后续的动作了。
    还有一点我认为是坦诚,团队成员天天交流,不够坦诚,成员很容易感知,就会反感和不坦诚,很多问题就无法暴露,最终可能导致项目失败。
  • 4、学习能力
    架构师要有比较好的学习能力和适应能力,以及较强的前瞻性,应当经常参加各种线上线下的培训或交流,以了解和跟上不断变化的技术和行业发展趋势。
    同时,架构师也要有较好的总结归纳能力和沉淀能力,包括技术经验的总结、技术规范的整理与输出、运维runbook的编写、培训文档输出等。

这些能力,基本都需要通过持续的学习和锻炼,比如抽象能力,就是要长期做需求分析、划分领域边界,并对比同类项目的设计,找出自己设计的不足点,进行学习和重构。
一定要记住,技术不是全部,很多场景,都可以通过需求优化来解决,而不是通过复杂的技术方案处理,后面我会有一些文章来举例。

这里分享一张极客时间的“架构师技能图谱”,可以参考:
在这里插入图片描述

再分享2张来自https://roadmap.sh/的:前端能力路线图 和 后端能力路线图
在这里插入图片描述在这里插入图片描述

二、如何成长

分享一张图:
在这里插入图片描述
上图,来自吴军老师的《格局》,可以认真一读:

  • 基线:你掌握的工程知识,因人不同,比如专家的基线高、新手的基线低;
    我们要做的第一件事,就是自我定位,找到自己的基线,并持续学习,以提高自己的基线。
    很多民间科学家用一辈子做出的发明不被认可,就是因为他的基线低于这个时代的基线,没有去学习,直接利用自己的旧有知识。
  • 极限:受制于物理、环境、甚至个人认知,可达到的极限,如光速、单机的最大连接数、单机的最大吞吐量等;
    我们在学习和改进时,要明确这个方向的极限,避免无效的折腾
  • 阶梯:通往极限的路径、方法,需要你通过学习获取晓或自行探索适合你的方法。
    注:受限于每个人的个人认知、配备的资源不等、以及探索方法是否行之有效,能达到极限的人是越来越少,所以阶梯是呈收敛的。

所以,总结一下,怎么让自己持续成长,没有捷径:

  • 不断学习,提升自己的基线
    很多时候,你以为的顿悟,只是别人的基本功。 by:刘润
  • 实践,持续不断的实践,归纳,总结,领悟
    不要认为没时间,在推荐书籍里的5分钟商学院,有专门一节教你做时间管理,只要听5分钟。

理论与实践相结合,我们知道,有2种知识:
1、别人告诉你或书上学到的,这是理论;
2、自己亲身经历的,这是实践;
只有理论,很容易遗忘;只有实践;你不知道要提升什么。

我的经验:
1、自己踩过的坑,要进行复盘,了解为什么出问题,本质原因是什么
2、别人踩过的坑,我会去尝试在测试环境踩一遍,加深印象,并探究本质

最后分享一个在知乎看到的学习问题,挺有意思的:
知乎有人问过一个问题:古人有上策中策下策,为啥很多都选下策?
有个高赞回答是这么说的,以学习为例,上中下三策:

  • 上策:严密的学习计划,悬梁刺股、闻鸡起舞;
    很显然,太难了,没几个人能做到;
  • 中策:宽松的学习计划,一周/月看一本书;
    这个中策还不错,很多人会选择,甚至做时间计划,就是执行过程很容易中断,什么手机很想我,抖音看一看,跟朋友喝个酒,持续不了1,2个月就结束了
  • 下策:随机学习,想到就去学
    绝大多数人选择了这个,包括我在内,知识碎片化很严重,而且很容易遗忘

三、推荐书籍

技术领域

这三本书,阅读起来确实会比较枯燥,可以看一遍有个印象,再实践一段时间,回来再阅读一遍
在这里插入图片描述

非技术领域

同时,我们也不要只关注技术领域,要关注一些技术领域之外的知识;
尤其强烈推荐刘润的5分钟商学院,这是一个音频系列,每个音频5分钟左右,涵盖了商业知识、产品创新、自我管理、团队管理、绩效提升等全方面的知识,
在知乎上有些人对他评价不高,但是对于技术领域的我来说,很多知识几乎是醍醐灌顶的作用,自然也对我的成长、工作都提供了很大的帮助,强烈推荐学习。
在这里插入图片描述

四、扩展资料

这里介绍2个关于架构师的认证考试,有志于提升自己的架构能力的同学,可以去尝试一下,
认证涉及的内容,是比较全面的,能在整体上提升个人能力,所以千万不要抱着应付考试的目的去学习,甚至只学习,不考试也是相当OK的。

TOGAF认证

TOGAF是The Open Group Architecture Framework的缩写,它由The Open Group开发,并在持续更新中,The Open Group是一个非盈利的技术行业联盟。
The Open Group 将 TOGAF 定义为“企业架构的全球标准”,它提供了一整套方法论和最佳管理实践。
TOGAF已被80%的福布斯50强公司使用,并得到HP、IBM、Kingdee(金蝶)、Oracle、SAP等国际领先IT企业的高度认同和积极推动。在中国企业架构实践中,TOGAF认可度超过50%。
TOGAF官方介绍:https://www.opengroup.org/togaf
百度百科介绍:https://baike.baidu.com/item/TOGAF/9832356

TOGAF认证的能力模型简要概述如下:

  • 1、通用技能:领导力、团队合作、人际交往、口才、写作、逻辑分析、干系人管理、风险管理;

  • 2、业务技能和方法:业务案例、业务情景、组织结构、业务流程、战略规划、预算管理、战略愿景、业务指标、业务文化、遗留的投资、业务功能;

  • 3、企业架构技能:业务流程设计、角色设计、组织结构设计、数据设计、应用设计、系统集成、IT行业标准、服务设计、架构原则设计、视图和视角设计、构建块设计、解决方案建模、效益分析、业务交互、系统行为、项目管理;

  • 4、方案和项目管理技能:方案管理、项目管理、管理业务变更、变更管理、价值管理;

  • 5、通用IT知识技能:IT应用开发方法和工具、编程语言、代理应用、信息消费应用、信息提供应用、存储管理、网络、基于Web的服务、信息技术基础设施、资产管理、服务等级协议、系统、商用现成品、企业连续体、迁移规划、管理工具、基础设施;

  • 6、IT技能:软件工程、安全、系统和网络管理、事务处理、位置和目录、用户界面、国际化操作、数据交换、数据管理、图形与图像、操作系统服务、网络服务、通信基础设施;

  • 7、法律环境:合同法、数据保护法、采购法、诈骗、商业法

软考之系统架构设计师

系统架构设计师,是计算机技术与软件专业技术资格的一项高级认证,参考官方介绍:https://www.ruankao.org.cn/platform/details?code=03_03

它的考试要求:
(1)掌握计算机硬软件与网络的基础知识;
(2)熟悉信息系统开发过程;
(3)理解信息系统开发标准、常用信息技术标准;
(4)熟悉主流的中间件和应用服务器平台;
(5)掌握软件系统建模、系统架构设计基本技术;
(6)熟练掌握信息安全技术、安全策略、安全管理知识;
(7)了解信息化、信息技术有关法律、法规的基础知识;
(8)了解用户的行业特点,并根据行业特点架构合适的系统设计;
(9)掌握应用数学基础知识;
(10)熟练阅读和正确理解相关领域的英文文献

可见需要了解的内容还是比较多的。

结语

架构漫谈的5个章节,到此就告一段落。
后续的文章,我会列举一些我经历过的需求分析案例,以及我们采用的技术设计方案。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot+Vue+微信小程序的电影平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 研究背景:…

Docker 中的 .NET 异常了怎么抓 Dump (转载)

一、背景 1. 讲故事 有很多朋友跟我说,在 Windows 上看过你文章知道了怎么抓 Crash, CPU爆高,内存暴涨 等各种Dump,为什么你没有写在 Docker 中如何抓的相关文章呢?瞧不上吗? 哈哈,在DUMP的分析旅程中&a…

提升工作效率:推荐几款实用的Mac项目管理工具!

在当今软件和技术高度发达的时代,项目管理依然是一项非常重要的任务。现在,有越来越多的人喜欢使用mac电脑进行项目管理,因为mac众所周知的稳定性和使用便捷性。但问题是,mac系统自带的项目管理工具并不是非常完美,因此…

Linux——进程信号详解

目录 一.进程信号的理解 1.1定义: 1.2举例: 1.3总结: 二.进程信号地使用: 2.1信号种类: 2.2而操作系统向进程发送信号地方式有四种: 2.2.1以键盘的方式向进程发送信号 接下来介绍一个系统调用函数sign…

Windows系统上安装Node.js图文步骤流程

Windows系统上安装Node.js图文步骤流程,本文以安装Node.js v4.4.3 LTS(长期支持版本)版本为例: 目录 Node.js下载 Windows 上安装 Node.js 1、Windows 安装包(.msi) 2、Windows 二进制文件 (.exe)安装 版本测试 Node.js下载 Node.js 安装包及源码…

nginx七层代理和四层转发的理解

先来理解一下osi七层模型 应用层 应用层是ISO七层模型的最高层,它直接与用户和应用程序交互,提供用户与网络的接口。它包括各种应用协议,如HTTP、FTP、SMTP等,用于实现特定应用的功能和通信表示层 表示层…

Java进程ProcessBuilder类的介绍及使用,ProcessBuilder调用外部程序执行shell命令Linux命令

目录 ProcessBuilder类的介绍及使用 【前言】 【正文】 --构造方法-- --常用方法-- --使用技巧-- --调用本地Shell命令,实例-- 【总结】 【注意】 ProcessBuilder类的介绍及使用 【前言】 在做一个项目的时候需要用到运行时动态执行JAVA命令,一…

leetcode 225.用队列实现栈

⭐️ 题目描述 🌟 leetcode链接:用队列实现栈 1️⃣ 思路和图解: push: 入栈操作只需要往不为空的队列入数据即可,如果都为空,其中任意一个队列都可以。 void myStackPush(MyStack* obj, int x) {// 往…

CS EXE上线主机+文件下载上传键盘记录

前言 书接上文,CobaltStrike_1_部署教程及CS制作office宏文档钓鱼教程,该篇介绍【使用CS生成对应exe木马,上线主机;对上线主机进行,文件下载,文件上传,键盘记录】。 PS:文章仅供学习…

数仓建设中最常用模型--Kimball维度建模详解

数仓建模首推书籍《数据仓库工具箱:维度建模权威指南》,本篇文章参考此书而作。文章首发公众号:五分钟学大数据,公众号后台发送“维度建模”即可获取此书籍第三版电子书 先来介绍下此书,此书是基于作者 60 多年的实际业…

SpringBoot前后端分离项目,打包、部署到服务器详细图文流程

文章目录 实施步骤一、修改配置文件地址1.修改MySQL配置2.修改Redis配置3.修改日志路径和字符集配置 二、将源码压缩并上传服务器1.上传前端文件2.上传后端文件(同上) 三、前端项目打包1.安装依赖2.项目打包 四、后端项目打包1.项目打包(jar包…

Ubuntu 20.04 LTS 安装 nvidia 驱动 + cuda 11.8 从开始到放弃!

升级 sources.list # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restri…

java的断言

断言介绍 Java的断言就是一条assert 声明,其中包含了一个布尔表达式。 断言可以被启用或者禁用,默认是禁用的。 断言被启用的情况下,执行到断言的声明,就会计算布尔表达式的值。如果表达式的值为false,那么就会抛出一…

9、架构:CLI 设计

通常大部分的程序员会更加习惯使用 CLI(Command-Line Interface 命令行界面)来辅助开发业务,包括初始化、更新、构建、发布等功能,可以获得沉浸式一站的开发体验。 在之前有一篇企业级 CLI 开发实战介绍过如何开发一款适用团队的…

阿里开业项目chat2DB-人工智能SQL分析介绍

1. chat2DB简介 1-1. 简介 ​ chat2DB是一款有开源免费的多数据库客户端工具,支持windows、mac本地安装,也支持服务器端部署,web网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比Chat2DB集成了AIGC的能力,能够将自然语…

从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题

目录 1. 多态(polymorphism) 1.1 构成多态的两个条件 1.2 虚函数重写(覆盖) 1.3 协变构成多态 1.4 父虚子非虚构成多态 1.5 析构函数的重写 1.6 final 和 override 关键字(C11) 1.7 重载、覆盖、隐藏的对比 2. 抽象类&am…

11、架构:CI/CD 设计

本章内容是基于 DevOps 体系的精简版本,如果有阅读过之前 DevOps 小册的同学,可以快速掠过。 开局先放一张镇楼图,上图我在行云集团做的通用型 CI/CD 解决方案 ALL IN DOCKER,所有的操作构建与发布过程都在 Docker 中操作。 但很…

J2EE自定义mvc【框架配置及功能】

目录 一、配置步骤 二、配置框架前三步 导入相应的jar 导入相应的Class 导入xml文件 三、优化基本操作(增删改) 1、基础优化 编写实体类 编写BookDao类 优化BookDao JUnit测试 2、后台优化 3、前端优化 一、配置步骤 将框架打成jar包&…

IDEA使用教程 安装教程

16. Codota 插件 Codota 插件可以根据使用频率优先显示较常用的类和方法。然而,是否使用该插件取决于个人的偏好。有时工具只能作为参考,仍然需要依靠个人记忆来确保准确性。 17. 快速查看类和字段的注释 按下 F2 键可以快速查看某个类或字段的文档注…

从JDK源码级别剖析JVM类加载机制

1 什么是Java虚拟机 一个可执行java字节码的虚拟机进程;跨平台的是java程序,而不是java虚拟机,java虚拟机在各个操作系统是不兼容的,例如windows、linux、mac都需要安装各自版本的虚拟机,java虚拟机通过jdk实现功能。…