上篇:技术架构的设计方法

上周我写的一篇文章《谈谈技术能力》引起了大家的关注,好多读者的评论“以写代想、以想促真、以讲验真”,大家的感受很深刻,基于上次的文章,这篇文章我其实更想跟大家聊聊一些常用的思考方法,思考问题的方式对了,往往可以帮助大家少走弯路。

常用思考方法

技术常用思考方法

技术思考本质还是结构化思考,所以常见的结构化思考方法也是适用的。这也是大家会看到很多技术架构师都会用一些方法论去分析问题的原因。但这里我不是重新去论述这些常见的技巧,而是分享从技术实战中得到的一些思考方法,为此我分为了技术架构设计的方法和技术 Leader 的思考方法两类。

技术架构思考方法

0--->1

这个思考方法的含义是:

当我们在一堆迷茫和混乱中不知道如何下口时,应该先贴近问题本身,还原客观事实,并快速形成 1 个能够拉起认知并快速讨论迭代优化的版本。大家围绕着这样的一个初始版本去叠加和丰富其他维度的内容,直到方案的共识。

我举一个实际的 CASE,大家在谈某平台能力升级的方案时候会经常喜欢用 PPT 画一些模块图,试图通过一些抽象的词汇来厘定清楚边界,核心概念。大家以为是在讲本质讲原则但实际所有人听了都是云里雾里,不知所云。因为通过概念去推导概念是无法真正回答问题的。

而比较好的应对方法我总结为以下三个步骤:

  • 用户视角的客观世界还原

用户故事的串联,基于交互流程和真实的数据来描绘这件事在客观世界中用户视角看来是怎么发生的。这就是我们找准一个大家都能够共识的视角,让所有人快速把客观事实搞清楚画出来这个 1,而这个 1 就是后续讨论的靶子 。这个 1 的表现形式我认为往往都是很简单的,要么是交互时序图,要么是 Excel 表格,而不是复杂的模块概念图。

  • 客观信息的结构化整合与提炼

只是树立起来 1 这个初始版本,还远远不够。因为第一个步骤只是将模糊、混乱的东西通过一种方法信息化表达出来,这还远远达不到使用的程度。所以还需要将上述信息进行结构化的整合与提炼,因为信息只有经过结构化才能够变成有意义的知识,才能够与之前的经验形成互动,也才能够进行初版的设计加工。比如对数据流的处理,就会发现有哪些是可以合并的同类项,有哪些平衡校验逻辑等。

  • 加入多元视角的检验与抽象

通过第二步的处理把 1 这个版本变得更加丰满,但是要形成完整的可实施方案还远远不够。我们还需要加入更多维度的校验和抽象,比如进一步抽象以看透其本质,比如加入重要异常,ROI,合理性等扩展性等多方的视角去做校验。

所以大家以后在遇到很多方案谈不清楚的时候,不要去听别人讲什么原则,概念,价值等等虚头巴脑的东西。把大家拉回来,回到最简单的最朴素的东西来对焦,那就是 一张交互序列图 或者 一张表格。越快速从一堆迷茫中快速提炼出这个 1 ,就越容易快速拿到结果。

1--->0

这个思考方法的含义是:

当我们在做一个方案时面临无数因素无法抓住关键点时,我们应该考虑删除法(把这个 1 拿掉不要行不行)去寻找决定性因素,以确保我们是真正的抓到了关键点。

我举一个实际的 CASE,每年都会做技术规划,相信这是很多架构师/Leader 很痛苦的事。痛苦的根源就是在脑子里面有无数需求,有无数的待优化点,也有无数的想法在萦绕,看到每个点觉得值得在新一年做攻坚。最终多半形成的就是一个表格,把今年要做的事罗列下,最多还排个优先级,好一点的换个形式变成 xmind 或者 PPT,再稍微好一点的可能会搭配上业务的目标和策略打法。但透过这些表面现象,其本质就是一个表格,没有抓住重点的表格。相信大家应该都看得蛮多的了。

如何应对这类问题我总结为一下几个技巧:

  • 因果判断法

