电影《教父》中有这么一句台词:
“ 花半秒钟就看透事物本质的人,和花一辈子都看不清事物本质的人,注定是截然不同的命运。”
这句话我赞同、也不赞同。赞同的是看透事物本质的能力确实比较重要,不赞同的是“注定是截然不同的命运”这句话,太过绝对。
用这句话作为引子,主要是强调看透事物本质能力的重要性。
文章标题虽然是《关于架构的思考》,实际上本文是在阐述关于“问题”的一些思考和总结。相信很多同学都会有一些相同的感悟和思考。
一 架构的本质
(注:本文提到的架构,如无特殊说明,一律都指“软件架构”。)
对于技术人员来说,一提到架构,可能很多人想到的就是高可用、高并发、容错性、高内聚低耦合或者是各种框架、开源等等。在引子中,我们谈到了看透事物本质的重要性,那么架构的本质是什么呢?
架构是挖掘问题本质、解决问题的过程。
架构贯穿于软件的整个生命周期 (需求分析、概要设计、详细设计、编码、测试、上线、运维),在这个生命周期中,我们可能会遇到无数问题,架构就是在解决这些问题的过程。
我们生活、工作中会遇到各种各样的问题,如果有意识的去思考、总结,那么就会发现一些解决问题的规律和方法,能帮助我们更好的解决各类问题。当然,也能运用在架构中。
二 什么是问题
前面的章节多次提到了一个词"问题",那么到底什么是问题呢?有很多人可能会说,你这问题真奇怪,你提的难道不是问题吗?
好吧,我确实是提了一个问题。中国的文字真是博大精深,一个词可能有 N 个意思。我们今天要讨论的并不是疑问句式的问题(Question is not problem) 我们要讨论的其实是 Problem。
先看一下维基百科中对于"问题"的定义:
问题很难有一个确定的、无异议的定义,但是,一般来说都问题包含有以下三个基本成分:
上下文-和问题相关的场景,指一组已经是明确已知的,关于问题的条件的描述。
目标-指关于构成问题的结论的明确的描述。
障碍-指问题的正确解决方法不是显而易见的,必须通过一定的思维活动,才能找到答案。
一般而言,问题是由于某些导致不能达到目的或者实现目标的认识障碍。它是指不期待的现状没有被解决或者事态出现意外。
上面的描述还是有点抽象,这里谈一下我对问题的理解:
问题 = 现状和目标有差距
举两个例子:
1、我负责的系统又不能访问了。
目标:系统可以正常访问
现状:系统不能访问
2、明年我要结婚。
目标:明年结婚
现状:现在还没有结婚
这两个例子虽然都不是疑问句式,但是他们实实在在的是问题。如果仔细思考,两个例子有很大差别,具体请看“问题的分类”。
三 问题的分类
我们遇到的问题有很多,按照不同的分类方式可以分成不同的类型,比如按照问题内容分类,可以是生活问题、工作问题、学习问题等。按照难易程度,有可以分为简单问题、困难问题等。
这里我们结合时间维度与问题现状、目标的关系,分为两类:
异常型问题
目标是现在就应该达到的
现状没有达到目标
解决方式偏重于寻找原因
例子:我负责的系统又不能访问了。
目标:系统现在是可以访问的
(目标是现在就应该达到的)
现状:系统现在不能访问
(现状没有达到目标)
这是一个典型的异常型问题。
解决异常型问题的关键点在于找到现状没有达到目标的原因。
改善型问题
目标是将来去达到的
现状没有达到目标
解决方式偏重于如何达到目标
例子:明年我要结婚。
目标:明年结婚
(目标是将来去达到的)
现状:没有结婚
(现状没有达到目标)
这是典型的改善型问题。
解决改善型问题的关键点在于如何达到目标。
PS: 经常看到关于架构演进的讨论,从问题分类的角度来看架构演进,可以认为是现有架构发生了异常型问题,在解决的过程中,发现不能通过优化现有架构来解决。于是提高目标,新设计架构来解决老问题的新目标,异常型问题转变为改善型问题。也就是说,架构都是在解决改善型问题。
举个例子:有一套秒杀系统,现有架构设计的目标是解决 5 万并发秒杀请求这个问题。运行过程中,发现 3 万并发请求就无法支撑了(发生了异常问题),在追查问题原因、解决问题的过程中,通过优化手段只能把并发提升至 4 万左右。且预计未来一年业务会快速增长,并发秒杀会提升至 20-30 万。再考虑到要未来的增长,架构设计目标变成了解决 50 万-100 万并发秒杀请求这个问题(异常型问题升级为改善型问题)。
四 问题的视角
我们认知世界的过程中,存在很多视角,从不同的视角去认知,可能得到完全不一样的结论(比如换位思考其实就是一个视角的转换)。这里我们以问题作为视角来看观察,先从一个小故事开始。
时间:新石器时代
人物:一个皮糙肉厚的原始人,我们称之为 MM
故事:MM 在回山洞的路上发现了一只膘肥肉厚的兔子,想到烤兔子的美味,MM 就口水横流。于是他就开始为了丰盛的晚餐开始狂追兔子。狡猾的兔子跑的飞快,而且专挑有着尖头的石头堆跑。MM 很倒霉,踩到了一块儿锋利的石头,脚被割破了。疼的嗷嗷叫的 MM 心想:回头儿我要弄个东西裹住脚,以后再也不让石头割破脚。于是,第一双鞋就这么诞生了。
上面的故事纯属杜撰,务必别当真。故事中,MM 在脚受伤时产生了一个改善型问题:要弄个东西裹住脚,不让脚被石头割破。解决这个改善型问题的过程中,鞋子诞生了。也就是说,鞋子可以定义为:解决光脚走路容易受伤的问题。
随着生产力和生活条件的提高,人们对于鞋子也出现了更多的改善型需求,于是出现了各种各样的鞋子。比如现在我们生活中的皮鞋&高跟鞋(美观、正式场合)、拖鞋(居家、浴室)、运动鞋(舒适、运动)、钉鞋(踢球)、登山鞋(爬山)等等。
从问题的视角来看,我们日常生活中接触的绝大多数东西,都是为了解决特定问题(需求)而存在,可以按照解决的问题来定义。
举几个例子:
鞋子的定义:为了解决光脚走路容易受伤的问题
梳子的定义:为了解决头发乱糟糟不好整理的问题
被子的定义:为了解决睡觉保暖的问题
注意:事物的定义必须以事物所处时期的面临的改善型问题为准,比如衣服在原始社会可能只是为了解决取暖的问题,但是在现代社会,就要解决更多的改善型问题,比如美观、舒适、轻便等等。
如果深入去思考,我们身边随便的一个东西,都可能会牵扯到一个古老的年代和若干改善型问题和异常型问题。
人类社会的发展史,伴随的是解决无数问题的过程。
对人类社会而言,解决的问题越多、层次越高,人类社会的发展水平就越好。
对个人而言,解决问题能提升个人能力,能解决的问题层次越高、个人的发展就越好。
(稍后会有章节详细说明)
从问题的视角来看架构的定义:架构是为了解决将现实需求转换为软件实现的问题。再回过头去看前面提到的架构的本质,就会好理解很多。
五 如何解决问题
(注意:这里只阐述观点,后面会有独立的文章阐述。)
解决所有问题的关键,在于将开放式转向封闭式
解决异常型问题,关键在于如何找到问题的根源。在没有找到前,问题的根源是未知的,属于开放式。
解决改善型问题,关键在于如何达到目标,存在无数可能,属于开放式。
六 总结
总结一下,本文主要阐述了以下观点:
问题的定义:目标和现状有差异
问题的分类:异常型问题和改善型问题
问题的视角:生活中绝大多数东西都是为了解决特定问题(需求)而存在,可以按照解决的问题来定义
问题的重要性:人类社会和个人的发展都是伴随着无数问题的解决,解决问题的层次越高,发展越好
问题视角的架构定义:架构是为了解决将现实需求转换为软件实现的问题
解决问题的关键:开放式转向封闭式的过程
本文转载自公众号滴滴技术(ID:didi_tech)。
原文链接:
https://mp.weixin.qq.com/s/kmN5OZE6dkXTvBRMl_1WkQ
评论