关于架构的思考(一)——什么是问题

2019 年 9 月 12 日

关于架构的思考(一)——什么是问题

电影《教父》中有这么一句台词:

“ 花半秒钟就看透事物本质的人,和花一辈子都看不清事物本质的人,注定是截然不同的命运。”

这句话我赞同、也不赞同。赞同的是看透事物本质的能力确实比较重要,不赞同的是“注定是截然不同的命运”这句话,太过绝对。

用这句话作为引子,主要是强调看透事物本质能力的重要性。

文章标题虽然是《关于架构的思考》,实际上本文是在阐述关于“问题”的一些思考和总结。相信很多同学都会有一些相同的感悟和思考。


一 架构的本质


(注:本文提到的架构,如无特殊说明,一律都指“软件架构”。)


对于技术人员来说,一提到架构,可能很多人想到的就是高可用、高并发、容错性、高内聚低耦合或者是各种框架、开源等等。在引子中,我们谈到了看透事物本质的重要性,那么架构的本质是什么呢?


架构是挖掘问题本质、解决问题的过程。


架构贯穿于软件的整个生命周期 (需求分析、概要设计、详细设计、编码、测试、上线、运维),在这个生命周期中,我们可能会遇到无数问题,架构就是在解决这些问题的过程。


我们生活、工作中会遇到各种各样的问题,如果有意识的去思考、总结,那么就会发现一些解决问题的规律和方法,能帮助我们更好的解决各类问题。当然,也能运用在架构中。


二 什么是问题


前面的章节多次提到了一个词"问题",那么到底什么是问题呢?有很多人可能会说,你这问题真奇怪,你提的难道不是问题吗?


好吧,我确实是提了一个问题。中国的文字真是博大精深,一个词可能有 N 个意思。我们今天要讨论的并不是疑问句式的问题(Question is not problem) 我们要讨论的其实是 Problem。


先看一下维基百科中对于"问题"的定义:


问题很难有一个确定的、无异议的定义,但是,一般来说都问题包含有以下三个基本成分:


  1. 上下文-和问题相关的场景,指一组已经是明确已知的,关于问题的条件的描述。

  2. 目标-指关于构成问题的结论的明确的描述。

  3. 障碍-指问题的正确解决方法不是显而易见的,必须通过一定的思维活动,才能找到答案。

  4. 一般而言,问题是由于某些导致不能达到目的或者实现目标的认识障碍。它是指不期待的现状没有被解决或者事态出现意外。


上面的描述还是有点抽象,这里谈一下我对问题的理解:


问题 = 现状和目标有差距


举两个例子:


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


2019 年 9 月 12 日 18:38840

评论

发布
暂无评论
发现更多内容

本周的一些总结

Geek_zhangjian

大型互联网应用系统技术方案和手段总结

CATTY

互联网

week4总结---系统架构

a晖

互联网系统架构总结

周冬辉

【极客大学】【架构师训练营】【第四周】典型大型互联网应用系统的技术方案和手段

NieXY

极客大学架构师训练营

大型互联网应用系统的技术方案和手段(训练营第四课)

看山是山

分布式 微服务 极客大学架构师训练营

Week04 作业

极客大学架构师训练营

大型系统常用的技术方案和技术手段

imicode

DevOps研发模式下「产品质量度量」方案实践

狂师

DevOps 研发管理 研发效能 开发流程

架构师训练营」第 4 周作业

edd

深入浅出Shiro系列——权限认证

程序员的时光

权限系统

【微信聊天】5张图帮你看懂二分查找

Java小咖秀

Java 算法 漫画 二分查找

一个典型的大型互联网应用系统的技术方案&手段

Amy

极客大学架构师训练营 作业 第四周

第四周总结

胡江涛

极客大学架构师训练营

云计算 “拍了拍” Serverless

零度

云计算 Serverless 互联网 计算机

架构师训练营 week03 总结

尔东雨田

极客大学架构师训练营

Week4 作业

Shawn

重学 Java 设计模式:实战观察者模式「模拟类似小客车指标摇号过程,监听消息通知用户中签场景」

小傅哥

Java 设计模式 小傅哥 代码优化 观察者模式

架构师训练营 week03 作业

尔东雨田

极客大学架构师训练营

架构师第四周作业

傻傻的帅

架构师第四周学习总结

傻傻的帅

浅谈互联网系统架构

王鹏飞

架构师训练营第四周作业

一剑

小师妹学JVM之:逃逸分析和TLAB

程序那些事

Java JVM 小师妹 TLAB 逃逸分析

极客时间架构师训练营 - week4 - 作业 2

jjn0703

维基百科(Wikipedia)网站架构设计分析

架构5班杨娟Jessie

极客大学架构师训练营

用100行代码手写一个Hystrix

小眼睛聊技术

Java 架构 高可用 设计 后端

Week 04 命题作业

卧石漾溪

极客大学架构师训练营

做产品少走弯路:你需要懂点高阶的知识

我是IT民工

产品 管理 知识体系

中国未来需要什么样的人才?机遇与挑战!

CECBC区块链专委会

CECBC 中国人才 中国脊梁 数字经济

架构师训练营第四周-系统架构综述

草原上的奔跑

关于架构的思考(一)——什么是问题-InfoQ