很多时候我们都在谈,要抓住事情的本质,要具备化繁为简的能力,其实就是在谈通过表面的结果去探究真实的原因。所以在看哪些是决定性因素时,大家不妨用因果法去检验:这个因素到底是深层次原因还是诱导的结果。

  • 树干树枝法

有时候各个因素之前并不是单纯的因果关系,而是依附关系,就像是树枝依附在树干上一样。而我们要找到决定性因素,可以尝试这个方法去检验:如果把这个因素去掉会不会影响全局,是不是导致结论不成立。通过这样多轮的分析,是可以绘制出来树干的与树枝的关系,这个树干就是要找的决定性因素。

  • 支点撬动法

有时候各个因素之间可能没有直接或者间接关系,或者这个关联关系太弱很难通过以上两个手段去确定关键点。可以尝试支点撬动的办法,即寻找可以激发这一堆要素的关键要素。我之前给团队举一个例子,国家抓经济肯定不可能是米面粮油各种琐碎地抓,肯定是找到几个关键点起到支点撬动的作用,如房地产行业。抓住这个就能够带动上下游产业,进而激发各行各业。

以上是目前实践下来的抓取关键点的一些方法。但这里一定也要注意一个粒度问题,千万不要走极端。比如一提关键点,就去思考本质,一提到本质就去找根因,一找根因就挖到人性,然后得出来就是人性的原罪问题。这种都是没有任何营养的做法,也不利于事情的推动解决。

1--->2

这个思考方法的含义是:

当我们思考一些抽象问题/方案时候,需要对问题进行拆分(一分为二),通过分而治之的方法来确定每个小问题的边界,通过对小问题的解决来降低全局的思考难度,以尽快形成解决方案。

这个应该不需要举例子了,大家日常都应该有所接触,这里只是列举几个比较典型的技术架构动作:

  • 纵深拆解

拆解是非常好的一个将问题分而治之的办法,但要注意的是要做有机的拆解而不是物理的分解。比较典型的案例就是关于故障指标这个课题的处理,我是见过有团队层层分解,把故障指标分解到每个同学身上,这是极其错误的做法,也不可能得到想要的结果。我们应该是要做拆解,就是把要守住故障指标这个结果拆解成哪几类关键动作,进而要求团队关键动作做到位,而不是强行分解指标。

  • 横向解剖

做过实际研发的同学一定遇到一些业务需求的讨论,很多时候来来回回扯不清楚,而且经常会出现产品说这是技术架构问题,技术架构说这是业务需求问题,业务方说这是产品设计问题的现象。要破解这个僵局就需要把这个问题进行解剖,一层一层解剖清楚,把业务需求问题描述清楚,把产品设计搞清楚,把技术方案搞清楚。每一层都面向上游屏蔽下游的细节,才有可能把问题定义得清楚。一般来说,将这件事参与的角色进行解剖会更容易看得全面,更透彻。

以上是我实践对问题拆分的一些方法技巧,凡事多看几层终归是能够更加有结构性地认知事情本事,也越有利于问题的解决。

1--->N

这个思考方法的含义是:

当我们思考一些技术方案时候,不要仅局限在当时当刻的条件约束,要适当考虑系统的承载从 1 变到 N 的过程中的对系统架构带来的挑战。

做技术架构师的都知道做架构要求有前瞻性,不能被业务拖着走。但很多时候我们其实没有仔细思考如何才能够做到前瞻性,我总结为最关键的考虑的因素就是时间,把时间拉长来考虑关键生产资料可能发生什么变化,通过去架构这种变化所得出来的方案就具备了前瞻性。一般意义上来说,我们平台演进的生产资料抽象地归纳为三类:

  • 业务场景:这是最原始的生存资料,更是平台演进的源动力。典型的如市场份额变化,用户体价值的变化,竞对动态等。
  • 团队组织:是人创造了平台,也是主导平台的演进发展,这个生产资料如果不能得到有效利用,充分释放能动性就会出现平台无法支持业务快速发展,同时人也在平台中内卷。
  • 技术架构:技术架构其实本身也是非常重要的生产资料,这是很多人会忽略的地方。大家想一个最简单的例子,同一个变量分散在多个地方导致语义不清,维护成本巨大就明白了。

