前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >架构师应该具备哪些思维模型?

架构师应该具备哪些思维模型?

原创
作者头像
江帅帅
修改于 2020-06-08 02:56:17
修改于 2020-06-08 02:56:17
3410
举报
文章被收录于专栏:大数据工程师大数据工程师

架构师一直是程序员「羡慕且追求」的高度,今天来说说我(奈学教育CEO:孙玄)眼里优秀的架构师该如何定义。毕竟我也曾经是一名架构师:

在开始今天的话题之前我说一个和我前公司P9现在已经是P10的对话。

问题是这样的他说公司中间件架构师不熟悉公司业务,很多事落地不了,非常的疑惑。他最近主要任务就是和这些架构师聊天解惑:)

接着他说了一个类比的故事大概是这样的,

我们(架构师)要建设一条高速公路,来分别看看公路建造者(架构师)和司机(业务研发)的视角。

1,建造者 他们选用最好的沙子 水泥 更好的设计图纸和操作流程保证质量和处理异常情况(比如出入口提示,超车,紧急停车带)

2,司机同志 他们关心什么?

司机关心路宽么,有堵车可以提前告知么。

司机关心路平整么?当然关心,关心。

引出一个的问题:司机(业务研发)关心用最好的水泥么 ?

想象你是司机(业务研发)你你关心吗?

A,关心

B,不关心

欢迎留言留下你的思考。

我觉得一名优秀的架构师,在设计系统时需要有以下这四项关键能力:「平衡取舍、预判未来、抽象思维、容错机制」。

1. 平衡取舍

一个架构本质上总会有优有劣,它不可能是完美的、普适的,也不存在一个架构在 A 场景能用,在 B 场景也最适用的情况,所以就需要我们准确判断,作出取舍。

我们可以根据具体的业务需求来调整架构,也就是以当前的业务需求,选出最匹配的架构。另外,架构师还需要根据现状衡量好需求和资源、效率和安全、时延和吞吐等等之间的关系,做出判断。

比如对于在线交易系统,可能更重要的是保证它的低时延,因此就可以牺牲一定的吞吐量,而对于离线系统,吞吐量则更重要一些。

2. 预判未来

架构师需要具备一定的未来的预判能力,因为架构的调整周期通常比较长。这也是程序员和架构师之间一个很大的区别所在。

程序员负责一个项目,在当前的互联网大背景下,项目的迭代周期非常快,基本以天或周为单位,最多一个月。如果发现不合适的代码,需要重构,程序员基本也能在几天或几周内就能完成重构。

而架构的调整是相对漫长的过程,可能需要数月,甚至要几年。因此,在设计架构时就需要架构师具备预判意识,对很多不确定的事情做出预判和选择,诸如未来访问量会增长到什么量级,会不会产生新的业务,这些会对系统产生什么样新的要求等等。

3. 抽象思维

除了懂得取舍和拥有预判意识,架构师在设计架构时还要掌握抽象的方法,不能胡子眉毛一把抓,要做好分层和区隔。

因为架构师面对的是一个很庞大的系统,为了避免过早陷入细节,不要去看各个组件的细节,而是把它们的角色定义下来之后,再分块来思考。而在看每个分块时,其他分块都可以视为一个抽象的概念,另外,也需要考虑复用的问题。

举个例子,我之前在某送餐平台做在线客服机器人,就运用了分层思想,并且高复用,一个对话机器人可以完成各种各样的业务需求。这其实是一个非常复杂的系统,里面有各种各样的对话机器人的模块,有的特别适合去做检索式的查询,还有的适合做任务导向的、产品推荐导向的对话等等。

我们把对话机器人抽象成一个通用的接口,再将它分为一个个小机器人。这样一来,每个小机器人只需要关注自己的业务模块就行了。然后,我们会在前端再引入一个路由机器人,由路由机器人根据当前对话管理的状态,来判断当前的对话应该交给哪个小机器人去完成。这就是典型的分层的思想。

4. 容错机制

