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

news2024/9/20 19:26:41

我研发领域也从事了一些年,期间也做过一些架构设计工作,包括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个章节,到此就告一段落。
后续的文章,我会列举一些我经历过的需求分析案例,以及我们采用的技术设计方案。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

权限管理系统后端实现1-SpringSecurity执行原理概述

spring security的简单原理: SpringSecurity有很多很多的拦截器,在执行流程里面主要有两个核心的拦截器 1,登陆验证拦截器AuthenticationProcessingFilter 2,资源管理拦截器AbstractSecurityInterceptor 但拦截器里面的实现需要…

IDEA+Spring Boot + MyBatis + Layui+Mysql垃圾回收管理系统源码

IDEASpring Boot MyBatis LayuiMysql垃圾回收管理系统源码 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.垃圾回收管理3.添加需要回收的垃圾4.垃圾去向管理5.申请需要打包运出的垃圾6.系统公告管理7.个人信息管理8.修改密码 三、部分代码UserMapper.javaUserControlle…

Python的网络爬虫框架-网络爬虫常用框架

Python的网络爬虫框架-网络爬虫常用框架 一、前言二、引言三、Scrapy 爬虫框架四、Crawley 爬虫框架五、PySpider 爬虫框架 一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡,让我们一起来了解Python的网络爬虫框架-网络爬虫常用框架如果文章对你有帮助、欢迎关注、点…

Redis缓存同步1-策略介绍

缓存数据同步策略示意图 在大多数情况下,我们通过浏览器查询到的数据都是缓存数据,如果缓存数据与数据库的数据存在较大差异的话,可能会产生比较严重的后果的。所以,我们应该也必须保证数据库数据、缓存数据的一致性,…

基于simulink使用颜色识别来进行道路跟踪(附源码)

一、前言 此示例演示如何使用颜色信息来检测和跟踪在可能不存在车道标记的主要住宅环境中设置的道路边缘。基于颜色的跟踪示例说明了如何使用色彩空间转换块、霍夫变换块和卡尔曼滤波器块来检测和跟踪使用色调和饱和度的信息。 二、模型 下图显示了基于颜色的道路跟踪模型&a…

MATLAB的num2str,把循环变量作为字符串的内容

MATLAB的num2str,把循环变量作为字符串的内容 输入代码: i 2; abc [sdfg,num2str(i),dsfg]运行结果: 解析: MATLAB里面的[ ]是会把元素组合的意思 现在有: a1 3; a2 4; a3 5; 然后我想通过for循环,循…

mac与pd虚拟机之间不能粘贴文字或粘贴文件

首先确保共享打开: 然后检查虚拟机的Parallels Tools是否正常 一个简单的判断方式就是,退出虚拟机全屏之后,如果能够正常进入融合模式,那么Parallels Tools可用,否则就要排查问题 检查Parallels Tools是否随系统正常启…

C++11 | 智能指针

智能指针 前面的文章中我们介绍了C中的异常有关的知识点,同时在其中我们遇到了有关内存方面的问题,如下所示: int div() {int a, b;cin >> a >> b;if (b 0)throw invalid_argument("除0错误");return a / b; } void…

数据结构算法题——链表

leetcode-2.两数之和 leetcode-2.两数之和 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数…

猿人学做题笔记

简单记录一下做题的思路步骤 1、第一题说的是无混淆加密(简单): 刚开始观察请求,发现链接和请求携带的参数都没有什么异常,然后直接请求会拿不到数据,于是仔细看了一下请求包,发现请求头里面有…

03-Vue基础语法之指令语法与条件渲染

个人名片: 😊作者简介:一名大一在校生,web前端开发专业 🤡 个人主页:python学不会123 🐼座右铭:懒惰受到的惩罚不仅仅是自己的失败,还有别人的成功。 🎅**学习…

【GaussDB(DWS)】数据分布式存储-三种类型的表

toc 一、环境说明 华为数据仓库服务DWS,集群版本8.1.3.320集群拓扑结构: 二、数据分布式方式 DWS采用水平分表的方式,将业务数据表的元组打散存储到各个节点内。这样带来的好处在于,查询中通过查询条件过滤不必要的数据&#…

[工业互联-18]:常见EtherCAT主站方案:SOEM的Windows/Linux解决方案

目录 第1章 SOEM 简介 第2章 SOEM创建EtherCAT主站 2.1 支持Linux和Windows操作系统 2.2 SOEM创建EtherCAT主站的步骤 第3章 QT添加SOEM主站 第1章 SOEM 简介 SOEM (Simple Open EtherCAT Master) 是一种开源的EtherCAT主站协议栈。 EtherCAT(Ethernet for C…

飞轮储能系统的建模与MATLAB仿真(永磁同步电机作为飞轮驱动电机)

简介 飞轮储能系统由于其高储能密度、高效率、轻污染的优点而越来越受到重视。飞轮储能系统以高速旋转的飞轮为依托,通过电力电子设备实现电能与动能的相互转化,从而在负载调峰、功率平抑、不间断电源等多领域都有很好的应用表现。 本文选用永磁同步电机…

基于simulink仿真车道偏离警告系统(附源码)

一、前言 此示例演示如何在视频序列中检测和跟踪道路车道标记,并在驾驶员穿过车道时通知驾驶员。该示例说明了如何使用霍夫变换、霍夫线和卡尔曼滤波器模块来创建线检测和跟踪算法。该示例使用以下步骤实现此算法:1) 检测当前视频帧中的车道…

计算机通信地址【图解TCP/IP(笔记六)】

文章目录 地址地址的唯一性地址的层次性 地址 通信传输中,发送端和接收端可以被视为通信主体。它们都能由一个所谓“地址”的信息加以标识出来。当人们使用电话时,电话号码就相当于“地址”。当人们选择写信时,通信地址加上姓名就相当于“地…

HarmonyOS学习路之开发篇—数据管理(数据存储管理)

数据存储管理概述 数据存储管理指导开发者基于HarmonyOS进行存储设备(包含本地存储、SD卡、U盘等)的数据存储管理能力的开发,包括获取存储设备列表,获取存储设备视图等。 基本概念 数据存储管理 数据存储管理包括了获取存储设备…

Vue3+Vite项目配置@路径别名

一、根目录下 vite.config.ts 文件中配置 import { resolve } from path;resolve: {// 设置文件./src路径为 alias: [{find: ,replacement: resolve(__dirname, ./src)}] }二、根目录下 tsconfig.json 文件中配置 //配置 "baseUrl": ".", "paths&qu…

【复习25-29题】【每天40分钟,我们一起用50天刷完 (剑指Offer)】第二十天 20/50

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

智能底盘(2) | 汽车制动系统的发展概述

摘要: 自汽车诞生以来,车辆制动系统就始终在实现汽车流畅操控、保障汽车安全等功能中起着决定性的作用。而制动系统本身也随着工业技术的变革和汽车行业的发展持续进化。 根据制动场景的区别,制动系统可以分为以下两类: 行车制动…