针对这几个生产资料我抽取了几个技巧去思考如何从 1 扩张到 N:

  • 架构考虑所有可能性但做有限明确实施

从业务场景的变化情况来看,的确充满很多不确定性。也遇到过一种典型的业务与架构的死循环的情况:前端业务面临太多不确定性需要技术架构给予专业意见和评估,但是技术架构认为业务啥都想不清楚还要我评估这评估那,两边就开始互相死锁。

而比较好的做法就是架构能够基于自己的经验和业务变化的理解,将可能性进行罗列考虑,然后给出来基于 XX 业务假设下,系统架构需要 XX 量级的工作量做 XX 样的能力迭代升级,可以做到 XX 的业务效果和价值,但需要进一步 XX 的业务输入。这就是架构考虑所有的可能性的含义,是需要给予业务的选择。

但技术架构实施却未必是要留有太多的空白,架构要大但是实施要小,对于值得留白的地方做好扩展设计,对于实在看不清楚的地方就要明确拦截(宁愿不做也不错做),将可能性留足但也不瞎埋坑。

  • 没有靠谱的人只有靠谱的机器

我常常去听一些故障复盘会议,在谈以后如何改进的时候很多同学都价值观爆棚,说以后XX类变更都加签上我来审核一道,我确认没问题再往后走。虽然这种精神值得鼓励但是这种做法实在是很不值得推荐,这样沉淀出来的平台其实是非常脆弱的,在做技术方案时一定要思考能够交给系统的绝对不能用流程,能够做到领域模型校验的千万不要靠旁路系统的侧面印证(如不必要场景下的核对)。

  • 提前思考“幸福”的烦恼

很多技术同学都希望做高并发大流量的系统,但很多时候在写代码的时候身体很诚实,怎么简单怎么来。实际做的时候既不考虑大流量也不考虑高并发,对于资损风险考虑也极其少,而且基本上都很有道理:现在的业务量没到不需要考虑那么多,这种事发生概率极其小一期先这样......要对技术架构做提前思考就必须从每行代码做起,提前考虑高并发大流量和严谨性。

通常来说大家其实都比较喜欢从 0 到 1 的过程,按照互联网的迭代式打法,后面的 1 到 N 的过程也会被不断压缩。所以提前在 0 到 1 的过程加入 1 到 N 的架构预判非常重要,因为很多时候结构性的问题在最开始就决定了,而且只有一次机会。

-1<--->1

这个思考方法的含义是:当我们思考一些技术方案时候,不要一条道走到黑,要前后、上下、左右、正反多个方面去思考,让技术方案具备更多维的视角。

我把常用的技巧总结如下:

  • 正反思考法

日常也 review 了很多同学产出的架构方案和系分以及测分,大家对于正常业务需求功能的论述基本上都没有啥大问题,按部就班去写就可以。但普遍的问题都是对问题的反面论述不多,如支付正常流程浓墨重彩,退款/拒付等逆向流程就没那么细致,业务功能正常流转论述很饱满但是异常场景就寥寥几笔。但正面与反面结合起来才是完整的一体,而且对反面的思考其实是对正面的有益补充。而且通常来说,我们在正面出现的概率大于反面,但是反面出现差错的影响所需要付出的精力却远远大于正面。

  • 极限思考法

在 review 技术架构方案风险相关的内容时,我都会特意问一下,如果出现 XX 问题最坏的业务影响是什么。为什么是问最坏的业务影响,是因为如果谈风险那肯定都是有一点点的,不利于大家去深究最关键的问题。通过极限设问,其实是激发大家去做最坏的打算,有了最终极的兜底手段才能够更乐观去做技术变更。

  • 对称思考法

