阿里10年沉淀|那些技术实战中的架构设计方法

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

作者 | 朱春茂(知明)
来源 | 阿里开发者公众号

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

常用思考方法

技术常用思考方法

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

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

相关文章

阿里巴巴云数据仓库 MaxCompute 数据安全最佳实践

简介&#xff1a;MaxCompute作为企业级SaaS模式云数据仓库&#xff0c;正在为客户业务及其数据提供持续的安全保护。 MaxCompute 近期对产品的安全能力进行了全面升级 &#xff0c;结合数据生命周期&#xff0c;针对数据误用、数据滥用、数据泄露、数据丢失等典型数据风险场景&…

阿里平头哥发布RISC-V高能效处理器玄铁C908,打造端云一体生态

11月3日&#xff0c;在2022云栖大会上&#xff0c;阿里平头哥发布全新RISC-V高能效处理器玄铁C908。玄铁C908计算能效全球领先&#xff0c;较业界同性能处理器能效提升超20%&#xff0c;更能满足低碳时代的算力需求&#xff0c;可广泛用于智能交互、多媒体终端、AR/VR、无线通讯…

MaxCompute 公共云多租户设计的技术要点详解及产品实现特色

简介&#xff1a;公共云大数据平台在多租户的设计和实现方式上有所差异。本文主要介绍在公共云大数据平台的多租实现方案中需要考虑的问题和挑战&#xff0c;重点介绍了MaxCompute在计算和存储多租实现上的特点。期望通过这些介绍来让大家了解大数据云平台多租方案需要关注的技…

技术解读 | 智能开放搜索CTR预估模型

简介&#xff1a;本文介绍开放搜索CTR预估模型在个性化排序中的应用与实践 如何评价搜索排序效果&#xff1f; 搜索是用户触达信息最简单直接的方式&#xff0c;是APP、网页必备的功能。如何评价并提升搜索效果一直是搜索领域的常见问题。 一方面&#xff0c;可以基于用户体…

阿里云能耗宝助力华聚公司实现产品绿色升级

客户公司&#xff1a;杭州华聚复合材料有限公司 公司类型&#xff1a;制造业 案例简介&#xff1a;能耗宝“碳足迹在线服务”助力华聚公司产品绿色升级&#xff0c;能耗管理助力厂区实现年度节电17万度&#xff0c;约等于减碳排量120多吨。 2020年9月&#xff0c;国家提出了2…

无影云应用核心技术解读

简介&#xff1a;本文整理自阿里云无影高级技术专家付志超&#xff0c;在阿里云EMR StarRocks无影云应用线上发布会的分享。本篇内容主要分为三个部分&#xff1a; 1. 无影云应用产品简介 2. 无影云应用技术架构 3. 总结&展望 了解更多无影云内容&#xff1a;无影云应用重…

计算就是创造力!阿里云与FIRST影展设立“无影创作奖”

11月3日在云栖大会技术主论坛上&#xff0c;阿里巴巴集团首席市场官董本洪与FIRST影展创始人宋文共同发起了“无影创作奖”。云计算从支持大制作渲染&#xff0c;走向了更多类型片的创作领域。 按计划&#xff0c;无影创作奖将在FIRST惊喜影展上揭晓&#xff0c;为类型片创作者…

一个好的网站logo设计长这样

简介&#xff1a;一个好的网站logo&#xff0c;不仅让用户一眼知道网站品牌传递的信息&#xff0c;还能提高网站专业度和丰富度&#xff0c;增加SEO搜索排名。今天分享下如何设计一款实用的网站logo。阿里云智能logo设计&#xff0c;在线免费体验logo制作&#xff1a;https://l…

怀同行之心,筑信任之基,践数智之行

行路过半&#xff0c;道阻且长 十几年前&#xff0c;许多人还不知道"云"为何物&#xff1b;而现在&#xff0c;我们的日常生活与云计算技术的发展轨迹越发重合。从“双十一”全民购物狂欢日的海量交易支持&#xff0c;到春运铁路网络购票的海量承载&#xff0c;再到…

面向WEB3.0提升存储性能,蚂蚁鲸探底层区块链存储引擎正式对外开放

11月3日&#xff0c;蚂蚁集团数字科技在云栖大会上宣布&#xff0c;其历经4年的关键技术攻关与测试验证的区块链存储引擎LETUS&#xff08;Log-structured Efficient Trusted Universal Storage&#xff09;&#xff0c;首次对外开放。该产品主要用于可信数据在区块链上的存储&…

