技术方案设计的方法论及案例分享

简介: 怎么去体现技术方案设计的深度是大家普遍关心的一个问题,这个问题不是个例问题,因此本文主要分享下作者个人的一些观点和看法。

怎么去体现技术方案设计的深度是大家普遍关心的一个问题,这个问题不是个例问题,因此本文主要分享下作者个人的一些观点和看法。

文章主要分为三个部分:

  • 第一部分主要分析为什么技术方案没有体现出深度,找到问题后就好解决,并提出技术方案的广度和深度特征。

  • 第二部分是技术方案设计的方法论,主要包括了本质论、矛盾论、系统论、演进论四个方法论,构成一个闭环反馈链路。

  • 第三部分是通过具体的案例,反复运用第二部分的方法论阐述在实例的案例中如何去应用,加深对方法论的理解。

技术方案体现广度和深度

1. 方案设计常见的反馈

我们都希望自己设计的技术方案能够让人眼前一亮、叹为观止、拍案叫绝……,然而在实际情况下,却并不是这样的,我们经常听到如下的说法:

  • 场景简单:业务场景很简单,怎么也设计不出花儿来。
  • 复杂度低:业务复杂度低,很难讲得出挑战来。
  • 亮点少:运用的技术亮点少,基本上都是现有的中间件或框架来完成。
  • 设计普通:方案缺乏新颖,业内也是这么做的,没有体现出自己的设计能力。
  • ……

的确,上面反而是经常遇到的场景,那么需要思考下背后的问题和原因,为什么会有这样的感受,如果这个事情交给另外一个人去做,为什么他能设计出更好的方法,而当时你却没有想到呢?

2. 原因探究

个人觉得这个问题最为核心的一点是就事论事,因为只是看到这个事,需要完成某个具体的功能点,而没有跳去这个事情的表象,去思考到底要什么、解决了什么问题、价值是什么,这样思考很有可能你现在的解决方案只是其中一个很小的点,没有站在全局去思考问题。曾经我的老师讲过一个观点:把手掌放在眼前,你只能看到这个手掌,如果把手掌放在远处,你的视野就更广了。因此视野更关键,不要只关注事情的本身,可以跳出来看看,或者你能想到的更多。

就事论事只是一个表象,背后还是深层次的原因,个人觉得是缺乏体系化的思考,"只见树木、不见森林",没有从不同的维度上去思考问题,只是线性的思考,直接的表现就是【就事论事】,只把手头上的事情完成即可。讲体系化思考的书籍很多,大家有兴趣可以去了解下,帮助自己更好地思考问题。

到这里其实还没有结束,还有一个重要的原因是缺乏方法论引导,就是没有形成自己的一套方法去思考问题、解决问题,不同的人会有自己的方法,有了方法论的引导,拿到一个问题,知道怎么去分析、思考、解决,远比只是被动地接受一种具体的方案要好,下次场景变了,很有可能现有的方案是不能支撑的,因此需要建立一套适合自己的方法论,具体在第二部分会分享自己的方法论。

3. 技术广度和深度

广度和深度对于我们来讲并不陌生,大家都知道要体现出广度和深度,却不知道怎么去做。广度觉得从数量和类型两个维度去分析(应该还有其它的维度,大家可以自行补充),是让事物更加地丰富,比如动物园里有不同的动物,种类比较多,就能更加满足不同人的观赏需求;深度主要体现出问题的识别和创新解决上,一个问题大家没有发现,而你从中发现了,这就是深度,比如网上购物,站在今天来看,再平常不过了,但在 20 年前,并不是每个人能想到的。现如今,同样是做电商,每个公司的打法、策略是不一样的,这就体现在深度上,深耕于某一个领域。

这里拿自己的经历来说明:之前本人在滴滴是做优惠券业务(当时营销比较简单,就是单一券业务),优惠券只是一种营销的具体手段,行业内有卡、券、分、金,那么对于技术来讲就是丰富营销基础能力,从单一券能力发展至卡、券、分、金的营销行业标配能力,这个就体现了广度,从数量、类型上丰富了。而怎么体现深度呢?营销中有一个重要问题是如何防控资损,一旦有资损,问题就比较大,因此需要去好好思考和设计方案,当时借鉴稳定性方案,分成事前、事中、事后三个阶段去防控资损,每一个阶段里又包含了不同的方案,深度主要体现对问题的识别,以及怎样创新地去解决,重点是创新,做到人无我有、人有我优