在 review 代码或者逻辑结构时,在深挖细节和关键点后,我时常会拔出来看看整体的逻辑结构是不是饱满,是不是对称,是不是美。最简单的例子就是写了 if 我一定要有 else,不然没对称结构就让我很不舒服。因为我相信对称的美就是一种生产力,因为美的东西一定是简洁且直达本质的。而我们写程序要的就是逻辑清晰简单直达业务本质,逻辑结构清晰的基本上没大问题,不清晰(如变量瞎命名,方法无语义)的深挖下去多半都能发现大问题。根源就是逻辑清晰代码才清晰,代码不清晰基本上就是逻辑混乱,逻辑混乱就会产生 BUG。

M*N ---> M+N

这个思考方法的含义是:当我们思考技术问题时,可以尝试从系统耦合的角度去思考,尝试找一些突破口。

我举一个实际的 CASE,高速公路网的连接不是把所有目的地之间都修一条高速公路,而是会选择修建复用的高速公路主干道 + 分支道路的方式来组织这个网络。一条一条串联的方式就是耦合在一起的,这就是 M * N。通过主干道 + 分支道路的方式 就是解耦的,M + N 就能够组建这个高速网络。

在技术架构上如何运用解耦这个技法,我有如下几个提炼。

  • 解耦上下游关联性

在业务和技术架构发展的前期,把很多东西糅杂在一起是最快解决问题的方法。但随着业务和平台架构的进一步演进,势必是要做解耦,目的就是重新去界定各个模块的边界,平衡新的业务发展要求下各方发展快慢的诉求差异,通过解耦互相松绑快速发展。

这种技法在服务化的分布式架构中非常常见,基本上跨域的平台架构升级都有解耦的影子。

  • 解耦各个角色的依赖

解耦上下游关联性其实更多是在技术模型的抽象上,但在落入到技术模型范畴之前,还有就是我们在做更加抽象的解决方案探讨时要注意解耦各个角色之间的依赖。上述【架构考虑所有可能性但做有限明确实施】中提及的就是最好的案例。其实这里的本质表达就是,技术架构的设计应该要与商业选择,产品设计等解耦开来。

通过这一层的解耦其实能够多个角色之间基于 SLA 去交互,并且能够基于自身的专业思考给予对方更多的选项和可能性。很多时候的前瞻性和竞争力可能就是比别人多一个选择。

解耦思考法其实很有意思,几乎所有的大型平台架构升级都有这个思考法的影子,所以下次没啥思路的时候可以从这个角度做一个审视思考,说不定是有新的收获。

小结

以上是我在做技术架构方案时沉淀总结的一些思考方法,这些思考方法不可能解决遇到的所有实际问题,只能算是一个思考提示,在遇到问题可以尝试从这几个方法去看看是否有灵感。基于方法论但是不局限于方法论才是方法论最大的意义和价值。接下来一篇文章,我会从技术 Leader 的视角谈谈我在实践中的一些思考。

作者简介:知明,蚂蚁金服国际事业群资深技术专家,全球资金平台技术负责人,负责了蚂蚁全球化进程中底层资金清结算、外汇等平台能力的搭建和迭代演进。

原文链接

本文为阿里云原创内容,未经允许不得转载。 

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

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

相关文章

下篇:技术 Leader 的思考方式

技术 Leader 是一个对综合素质要求非常高的岗位&#xff0c;不仅要有解具体技术问题的架构能力&#xff0c;还要具备团队管理的能力&#xff0c;更需要引领方向带领团队/平台穿越迷茫进阶到下一个境界的能力。所以通常来说技术 Leader 的技能是虚实结合的居多&#xff0c;繁杂的…

阿里进入“全面云原生深度用云”阶段 PaaS支出占用云总成本43%

11月4日&#xff0c;2022杭州云栖大会《互联网产业与飞天技术创新》峰会上&#xff0c;阿里技术风险与效能负责人张瓅玶表示&#xff0c;经过持续多年上云用云&#xff0c;今年阿里巴巴集团在PaaS&#xff08;包括大数据、机器学习平台、数据库中间件等&#xff09;支持的业务形…