如何写出一篇好的技术方案?

近期在写某个项目的技术方案时&#xff0c;来来回回修改了许多版&#xff0c;很是苦恼。于是&#xff0c;将自己之前写的和别人写的技术方案都翻出来看了几遍&#xff0c;产生了一些思考&#xff0c;分享给大家。 我们为什么需要写技术方案&#xff1f;总结下来无非是几点&…

从“预见”到“遇见”| SAE 引领应用步入 Serverless 全托管新时代

近年来&#xff0c;企业的数字化随着互联网的普及发展越来越快&#xff0c;技术架构也是几经更迭&#xff0c;尤其是在线业务部分。从最初的单体应用到分布式应用再到云原生应用&#xff0c;出现了进阶式的变化。但带来便利的同时&#xff0c;也给企业带来了一定的复杂度&#…

AI 模型社区“魔搭”亮相,平头哥又上新,端云一体生态再升级

11月 3 日&#xff0c;2022 年云栖大会正式拉开帷幕。云计算、数据智能、操作系统、城市大脑、自研芯片等前沿技术应用悉数亮出&#xff0c;为参会者奉上了一场技术盛宴。 今年有哪些黑科技&#xff1f;下面我们先睹为快。 新型计算体系带来三大变革 阿里云智能总裁、阿里巴巴…

最佳实践|从Producer 到 Consumer,如何有效监控 Kafka

对于运维人而言&#xff0c;如何安装维护一套监控系统&#xff0c;或如何进行技术选型&#xff0c;从来不是工作重点。如何借助工具对所需的应用、组件进行监控&#xff0c;发现并解决问题才是重中之重。随着 Prometheus 逐渐成为云原生时代可观测标准&#xff0c;为了帮助更多…

漫画 | 新一代软件架构会影响到谁?

周末的晚上&#xff0c;张大胖照例要去 Hello World 咖啡馆&#xff0c;没想到在这里碰到了好几个老伙计。 原文链接 本文为阿里云原创内容&#xff0c;未经允许不得转载。

摩尔线程重磅发布多功能GPU芯片“春晓”,MUSA软硬件全面升级

11月3日&#xff0c;摩尔线程举办了2022秋季发布会。发布会上&#xff0c;摩尔线程推出全新多功能GPU芯片“春晓”、基于MUSA架构打造的业内首款国潮显卡MTT S80和面向服务器应用的MTT S3000&#xff0c;以及元计算一体机MCCX。这是时隔7个月后&#xff0c;摩尔线程多功能GPU产…

基于阿里云 ASK 的 Istio 微服务应用部署初探

目前 Kubernetes 已经成为业界容器编排系统的事实标准&#xff0c;基于 Kubernetes 的云原生应用生态&#xff08;Helm, Istio, Knative, Kubeflow, Spark on Kubernetes 等&#xff09;更是让 Kubernetes 成为云操作系统。在这样的背景下&#xff0c;Serverless 容器成为现有 …

ZooKeeper 在阿里巴巴的服务形态演进

Apache ZooKeeper 在阿里巴巴经历了开源自用、深度优化、反哺社区、开发企业版服务云上客户的演进过程&#xff0c;为了厘清本文脉络&#xff0c;我们对演进过程中提到的关键名词做以下定义。 Apache ZooKeeper&#xff1a;提供分布式协调服务如分布式锁、分布式队列等&#x…

阿里巴巴张勇:继续在全球舞台上提升技术先进性

在11月3日开幕的2022云栖大会上&#xff0c;阿里巴巴董事会主席兼首席执行官张勇表示&#xff0c;科技是阿里巴巴从过去走到现在&#xff0c;并且更好走向未来的基石。阿里对技术先进性的追求始终不变。先进性要在竞争中获得、在你追我赶中获得&#xff0c;更先进的技术是为了承…

K8s 网关选型初判:Nginx 还是 Envoy?

为了避免混淆&#xff0c;我们先对一些关键定义做一些厘清&#xff1a; 传统网关&#xff1a;未作容器化改造&#xff0c;未启用 K8s&#xff0c;通过流量网关与业务网关两层网关来构建&#xff0c;流量网关提供全局性的、与后端业务无关的策略配置&#xff0c;例如 Tengine 就…