4. 怎样证明技术方案是好的

大家在和别人分享、交流技术方案时,有人会提出一些尖锐的问题,比如:为什么说你的技术方案是好的?其实这个问题非常好,值得大家去思考。

有一个很常见的情况,大家去讲一个技术方案时,把背景、目标讲完之后,直接给出了技术方案,其实技术方案本身并不重要,重要的是你是怎么思考的,思考的过程非常重要,强调的是 WHY,HOW 很重要,但 WHY 更重要。这里有两个原则:

  • 三段论:大提前、小提前、结论。一定要先讲大提前,它是一个有力的支撑,比如写议论文时,平时常写"鲁迅说过 xxxxx",这个就是大提前;在技术方案设计上,就是要看业内的方案、业界的标杆在哪里,和它有什么不一样、创新了什么,一目了然,往往大家忽略了这个大提前,直接讲自己的方案,怎么证明你的就是好的呢?没有对比就没有感觉。

  • 环境论:有时业内还没有具体的方案,或者是当下你的公司不适合业内顶配的方案,比如"中国特色社会主义",它就是强调当前的环境,结合了具体的业务场景来权衡考虑的,并不是行业内的最优方案就是适合你的,方案的设计一定要有权衡、选择,设计出最适合当前环境的方案。

1.png

技术方案设计的方法论

1. 方法论到底是什么

经常有人讲方法论,方法论也让人感觉比较玄乎,感觉是一种虚无缥缈的东西,方法论在百科中的解释是:“方法论是关于人们认识世界、改造世界的方法的理论”,看了这个定义,大家还是不清楚它到底是什么,只知道它挺厉害的,但不知道方法论到底是什么、有哪些方法论、应该如何去运用方法论,所以这里谈下自己的理解。

个人对方法论的理解是方法论是让方法变成更方法的方法,方法论拆分成两个词方法和论。因此它首先是一种方法,方法是为了解决具体的问题,比如大家熟知的稳定性建设,全链路压测、异常监控等都是具体的方法,但这些方法都是一个个散的点,并不是最好的方法,方法论强调的是好的方法;然后再看"论",论是议论、分析、思考的过程,它最大的好处是让方法更好,还是拿稳定性建设来讲,现在有成熟的方法论,分成事前、事中、事后三个阶段,事前包括容量评估、全链路压测、强弱依赖……,这样讲就比较成体系,将它划分成事前、事中、事后,覆盖了整个过程,你基本上挑不出什么毛病出来。因此方法论是对解决方法进一步的升华和提炼,形成更通用、成体系的方法,它并不是虚无缥缈的东西。

方法论是通过不完全归纳法总结出来的,方法论并不是万能的,比如你看到的天鹅都是白色的,万一哪天出现了一只黑天鹅,就说明当时的归纳是不完全归纳的。

2. 技术方案设计方法论

下面所说的方法论都是存在的,自己只是组合运用了这些方法论而已,下面总结下自己工作中使用的一些受益比较大的方法论。

本质论是我第一个受益的方法论,本质论强调的是透过现象看本质,这句话听起来是比较简单的,但要做到却是非常难的。看透本质至关重要,能让你真正把控事物的核心,我个人的一个方法是使用不超过 15 个字概括出事物的本质,因为本质的东西是简单的、美的、直揭主旨的,所以判断是否抓住了事物本质的一个标准就是用简单的话能否概括出事物的主旨。比如高并发,现在不再是一个新鲜的词汇,甚至大学生都知道怎么去做,缓存、异步操作、并行……,这些都是具体的措施,问高并发到底是什么,大家都能回答一些,比如流量大、系统压力大、用户多……,这些都是具体的特征,用一句话概括高并发:有限的资源应对大量的请求,概括出了高并发的根本特性,抓住了本质的东西就比较解决问题。带应届生的时候,我提到一个观点:工作三年以后,要能说得出 10 句对技术本质理解的话,提早给自己定下目标,在平时中积累一些思考和沉淀。

矛盾论揭示的是事物之间的矛盾,矛盾是推动事物不断发展的动力,一般从事物本质中,可以看到一些矛盾出来,比如上面高并发的本质是有限的资源应对大量的请求,有限对大量本身就是一对矛盾,找到了矛盾就去解决矛盾,解决的一个方向就是平衡矛盾,矛盾解决了,问题自然就解决了,比如现在资源是大量的,完全可以应对大量的请求,这样高并发的场景对于你来讲就不是一个问题。