Apache ShenYu 网关正式支持 Dubbo3 服务代理

Apache Dubbo 在去年发布了下一代的云原生微服务版本 Dubbo3&#xff0c;目前最新版本 Dubbo3 已在阿里经济体完成对 HSF2 框架的全面替换与升级&#xff0c;Dubbo3 目前已成为社区企业实践推荐版本。Apache Shenyu 网关在这个背景下发布了对 Dubbo3 服务代理的支持。 本文介绍…

支持中英文自由说、访谈自动整理,新一代会议AI助理“听悟”升级发布

“你只需专注会议&#xff0c;其余一切交给听悟。”11月4日&#xff0c;2022杭州云栖大会&#xff0c;阿里巴巴达摩院研发的智能产品“听悟”进阶版亮相大会现场。仅需一台个人电脑&#xff0c;观众和媒体记者们即可体验全面集成达摩院语音语言智能的最新AI助理&#xff0c;感受…

成本节省 50%,9人团队使用函数计算开发 wolai 在线文档应用

我们的日常工作场景几乎离不开“云文档”。目前&#xff0c;人们对于文档的需求再不仅仅是简单的记录&#xff0c;而扩展到办公协同、信息组织、知识分享等。在国内众多在线文档中&#xff0c;wolai 因为功能新、迭代快、流畅的异地协同体验、高效的信息组织方式以及“信息块”…

阿里云“汽车云”亮相云栖大会,小鹏、一汽、长城、地平线等均已上云

11月3日&#xff0c;阿里云“汽车云”在2022云栖大会上正式亮相。基于云、钉钉、达摩院、瓴羊等核心技术能力&#xff0c;通过与客户、伙伴紧密共创&#xff0c;阿里云在研发、制造、流通三个业务场景形成了“自动驾驶云”“智造云”“营销云”解决方案&#xff0c;提供“产研供…

阿里云架构师梁旭:MES on 云盒,助力客户快速构建数字工厂

2022年5月18日&#xff0c;在“云上数字工厂与中小企业数字化转型创新论坛”暨“鼎捷MES & 阿里云云盒云上数字工厂解决方案发布会”上&#xff0c;阿里云智能弹性计算产品解决方案架构师梁旭为大家带来了《MES on 云盒&#xff0c;助力客户快速构建数字工厂》的主题分享&a…

如视技术副总裁杨永林:当传统产业遇到“数字空间”

图&#xff1a;2022阿里云视觉计算私享会现场 5月11日&#xff0c;在“2022阿里云视觉计算私享会”上&#xff0c;如视技术副总裁杨永林为大家带来了题为《当传统产业遇到“数字空间”》的主题分享。以下内容根据他的演讲整理而成。 随着互联网的发展&#xff0c;我们不断地将…

第二届上汽零束SOA平台开发者大会揭幕,智能汽车生态加速落地

重磅发布一览&#xff1a; 上汽、OPPO联合发布《生态域白皮书》&#xff0c;率先打通不同品牌硬件、操作系统和产品之间的交互壁垒&#xff0c;构建广泛兼容的生态域底层协议&#xff0c;并向全行业开放技术标准和开发资源。上汽、地平线联合发布基于征程5芯片的智驾解决方案。…

从 Redis7.0 发布看 Redis 的过去与未来

前言 经历接近一年的开发、三个候选版本&#xff0c;Redis 7.0终于正式发布&#xff0c;这是Redis历史上改变最多的一个大版本&#xff0c;它不仅包含了50多个新命令&#xff0c;还有大量核心新特性与改进&#xff0c;这些不仅能够解决用户使用中的诸多问题&#xff0c;还进一…

聊一聊并行文件系统的客户端优化之道

并行文件系统作为文件存储的一个高性能分支&#xff0c;自出现以来已经走过了二十个年头&#xff0c;一直被大规模应用于气象预测、石油勘探、高能物理、汽车制造、芯片制造、自动驾驶、影视渲染等高性能计算领域。在AI时代下&#xff0c;GPU并行计算如火如荼&#xff0c;阿里云…