相比程序员,架构师面对的环境要恶劣的多,因为系统更复杂了,出错的概率也增加了,每个节点、每个功能都有可能出错,所以这就需要架构师为错误而设计(Design For Failure),事先提前做好解决方案。

除了应用出错,还有可能产生数据丢失的情况,这个可以通过备份来预防。

另外,如果出现故障,该怎样做到快速恢复呢?我们现在普遍的做法是不修只换,因为如果要修复一个异常状态,可能修复后还会出现连带问题,而如果能通过技术手段,删除已出现的故障,换一个全新的系统,就能够保证它迅速恢复到正常状态。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[oeasy]python0125_汉字打印机_点阵式打字机_汉字字形码
汉字字形码 回忆上次内容 IBM 将 ASCII 扩展之后 规定了 一个字节的字符集并制作了 相应的字形库​添加图片注释,不超过 140 字(可选)这种显示模式和字符大小之下 中文该如何进入计算机世界呢?🤔从打印机开始 原来的打印头 字型定死​添加图片注释,不超过 140 字(可选)中文印刷 落后于英文中文打字机 就是一个梦中文打字机 ​添加图片注释,不超过 140 字(可选) 中文打字员 ​添加图片注释,不超过 140 字(可选) 针式打印机 通过字库数据来驱动针头​添加图片注
oeasy
2023/04/04
6890
[oeasy]python0125_汉字打印机_点阵式打字机_汉字字形码
[oeasy]python0111_字型码_字符字型编码_点阵字库_ascii演化
编码进化 回忆上次内容 上次回顾了 早期的英文字符点阵 最小的 3*5 通用的 5*7 点阵字库逐渐规范化 ​ 添加图片注释,不超过 140 字(可选) 这些点阵字符的字型 究竟是如何被存储的呢?🤔 1602 ​ 添加图片注释,不超过 140 字(可选) 1602 2行 x 16个字符 每个字符个 5x7 个像素 ​ 添加图片注释,不超过 140 字(可选) 绿色的风格 字形码 把字型 进行 编码 所谓 编码 就是把 字体的长相 弄到计算机的字节中去 可以设置 比一般
oeasy
2023/03/18
5900
[oeasy]python0111_字型码_字符字型编码_点阵字库_ascii演化
刨根究底字符编码之六——简体汉字编码中区位码、国标码、内码、外码、字形码的区别及关系
GB2312、GBK、GB18030等GB类汉字编码方案的具体实现方式是怎样的?区位码是什么?国标码是什么?内码、外码、字形码又是什么意思?它们是如何转换的,又为什么要这样转换?
笨笨阿林
2022/05/09
4.2K0
刨根究底字符编码之六——简体汉字编码中区位码、国标码、内码、外码、字形码的区别及关系
[oeasy]python0122_日韩字符_日文假名_JIS_Shift_韩国谚文
日文假名和韩国谚文 回忆上次内容 上次回顾了非ascii的拉丁字符编码的进化过程 0-127 是 ascii 的领域 世界各地编码分布 拉丁字符扩展 ascii 共 16 种 由iso组织制定 从iso-8859-1 到iso-8859-16 无法同时显示俄文和法文 此时中日韩的文字也需要进入计算机 象形文字的字符集超级巨大 日本、韩国也用汉字 数量2万起步 ​ 真能把 如此巨大的字符集 编码进入计算机吗?🤔 文字 日本汉字我们可以直接看懂 ​ 地铁里的 标记 ​
oeasy
2023/04/01
7860
[oeasy]python0122_日韩字符_日文假名_JIS_Shift_韩国谚文
[oeasy]python0128_unicode_字符集_character_set_八卦_星座
unicode 回忆上次内容 中国的简体和繁体汉字 字符数量都超级大彼此还认对方为乱码如果有一种编码所有的字符都能编进去就好了 中日韩(CJK)欧洲拼音梵文阿拉伯文卢恩字符等等等都包括进去​添加图片注释,不超过 140 字(可选)能有么?🤔回顾历史 计算机中只有 0 和 1 并且是存储在字节里的原来只能表示和处理数字字符无法处理后来某些二进制数固定下来代表某个字符 形成了字符集从博多码(5bits)到 BCDIC(6bits)再到 EBCDIC码(8bits) 最后统一于 ascii​添加图片
oeasy
2023/04/06
5670
[oeasy]python0128_unicode_字符集_character_set_八卦_星座
[oeasy]python0112_扩展ascii_Extended_ascii_法文字符
法文字符 回忆上次内容 上次回顾了 字型编码的进化过程 从 7-seg 到 点阵字库终于让字母、数字、标点 明确了字型小写字符 占据了位置 法文字符 没有地方放了​添加图片注释,不超过 140 字(可选)7-bit的ascii 已经被完全填满 再也没有 法文字符的位置法文字符的编码中 无法 编码@字符不同的语言 有不同的 特殊字符​添加图片注释,不超过 140 字(可选)在 不同字符集里 特殊字符 和 标点 占据 相同位置字符集 不同 则会将文档 显示为乱码这可怎么办呢?🤔后一半字
oeasy
2023/03/20
6650
[oeasy]python0112_扩展ascii_Extended_ascii_法文字符
[oeasy]python0086_ASCII_出现背景_1963年_DEC_PDP系列主机_VT系列终端
编码进化回忆上次内容上次 回顾了 字符编码的新陈代谢ibm 曾经的EBCDIC 由于 字符不连续导致 后续 出现无数问题随着 网络的发展 数据交换的 需要原来的小隐患现在 产生了 巨大问题Bemer 联合各方巨头 想要推出 字符连续的编码集这新编码集 具体长什么样 呢?🤔新编码集7-bit的编码长度 结构和 今天的ascii 基本一样空了 28个字符 今天小写字母的位置当时 还不敢放小写字母为什么呢?各语言各语言 都想进入 7-bit 日文假名拉丁字符西里尔字符都眼巴巴地等着地儿放新编码 比EBCDIC
oeasy
2023/02/18
3710
[oeasy]python0086_ASCII_出现背景_1963年_DEC_PDP系列主机_VT系列终端
[oeasy]python0109_tty_打字头_电传打字机_字模_点阵字库
点阵字库 回忆上次内容 上次回顾了 字符字型 的 进化过程 从 谷腾堡 活字 到 罗马正字 和 意大利斜体 罗马帝国战斗力的征服 和 基督教文化传播 使得 拉丁字符 在日耳曼语地区广泛传播 种葡萄 喝葡萄酒 的 拉丁文化 被 种小麦 喝啤酒的 日耳曼人 学习了 意大利面和披萨饼 也是很好吃的 ​ 两次工业革命 会给字体的字型 带来什么变化呢?🤔 电传打字机时代的字型 ASR-33作为一代机皇 某种程度创建并统一了英文字母的标准写法 ​ 相对于艺术风格 ASR-
oeasy
2023/03/16
6050
[oeasy]python0109_tty_打字头_电传打字机_字模_点阵字库
[oeasy]python0116_文字的起源_苏美尔文明_楔形文字_两河流域
文字起源 回忆上次内容 上次回顾了西里尔字符的编码过程 KOI-7 KOI-8 ISO-8859 系列进行总结 字符扩展 ascii 共 16 种 由iso组织制定 从 iso-8859-1 到 iso-8859-16 无法 同时显示 俄文和法文 世界上的字符 除了 拼音文字 之外 还有 象形文字 ​ 添加图片注释,不超过 140 字(可选) 这个 象形文字 怎么来的呢?🤔 如何编码呢?🤔 象形文字 说到象形文字 第一想到的就是我们的中文 每个字符其实都是一幅画
oeasy
2023/03/25
5000
[oeasy]python0116_文字的起源_苏美尔文明_楔形文字_两河流域
[oeasy]python0127_中文系统_gbk_BIG5_南极星_内码转化
中文系统bgk 回忆上次内容 汉字字形通过 点阵式打字机像素级寻址的屏幕进入了计算机的世界​添加图片注释,不超过 140 字(可选)在海峡对岸的台湾同胞 也进入了汉字时代他们会使用GB2312编码吗? 能互通吗?🤔中国台湾 BIG5 码 是由 5 个公司联合制作的收录次序 取决于 频率 然后是 笔画数然后是 康熙字典同时用 BIG5 编码和解码也是没有问题的 但如果用BIG5编码却用gb2312解码就会有问题​添加图片注释,不超过 140 字(可选)不过存储的内容在文件里 系统不知道用
oeasy
2023/04/05
5730
[oeasy]python0127_中文系统_gbk_BIG5_南极星_内码转化
刨根究底字符编码之五——简体汉字编码方案(GB2312、GBK、GB18030、GB13000)以及全角、半角、CJK
英文字母再加一些其他标点字符之类的也不会超过256个,用一个字节来表示一个字符就足够了(2^8 = 256)。但其他一些文字不止这么多字符,比如中文中的汉字就多达10多万个,一个字节只能表示256个字符,肯定是不够的,因此只能使用多个字节来表示一个字符。
笨笨阿林
2022/05/09
4.4K0
刨根究底字符编码之五——简体汉字编码方案(GB2312、GBK、GB18030、GB13000)以及全角、半角、CJK
[oeasy]python0132_[专业选修]utf-8_unicode_transformation_format_8_编码方式
utf-8 回忆上次内容 上次再次输出了大红心<span style="color:red">♥</span> 找到了红心对应的编码 黑红梅方都对应有编码 原来的编码叫做 ascii️ \
oeasy
2023/04/10
3540
[oeasy]python0132_[专业选修]utf-8_unicode_transformation_format_8_编码方式
[oeasy]python0083_十进制数如何存入计算机_八卦纪事_BCD编码_Binary_Coded_Decimal
编码进化 回忆上次内容 上次 研究了 视频终端的 演化 从VT05 到 VT100 从 黑底绿字 到 RGB 24位真彩色 形成了 VT100选项 从而 将颜色 数字化 了 生活中我们更常用
oeasy
2023/02/14
3430
[oeasy]python0083_十进制数如何存入计算机_八卦纪事_BCD编码_Binary_Coded_Decimal
[oeasy]python0132_[趣味拓展]emoji_表情符号_抽象话_由来_流汗黄豆
emoji表情符号 回忆上次内容 上次了解了unicode 和 utf-8 unicode是字符集 utf-8是一种可变长度的编码方式 utf-8是实现unicode的存储和传输的现实的方式 ​ 添加图片注释,不超过 140 字(可选) "拜"字 unicode编码是0x62dc utf-8字节形式是b"\xe6\x8b\x9c" 如果我想看看 b"\x62\xdc"用utf-8解码 会得到哪个汉字呢?🤔 尝试解码 b"\x62" 很容易能够解码出来 ​ 添加图片注释,不超过
oeasy
2023/04/13
1.3K0
[oeasy]python0132_[趣味拓展]emoji_表情符号_抽象话_由来_流汗黄豆
刨根究底字符编码之七——ANSI编码与代码页(Code Page)
如前所述,在全世界所有国家和民族的文字符号统一编码的Unicode编码方案问世之前,各个国家、民族为了用计算机记录并显示自己的字符,都在ASCII编码方案的基础上,设计了各自的编码方案。
笨笨阿林
2022/05/09
1.7K0
刨根究底字符编码之七——ANSI编码与代码页(Code Page)
[oeasy]python0 113_字符编码_VT100控制码_iso_8859_1_拉丁字符_latin
\033[0m // 关闭所有属性 \033[1m // 设置为高亮 \033[4m // 下划线 \033[5m // 闪烁 \033[7m // 反显 \033[8m // 消隐 \033[nA // 光标上移 n 行 \033[nB // 光标下移 n 行 \033[nC // 光标右移 n 行 \033[nD // 光标左移 n 行 \033[y;xH // 设置光标位置 \033[2J // 清屏
oeasy
2023/03/21
4760
[oeasy]python0 113_字符编码_VT100控制码_iso_8859_1_拉丁字符_latin
【STM32H7教程】第52章 STM32H7的LTDC应用之点阵字体和字符编码(重要)
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第52章       STM32H7的LTDC应用之点阵字体和字符编码
Simon223
2020/02/20
7990
建议收藏,彻底搞懂字符编码问题,从此告别中文乱码
字符编码是计算机技术的基石,本文希望帮助大家彻底梳理清楚字符编码问题,不仅知其然,还知其所以然,摆脱被中文乱码支配的感觉。
业余草
2019/12/20
1.6K0
建议收藏,彻底搞懂字符编码问题,从此告别中文乱码
Python学习(3):理解计算机中编码三、认识常见的计算机编码
我们学习Python编程,经常对字符串这样的数据进行处理。我们也都知道计算机内部信息是采用二进制编码的,那么这其中的处理原理是什么呢?本篇就计算机中关于编码的知识进行总结。 一、为什么计算机内部信息采用二进制编码 计算机是由逻辑电路组成的,而逻辑电路只有接通与断开两个状态,正好可以对映二进制的“1”与“0”。这样的计算机设计在技术上会简单许多。 二、计算机编码的由来 计算机内部信息采用二进制编码,这决定了它只能直接识别0和1。我们所有各类型数据也都需要被转换为二进制0和1的序列存放在计算机中的。但是这样就产
梧雨北辰
2018/06/07
7870
从JavaScript看字符编码的前世今生!
导语 | 每个程序员都应该了解一下字符编码,有了基础概念之后我们对编程语言、字符处理能有更深入的理解。本文我花了大量时间进行资料查阅和考证,希望能够给大家带来一些帮助,多多交流! 一、起因 最近在研究Babel的源码,在看到Acorn词法解析源码中有这样一段逻辑: pp.fullCharCodeAtPos = function() { let code = this.input.charCodeAt(this.pos) if (code <= 0xd7ff || code >= 0xdc00
腾讯云开发者
2022/05/18
8670
从JavaScript看字符编码的前世今生!
推荐阅读
[oeasy]python0125_汉字打印机_点阵式打字机_汉字字形码
6890
[oeasy]python0111_字型码_字符字型编码_点阵字库_ascii演化
5900
刨根究底字符编码之六——简体汉字编码中区位码、国标码、内码、外码、字形码的区别及关系
4.2K0
[oeasy]python0122_日韩字符_日文假名_JIS_Shift_韩国谚文
7860
[oeasy]python0128_unicode_字符集_character_set_八卦_星座
5670
[oeasy]python0112_扩展ascii_Extended_ascii_法文字符
6650
[oeasy]python0086_ASCII_出现背景_1963年_DEC_PDP系列主机_VT系列终端
3710
[oeasy]python0109_tty_打字头_电传打字机_字模_点阵字库
6050
[oeasy]python0116_文字的起源_苏美尔文明_楔形文字_两河流域
5000
[oeasy]python0127_中文系统_gbk_BIG5_南极星_内码转化
5730
刨根究底字符编码之五——简体汉字编码方案(GB2312、GBK、GB18030、GB13000)以及全角、半角、CJK
4.4K0
[oeasy]python0132_[专业选修]utf-8_unicode_transformation_format_8_编码方式
3540
[oeasy]python0083_十进制数如何存入计算机_八卦纪事_BCD编码_Binary_Coded_Decimal
3430
[oeasy]python0132_[趣味拓展]emoji_表情符号_抽象话_由来_流汗黄豆
1.3K0
刨根究底字符编码之七——ANSI编码与代码页(Code Page)
1.7K0
[oeasy]python0 113_字符编码_VT100控制码_iso_8859_1_拉丁字符_latin
4760
【STM32H7教程】第52章 STM32H7的LTDC应用之点阵字体和字符编码(重要)
7990
建议收藏,彻底搞懂字符编码问题,从此告别中文乱码
1.6K0
Python学习(3):理解计算机中编码三、认识常见的计算机编码
7870
从JavaScript看字符编码的前世今生!
8670
相关推荐
[oeasy]python0125_汉字打印机_点阵式打字机_汉字字形码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档