系统论是从系统各个要素出发,多维度思考问题,最为简单的是从矛盾双方出发思考问题,比如有限的资源,能不能让资源的数量变多呢?能不能提升资源的处理能力呢?……,从这些方向去思考,思路就一下子打开了,所谓的缓存等常说的方法只是一个个具体的解决手段,我们需要更加立体、多维的解决思路,再结合具体的场景、现状组合一些解决方法。

演进论强调事物是进化的,符合事物的发展规律和人的认识,有可能我们想得非常完善,不可能等所有的事情都做好了再上线,得有计划、分阶段地解决问题,优先解决主要矛盾、核心诉求。也有可能经过一段时间之后,事物的主要矛盾发生了变化,我们的方案也得演进式设计。

2.png

技术方案设计案例

下面拿三个具体的案例来讲怎么将方法论落地于实际的技术方案设计,让大家能够感觉到方法论的真正作用,不再是一种虚的感觉。

1. 高并发技术方案

高并发在之前是非常火的,大家也都能说出一些解决措施,如使用缓存、MQ、并行……,下面谈下自己的一些思路。

问题定义:高并发的本质是有限的资源应对大量的请求,它的核心问题就是现状不足已支撑那么大量的请求,系统的负载太高,很可能出现网站打不开、用户下不了单等现象。

问题分析:高并发的矛盾就是有限的资源对大量的请求,解决了这个矛盾就解决了高并发的问题。接下来就是平衡这对矛盾,一般是采用"中和"的思想,就像中医治病:寒病用热药、热病用寒药,因此就会站在资源和请求两个维度去思考。资源能不能变多:常见的有水平扩展;资源能不能变强:常见的是性能优化,性能优化又会分成前端优化、网络优化、计算优化、存储优化、程序优化……。请求能不能减少呢?比如通过答题错峰,合并请求等等,这样解决问题的思路就一下打开了。

解决方案是重要的,但设计的过程更为重要,清楚了问题是什么、怎么去分析,解决方案自然而然就出来了,重要的还是分析的过程。

3.png

2. 异步处理技术方案

说到异步处理,大家最容易想到的方案就是 MQ。MQ 是常见解决的技术方案,如下图所示:贷款端系统向放款端系统发送标的信息,一天的量大约有 4000 多笔,每天偶尔有几个是超时的,影响放款。怎么去解决这个问题呢?用 MQ 是最容易想到的,当时公司还不有用到 MQ 中间件,去搭建一个不现实,怎么办呢。

4.png

问题定义:现有的系统能力无法支撑实时处理,同步调用对系统的压力很大,很有可能某个时间点系统的负载比较大,处理慢了接口调用就超时了。

问题分析:借鉴 MQ 的设计原理,发送方将消息先发送至 Broker 上,消费方从 Broker 上拉取消息消费,抽象出异步处理的本质就是数据暂存 + 择机处理,那么问题来了,数据暂存在哪里呢,内存?文件?数据库?……,择机处理的方式是拉还是推,定时还是随机……,这样一思考,发现除了 MQ 还有很多其它的解决方法,总结出通用的解决方案后,可以在不同具体的环境中演绎出不同的方案。当时设计的方案就是将数据存储到 ftp 服务器上,实现也比较简单,方案没有最好,只有适不适合,难道公司没有 MQ 中间件,这个事情就不能解决了吗?

3. 可扩展性技术方案

可扩展性设计是现在一个非常典型的场景,当时遇到的场景是实时人群计算场景,每当业务方提一个需求过来,就要进行对数据口径,然后熟悉业务方的一些业务,接下来就是编写 Flink 任务,测试、核对,最后上线,整个流程下来至少 2 周,需求提一个简单需求,很疑惑为什么要 2 周才能上线。

问题定义:业务方希望快速上线而实际开发要 2 周的矛盾,究其主要原因是不懂业务,需要有熟悉的阶段,这个阶段耗时比较多,真正开发的时间不多,怎么去解决这个问题呢?