马斯克“灭霸式”裁员,多个部门遭“团灭”!结果火速打脸,开始“跪求”被裁工程师复职?...

整理 | 郑丽媛出品 | 程序人生&#xff08;ID&#xff1a;coder_life&#xff09;“为了使 Twitter 走上健康的道路&#xff0c;我们将在周五经历裁减全球员工的艰难过程。我们清楚&#xff0c;这势必会影响到一些为 Twitter 做出宝贵贡献的人&#xff0c;但不幸的是&#xff0…

辛辛苦苦原创的网站,被抄袭了怎么办?

几个月前&#xff0c;某公司A针对网站被恶意抄袭发布了一则严正声明。A公司是一家网站设计公司&#xff0c;该公司网站精巧的设计、美观的排版&#xff0c;总会让人眼前一亮。可某天A公司却发现&#xff0c;另外一家B公司在没有任何授权的情况下&#xff0c;其网站照搬了A公司网…

IT人才能嗑到的这对CP,甜!

提到文件存储&#xff0c;相信大家都不陌生&#xff0c;在浩瀚的存储发展史中&#xff0c;文件存储无疑是璀璨的&#xff0c;耀眼的。那么&#xff0c;在性能已经成为刚需&#xff0c;自动驾驶行业风起云涌的当下&#xff0c;文件存储与GPU这对CP又有怎样的含糖量呢&#xff1f…

走进施耐德电气中国软件研发中心,读懂软件创新推动“双转型”

低碳发展和数字化的“双转型”挑战下&#xff0c;施耐德电气认为&#xff0c;软件将成为企业增长的强力引擎——软件能够打通产品、生产、运营和资产的各个环节&#xff0c;实现全生命周期管理&#xff0c;让数据“可视、可管、可控、可用”&#xff0c;促进整个产业链实现从设…

PolarDB-X 2.1 新版本发布 让“MySQL 原生分布式”触手可及

PolarDB-X 2.1 新版本发布 让“MySQL 原生分布式”触手可及 ——黄贵&#xff08;曲山&#xff09;阿里云数据首席架构师 了解更多PolarDB-X 内容&#xff1a; https://developer.aliyun.com/topic/polardbx_release PolarDB-X 2.1 是 PolarDB-X 非常重要的版本&#xff0c…

PolarDB-X 高可用存储服务:基于 X-Paxos 一致性协议

了解更多PolarDB-X 内容&#xff1a; https://developer.aliyun.com/topic/polardbx_release 一、DN 高可用方案 在 PolarDB-X 的系统结构中&#xff0c;DN 组件负责数据存储。 一个 DN 节点是 一个 MySQL 实例。 为了数据安全&#xff0c;我们需要多副本&#xff0c;一个逻辑…

奋战开源操作系统二十年:为什么编程语言是突破口?

【编者按】编程语言之于操作系统&#xff0c;意味着什么&#xff1f;本文作者飞漫软件创始人魏永明经过二十余年的操作系统开发探索&#xff0c;明确提出编程语言是自主基础软件&#xff0c;尤其是操作系统的重要抓手。如果说操作系统是基础软件生态里的皇冠&#xff0c;那编程…

一站式智能运维解决方案,企业系统的隐形守护者

时有爆发的疫情&#xff0c;加速引导着用户观影方式的改变。越来越多的用户习惯将观影模式从线下转移到线下。 疫情作为电影行业的“黑天鹅”&#xff0c;让线下影院陷入沉寂&#xff0c;但是却让网络视频平台焕发新生。多家视频平台公布了2022财年Q4的财报&#xff0c;其用户…

事务、全局索引、透明分布式,再见,分区健

事务、全局索引、透明分布式 再见&#xff0c;分区健&#xff01; ——陈默&#xff08;墨城&#xff09;阿里云数据库技术专家 了解更多PolarDB-X 内容&#xff1a; https://developer.aliyun.com/topic/polardbx_release 在刚刚发布的PolarDB-X 2.1.0版本中&#xff0c;开…