问题分析:虽然主要的矛盾找到了,很明显的一个方向是让业务方的开发参与进来,平台只做一些支撑、答疑的作用,但是让业务方的同学进来,就有一个挑战:别人没有学过 Flink,你让他来开发,业务方愿意吗?对整个业务进一步的抽象,发现我们的需求场景是变化的,实时指标也是变化的,但整个流程却是不变的,用 y = f(x) 来表示,就是来一个 x 经过计算、变换成结果 y,所以当时就梳理出了哪些是变化的、哪些是不变的,从多变中找不变的东西。这里还需要一种能力是抽象分层,如果把 f() 只当作一层,就只有一个抽象分层,如果里面它还有复合函数,那么就有多个抽象层,这取决于对问题的思考,不同的人设计出的抽象层次是不一样的。当时借鉴了 Flink 的一些设计思想,将整个过程产品化了,业务方只要选择、勾选一些信息,就会自动生成 Flink SQL,然后点击运行即可。SQL 对于大家来讲,入门比较简单,基本上能看得懂,没太大的难度。平台侧不需要像之前那样完全投入人力去学习业务知识、开发、测试上线。

5.png

总结

本要分享了技术方案设计的一些思路,整个方法论包括本质论、矛盾论、系统论、演进论,通过三个具体的案例阐述怎么去运用方法论。

作者:高福来(不拔)

原文链接 

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

 

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

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

相关文章

第四范式:现代存储架构下的系统优化实践

8月21日,白玉兰开源联合示说网主办的“开源大数据技术线上meetup”特邀约大数据领域的前沿技术专家,就大数据存储的关键技术、挑战和当前应用展开交流讨论,阵容强大、内容全面。第四范式体系架构科学家,高性能计算Team leader卢冕…

穿越疫情,阿里云3000万补贴助力中小企业寒冬突围

简介: 2021年,活下去,是所有中小企业的一致心愿。冬将尽,春将来。我们也都在迫切等待着百花齐放的春天到来,阿里云愿和广大中小企业一起守望相助,共待山河无恙,春暖花开! 简介&#…

KubeVela:标准化的云原生平台构建引擎

简介: 本文由“GO 开源说”第三期 KubeVela 直播内容修改整理而成,视频内容较长,本文内容有所删减和重构。 KubeVela 的背景 KubeVela 是一个基于 Go 语言开发的云原生平台级开源项目,这个项目是去年 11 月中旬正式发布的。虽然发…

漫画:什么是自动驾驶?

作者:小灰来源:程序员小灰什么是自动驾驶自动驾驶,也被称为无人驾驶,顾名思义,是指交通工具在没有人类操作的情况下,也能够完成环境的感知与导航,顺利到达目的地。从传统的手动驾驶到智能的自动…

一场关于动态化开发实践的技术探讨

简介: 开发团队在面临业务高并发需求时,如何对技术模型进行迭代升级? 在过去的一年中,经过跟支付宝移动端团队和广大开发者的交流和沟通,我们了解到大家在涉及到关于移动应用跨端开发的过程中遇到的一些问题&#xff0…

云效故障定位研究论文被ICSE 2021 SEIP track收录

近期,由阿里云云效团队联合复旦大学CodeWisdom研究团队、阿里技术风险部安全生产团队,合作完成的论文《MicroHECL: High-Efficient Root Cause Localization in Large-Scale Microservice Systems》被ICSE 2021 SEIP track录用。本文针对大规模微服务系统…

CSDN 开学见面礼!3 周带你 Get 大厂工程师基础能力

暑假即将结束,金秋开学季来袭。别让年轻的自己虚度光阴,现在加入C友会,大厂CTO级别导师陪你加buff!10+场考前辅导,50个任务文档,600+分钟大咖讲解与答疑,3周带你掌握大厂…

迷雾世界无限号服务器,迷雾世界部分服务器互通公告_迷雾世界部分服务器3月31日数据互通详情分析_手心游戏...

迷雾世界部分服务器3月31日数据互通公告!迷雾世界亲爱的玩家:为了优化游戏体验,更好地提升组队、交互的互动体验,开发组在3.27 -3.30对所有玩家进行了关于数据互通的调查投票。结果显示,78%的玩家投票同意。因此&#…

一文读懂云上DevOps能力体系

简介: 阿里云ECS自动化运维套件架构师,深度拆解云上运维能力体系建设:自动化运维等级金字塔、自动化运维的进阶模式、DevOps的基础核心、云上标准化部署三大能力…… 序言 云计算行业已经有十多年的发展了,话题早已从“要不要上云…

mcem r语言代码_R语言阈值自回归模型(TAR)代码示例

原文链接:R语言时间序列TAR阈值模型分析​tecdat.cn阈值模型用于统计的几个不同区域,而不仅仅是时间序列。一般的想法是,当变量的值超过某个阈值时,过程可能表现不同。也就是说,当值大于阈值时,可以应用不同…

【洛谷算法题】P4414-[COCI2006-2007#2] ABC【入门2分支结构】Java题解

👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P4414-[COCI2006-2007#2] ABC【入门2分支结构】Java题解🌏题目描述&a…

EDAS微服务应用同城容灾最佳实践

简介: 大多数业务应用只要做到同城双活,就可以避免掉大多数数据中心不可用故障。本实践就是帮助大家高效、低成本地实现自己的业务应用具备同城双活容灾能力。 前言 上云目前已经是绝大数企业首选的IT基础设施建设方案,但是云上仍然存在一些…

脸书推出VR视频会议应用程序 正式跨出元宇宙第一步;三家公司新入选福布斯2021云计算百强榜;微软挖来亚马逊云业务顶级高管贝尔...

NEWS本周新闻回顾微软挖来亚马逊云业务顶级高管贝尔微软公司已经聘请亚马逊云业务高管查理贝尔担任其企业副总裁。鉴于微软的Azure 云业务正试图从亚马逊 AWS 手中争夺份额,这一挖角行动可以说是微软的一次胜利。在亚马逊前 AWS 主管安迪贾西被任命为亚马逊 CEO 后&…

三字经带拼音a4打印版_人教版八年级下册英语6单元重点单词带音标打印版

UNIT 6shoot [ʃu:t] v. 投篮,射击,发射stone [stəʊn] n. 石头weak [wi:k] adj. 虚弱的,柔弱的god [ɡɒd] n. 上帝,神remind [rɪmaɪnd] v. 提醒,使想起bit [bɪt] n. 一点,小块a little bit 有点儿&am…

拥抱云原生,Fluid结合JindoFS :阿里云OSS加速利器

简介: Fluid 是一个开源的 Kubernetes 原生的分布式数据集编排和加速引擎,主要服务于云原生场景下的数据密集型应用。在 Fluid 上使用和部署 JindoRuntime 实现数据集的可见性、弹性伸缩、数据迁移、计算加速等,并流程简单、兼容原生 k8s 环境…

【观点】传统企业如何在数字化时代实现进化?

简介: 我们看到的数字化的大多数场景集中于日常商业消费活动,背后其实是超越个体行为的场景变革。 究竟是谁在承载这个时代一步步走进数字化场景?又是谁通过数字化技术与解决方案帮助他们实现场景变革?这个过程是什么样的&#xf…

网易数帆发布轻舟低代码平台2.0,聚焦中等复杂度企业级应用

编辑 | 宋 慧 出品 | CSDN云计算 头图 | 轻舟低代码平台2.0发布会现场 8月26日,网易数帆正式发布轻舟低代码应用开发平台2.0版本(以下简称“轻舟低代码平台”),以全新的可视化编程语言为特色,针对中等复杂度的企业级应…

宝塔 开启_宝塔面板安装完的一些列操作

前言新安装的宝塔会有很多地方需要配置,如果懂的大佬可以跳过,如果是小白可以按照辉哥的教程一步步操作,辉哥是以虚拟机进行操作的,但是服务器也是一样的道理!安全入口因为现在使用宝塔面板的人数在激增。所以为了避免…

黑灰产攻击洪峰来袭,企业如何守住自己的钱袋子?

简介: 风控大考最佳实践 根据阿里云历史行业风险治理相关数据显示,未经风险管控的自然流量中,约三分之一比例属于疑似黑灰产的高风险行为;而在建立合理的风控指标监控体系并采取风险防控手段后,高风险用户比例下降至3%…

服务网格的最佳实践

简介: 服务网格是用于处理服务间通信的专用基础设施层。它负责通过包含现代云原生应用程序的复杂服务拓扑来可靠地传递请求。 微服务发展的这几年,新的技术和概念层出不穷,这些技术的引入本质上都是在围绕服务稳定性和业务开发效率提升&#…