查看原文
其他

“构建”世界的能力-架构能力

微观技术 2022-11-10

Editor's Note

多元化思维能力、抽象能力影响着你的架构能力,也决定着你的“世界构建能力”。

The following article is from 体制化思维 Author 体制化思维


     
    复杂事情往简单了去想,是拆解,是切割,就像一剑破万法;而将简单事情往复杂了去想,是缝补,是搭建,是打造自成规则的小天地。如果站在成事和做事角度呢?任何人组织、企业、个人都会面临选择,左右为难。如何平衡这种矛盾呢!本文试图站在更高的视角审视构建(架构)这个事情,溯源探秘、揭示本质,从构建世界再到软件架构设计。
  • 要构建架构设计的标的物本质是什么?

  • 架构过程为什么需要共识的、用于描述表达的通用语言

  • 构建迭代、创新的本质过程是什么?

  • 构建过程中,工具处于什么角色?

  • 面对问题时,人们如何推演决策





 前言 


   《银河补习班》是一部很棒的电影,影片主角为一名桥梁设计师,他不仅能够设计桥梁建筑,还能“设计”主角儿子的未来。如影片中一样,很多人低估了“架构师”的重要性及能发挥的能量。希望社会、行业能够重视有工匠精神的这伙人,也希望这伙人能在有生之年持续发挥他们的特长。




 1 

“梦中的仙境”是一种抽象


    首先,我们一定要认识到到,我们是在抽象这个世界,而不是描述这个世界。
    世间夸张之物,无非梦境、仙境、幻境。这些本就是那梦幻之境,所见之景,所识之人,无不是美轮美奂。如名著西游记、红楼梦、桃花源记都有描述:

    西游记中的仙境,偏于现实化,以凡间的聚会歌舞呈现,不过是更换了地点,有那仙雾缭绕,瑶池楼台方成仙境。

    红楼梦中的仙境却是在宝玉的梦中。本就是一个钟爱女子的痴情公子哥,梦见的无一例外的全是那天上少有世上无双的仙子,连梦境都是梦幻。

    桃花源记中描述也是对现实的理想化表达。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。见渔人,乃大惊,问所从来。
   
    针对如此玄幻的内容,文学名著中都以人的日常行为、情绪、环境等作为抽象、表达,如何玄幻都逃不出人间二字。除了文学领域,人类在不同领域也创造了不同的表达方式,如:数学学科、计算机学科、物理学科。审视这些学科,我们面对的任何事物,都有个范围,都逃不开我们对世界的抽象,并尝试描述它们。

    而计算机领域呢,消费互联网、产业互联网、新基建,再到前几年提出的数字地球、智慧城市、虚拟现实等,都是对现实不同的抽象方式:

  • 从创业者视角看,如埃隆·马斯克、马云一样,是想构建一个未来世界的生态。

  • 从产品视角看,如何理解用户,挖掘现实和未来的需求,设计方案满足用户。都抽象为一个个相关联的需求。

  • 从设计角度看,有面向对象由上往下沿用语言附带的抽象设计理念;也有数据库设计由下往上存储设计方法;或更彻底的DDD领域设计抽象等。但现代技术无论如何逃不出,不同生命周期领域对象和持久化的数据库表。

  • 从实现视角看,程序员把任何事物都抽象成一行行代码,或哪类语言解决相关问题更加擅长等;

  • 从系统视角看,会有边界、会有用户、会有利益等。

  • 从用户视角看,就如空气、水、环境、语言一样,大多使用但不自知。

  • ... ...

   
    面对如此复杂的领域知识、体系知识,难免会懵。化繁为简后,架构师需要设计或找寻一种表达方式,可以让用户、合作伙伴、产品、技术、运维、运营、管理层都能够理解一致。从我个人角度理解,架构师的职责和重要性严重被低估,软件企业内部,架构师需要负责对不同角色解释架构,不产生理解偏差。当然不一定全部是用文档或其它介质作为载体,当有异议时,会议语言作为最后的方式。当然领导拍板又会拍向哪处,谁也说不好。(ps:不是全栈的架构师不是好的架构师!)
   
    回归主题:任何行业业务、现在\未来的需求,再复杂都会映射到人们在现实的行为和思想中。而作为架构师要解决问题,切入点都是人类对世界的抽象相关。所以,你对世界的认知宽度和广度,决定了你所架构“世界”的宽度和广度。多看书,多思考,多元化思维的搭建,将有助于更好认知世界、认知环境、认知他人、认知自己,才可能构建自己的“理想国”。
   


 2 

数据---最重要的表达方式


    我们是在抽象这个世界,而不是去描述这个世界。但是又不得不去描述这个世界!真的很讽刺,人类创造语言、符号,知识是为了更好的描述这个世界,并试图了解它。那么,人类创造的语言、符号准确吗?答案很可能是否定的。现实残酷,但我们必须找寻一种通用的,不会过期的“表达体系”来传承。

《哲学起步》一书中提到符号模式时,人类“自欺行为”是使用符号的一种方式。比如说我们在架构术语中标识"前后端分离"这个符号,到底“前后端分离“算不算一种(符号),关键是看我们大家认为它到底是不是(符号)。
ps:现在移动互联网的发展,把这种“自欺”行为发挥到了极致。如:明星梦、好为人师梦、专家梦等。甚至很多应用都像游戏一样,都是“造梦工厂”。

    符号只是我们对抽象的尝试描述,至于本质含义已经不需要深究,也没必要深究。

    爱因斯坦曾经说过:“宇宙最不可思议的事,就是这宇宙竟然如此可思议(认知、描述)”。简述就是,这个世界居然可以被理解。

     
    计算机发展史,也可以认为是“共识语言、共识符号”的发展史。人们不断的试图创造一种“符号”,能够让程序员连通现实和计算机世界。如数学中转化过来的二进制;DDD描述业务知识;内部构建一些通用的架构范式;设计模式原则等(符号);甚至创造一门门新的高级语言... ...。但我认为数据可能才是这个行业通用符号语言,从业者对数据理解水平越高,效率才会越高,因为数据距离数学最近。(前段时间还看到网上有文章写到sql语言是最保值的语言,另外会用sqlserver,学习mysql基本一周就能基本搞定)

柏拉图说:“数学是一切知识中的最高形式”。
黑格尔说:“数学是上帝描述自然的符号”

     从IT电子化、数字化,到衣食住行休闲娱乐交易移动互联网,人们在现实世界的时间都被手机等电子设备占用。如果我们回顾这条线(回看第一小节的结论),用数字化、电子化、网络化和虚拟化这些词已经无法完整描绘这个过程了。我们尝试用天文术语“平行世界”来表达,在这个平行世界中由于道德约束、时间加速、成本虚拟等原因,数学、计算机技术、心理学、经济学、物理学、天文等学科发挥的更加淋漓尽致。

    举几个例子:爱江山更爱美人的网约、指点江山点评天下的键盘侠、站在舞台中央万人瞩目的直播、攻城拔寨血雨腥风的游戏...都很容易在“虚拟平行世界”中实现。摆在创业者、产品、架构师面前的不仅仅只是现实世界的抽象,更多的是梦境中才可能实现的诉求,所以别怪产品爱做梦,别怪竞争激烈。ps:其实在如此美妙的时代,真的很有趣。

    从另外一个角度看看抽象问题,DIKW体系如下图所示(相关内容可以自行搜索)。抛开价值层面,我们现在大多的app应用都是在生产Data和Infomation层面(感觉信息爆炸已经出现一些问题),而大数据和人工智能是更为顶端的层面。无论如何,对于数据的理解、数据价值的转变,谁忽略,谁将被别人超越。当然,架构师对数据的理解也会影响架构能力的提升

DIKW体系
   
    作为计算机行业(人类历史)的沉淀,数据本身的价值越来越重要。而计算机学科与数学学科的相互成就将持续下去。关于数据重要性的内容可以自己搜索,我个人认为大数据的价值由于ROI、固有利益链等原因,远远没有发挥出全部价值。尤其是政府这块。

    作为it/互联网从业者,需要对数据的理解更加重视。过去几年,5G、大数据、ai、物联网都是与数据息息相关的产业。我们也可以从数据角度,尝试分为三类系统:

1、业务、数据流类系统:从终端发起业务流、数据流的系统。强调横向抽象分层、纵向业务分层,包括单体、微服务等应用。这类应用基本映射人类现实中活动,如:衣食住行医疗娱乐交易等大部分都属于这类。技术架构层面已经很成熟或饱和,竞争点跟产品、技术关系不大了。竞争点聚焦在背后的数据价值、背后的资源整合、巨头山头、流量控制等。架构能力核心是控制好业务流、数据流,其它问题都会迎刃而解。个人认为所谓业务中台,是对增长没信心的一种体现,不是没有增长点,而是客户数和客单价基本达到饱和,需要持续开辟新的创新应用点。

2、大数据类系统:以flink、spark等流计算系统和mr、hive、spark类批处理系统为主。难点在机器资源庞大后,能够稳定的输出和架构的扩展性。核心是明白数据到信息的转变规则、数据与数据之间的mashup。个人认为es、mpp类数据库应用算不上大数据范畴,属于第一类系统的扩展数据工具应用。

3、ai数据深度应用类系统:ai应用主要为其它应用赋能、提效,通常会嵌入第1、2类系统中,单独的ai应用系统较为少见(或单独盈利模式都在探讨)。比如:广告点击率预测、item推荐系统、预测评分模块、搜索引擎、知识图谱、图像识别检测、语言翻译等都不容易单独构成应用。这类系统的核心是ai赋能点是什么?注意赋能和点。如广告排序、摄像头犯罪人员查控、内容审核、智能客服等,如果没有ai模块原来是怎么实现的、效果差在什么地方。相信人工智能也会创新创造出很多新的模式,如人类信用体系的建立。ai模型应用都是由数据训练而来的,可以说数据是重中之重。

     数学精通不了,但数据必须懂,数据sense提早培养。计算机技术无论那条线,都会回归到数学、数据上。作为架构师,把数据流、数据内涵、数据处理、数据预测等理解了,能更好的理解业务。也能明白其它任何人的诉求,设计出稳定的系统。


注:近几年较火的DDD领域驱动,设计目标为一门通用语言,把业务/产品到技术研发良好的连接起来,试图把现实世界的业务转化为计算机领域的语言描述。个人认为做好领域驱动设计,核心是把对数据的理解吃透,与各个衔接方交互的都是表达不同抽象的“数据”。



 3 

构建“平行世界”---机械论、还原论用武之地


    世界上很多东西(如相对论),是本身就存在,后来被人类发现的呢?还是人类发明的呢?用哪种符号、表达方式是最客观的描述语言呢?

    就我们普通人来说,第一层次:人类在刻意的还原现实到虚拟网络,并把边际成本降到最低,形成流量垄断(如常见的衣食住行app)。不过好在有边际效用递减事情,欲望会让人们不断的不满于现状,循环的破立。第二层次:类似进化论的方式,(某些推手推动)虚拟世界的自我演进,人们企图找到某种进化规律,抢占先机。(如钢铁侠、乔布斯做的一些事情)

    移动互联网的未来是什么?大数据、物联网、5G、ai发展到一定层面,到底还能给移动互联网、产业赋能到什么地步呢?我们很难描绘出变成什么样,但从近二十年来看,“计算机平行世界”的构建过程是从现实到虚拟,逐步构建、完善、迭代的过程。恰好跟机械论、还原论一致。

    机械论认为,生命完全是物质的,根本不存在什么神秘的“活力”,把生命看作是一架复杂的机器。还原论是机械论发展而来的。
    还原论是一种哲学思想,其认为复杂的系统、事务、现象可以通过将其化解为各部分之组合的方法,加以理解和描述。
    近十几年,移动互联网把衣食住行千方百计“虚拟”化,搬到移动互联网上。任何复杂的需求、应用、业务都能称之为还原,在效率上,边际成本上做了近乎榨油的进化。个人认为,作为架构师,这个还原工作还将持续很久很久。(这种效率的提升,对生活节奏的加快,个人认为不是什么好事)
           
    我们发现移动互联网对现实产业,办公、教育、娱乐、购物、游戏...的影响,都是一部分、一部分循序的“赋能提效”的(个人觉得颠覆不合适);大厂的布局也是一块一块的拼图来构建大的帝国;产业的发展也是一波一波的数字化、智能化(契机式:例如此次疫情肯定会所推进相关数字产业)。尤其是从人类活动时间来分析,人们在现实世界VS平行世界的停留时间来PK,无疑平行世界越来越有优势。
   
    说这么多,我们架构的“平行世界”肯定是在还原现实的基础上,并进一步做优化。而过去和未来的架构能力,都体现在“还原”二字。作为架构师,必须了解现实、了解历史,多读书,多行路,才能有更加丰富的还原能力。我们不是哲学家,普通人的架构不是创造抽象,而是一种还原描述,甚至可以理解为“抄袭”,抄袭现实、抄袭别人、抄袭任何生态。庆幸我们抄袭的对象是不断发展的,难有固步自封风险。

     现在互联网界也在研究复杂理论、混沌理论,与创新领域相关,个人完全认同。但是构架设计背后是因果关系,而不是相关关系。需要精细化、明确化的定义、描述、组合、可量化、评价、溯因....

   注:生命生物体与机械体的本质区别是什么?1、生命体能繁衍?2、生命体因果关系不明确。 所以,我们架构的是机械体,而不是生命体。我们更加关注的是因果关系。关于还原论可以看看《赋能》这本书,我们把组织当成生命体,用机械论、还原论的管理方法,肯定会有一些问题。或者研究研究爱因斯坦宇宙论、达尔文进化论,对创新创业、预测未来很有启发。



 4 

推理模式---架构师必备逻辑思维


    我们认识世界的过程中,潜意识或有意的运用大量的推理。推理就是从一个或几个已知判断推导出一个新判断的思维形式。任何推理都包括:推理依据的已知判断(前提)和推出的新判断(结论)。推理的几种方式:类比法、归纳法、演绎法、归因法。我们在工作、演讲、取舍、决策...时,无数次的应用了这些推理模式,但是我们可能当成常识来理解,反而忽略人类如何有此类能力。

     我们掌握了推理的原理,会优化我们推理的过程,积累推理素材。甚至我们学习的目的,就是为了增加推理前提的宽度(更多领域)和深度(更准确)。具体网上搜索了解,这里举例说明一下:

l类比推理法:物以类聚人以群分
    类比推理是两个对象在一系列属性上相同,而且已知其中一个对象的还具有其他属性,由此推断另一个对象也具有同样属性的推理。它不是一种证明,用于探索新思路、新发现的一种观点和手段。

1、鲁班类比带齿的草叶和蝗虫的牙齿,发明了锯;
2、人类仿照鱼类的外观和它们在水中沉浮的原理,发明了潜水艇;
3、设计模式的概念最早起源于建筑设计大师Alexander的《建筑的永恒方法》一书,尽管Alexander的著作是针对建筑领域的,但他的观点实际上适用于所有的工程设计领域,其中也包括软件设计领域。在《建筑的永恒方法》一书中,Alexander是这样描述模式的:模式是一条由三个部分组成的通用规则:它表示了一个特定环境、一类问题和一个解决方案之间的关系。每一个模式描述了一个不断重复发生的问题,以及该问题解决方案的核心设计。

l归纳、总结法,看啊看的就找到规律了:

1、每天开车回家,发现一般周五晚上,回家时间比平时晚半个多小时。
2、总结个规律,发现周五晚上高峰期确实比平时堵。
3、倘若周五需要赶飞机等急事,需要提前预备半小时时间。

4、如果周五赶飞机遇到下雨呢?
5、如果春节期间北京的周五呢?
... ...
    
     归纳推理又分为完全归纳推理和不完全归纳推理。着重你看到的是否足够多(样本足够多),你总结的规律能否拟合此类现象(样本的好坏),你想找的规律是否称之为规律(模型假设是否合适)。如果了解机器学习的原理,这些很好理解。 大数据时代,对数据sense要积极建立,不能像父辈或没文化人一样一样,看到几篇赞扬祖国文章就觉得祖国一片美好;看到几篇诋毁祖国文章,就觉得满眼都垃圾。(真心期望推荐系统更加智能一些)。针对架构师,见过或经历过很多案例,可以采用类比法,然后归纳总结推理。不能拿一年的经验工作十年;而是工作十年,至少积累十年的经验,更多是目标。这样才有可能爆发出、演绎出更多的经验,不担心技术更新、行业更新。

l演绎推理法:(大前提、小前提、结论)三段论:

1、大前提:redis发布版本中自带了redis-benchmark性能测试工具,可以使用它计算qps。假如我使用50个并发连接,发出100000个请求,每个请求的数据为2kb,测试4核8G机器redis服务器性能,测试结果每秒44150.11个请求,既QPS4.4万。
2、小前提:现在有个场景,50并发,每个请求1.5kb左右,场景支持并发多少,需要配置什么型号机器。
3、结论:4核8G机器,可以支持4万并发。
    
    如上所示,演绎法需要积累或学习很多大前提,以及大前提需要满足的各项指标。当遇到问题时,能框进大前提里,结论很容易得出,并且通常是正确的。 
1、日常我们需要对mysql、es、mangodb、redis、消息队列、tomcat、nigix、netty、java、go等中间件或语言有相关的认识;当然也需要对常见的系统架构有这种规律性认识。比如:广告架构、搜索架构、推荐架构、交易架构、秒杀架构、log架构、监控架构... ...有规律性认识。对业务场景能够举一反三,构建自己的大前提库。
2、当需要构建系统,比如秒杀功能场景时,能够快速确定当前小前提(应用场景)归属哪个或哪几个大前提
3、这样可以快速组合得到一些结论,做一些调整,作出响应。不能遇到新的业务需求,从头开始学习、实现。

l归因推理法:

    也叫溯因推理,是寻找最佳解释的过程。
    架构师在排查系统问题、解决系统性能瓶颈时常用,需要配合测试、日志等手段一起使用。也是俗称的解决问题能力。通过溯因方法解决系统的问题,是在丰富的知识矩阵基础上展开的。例如基于机器学习的广告点击率的预测、基于协同过滤的推荐系统,通过数据埋点、监控、统计等手段,归因分析反馈,不断地优化算法、调整特征数据。随着神经网络、深度学习的发展,很多不能解释的系统出现,只能通过事后数据验证来判别优劣,构成一个更大的溯因循环链(这也是现代产品必备的基本要素)。

    总之,从业者需要把自己的经历、见到的案例能够形成自己的知识体系,当遇到问题时,选择合适的方式解决问题。如果不能形成对“世界”的认知体系,穷尽终生也学不完知识,也会有学不完的困惑。

    注:把对架构过程中常见关键术语解释一下,便于我们面对新技术时,能够迅速掌握个大概。

1、设计模式:类似问题较为通用标准的解决方式,前人把遇到的细颗粒度问题分门别类阐述,形成的标准解决方案
2、架构:跟设计模式有点类似,视角更高、解决的问题更宏观一些。
3、组件:组件作为构造软件的“零部件”。供应用开发人员在构造应用系统时选用。
4、框架:框架是为了解决特定问题而存在的,但只能解决通用部分,留些口子让使用者完成。诸如模板框架、缓存框架、MVC框架、ORMapping等,框架不能直接使用,需要二次开发。比如:spark、flink框架预留了很多接口或钩子,需要应用开发人员在算子基础上,定制自己的应用。流计算、批计算也可归类为设计模式或架构。需要开发人员干的事情少而简单的框架就是优秀的框架,如springboot。
5、平台:平台的概念类似框架,但又结合了架构的考虑,它是更高层面上的“框架”,准确说是一种应用。这里跟技术本身关系不是太大,是应用级别。
6、中台:如果几百个字说不清楚这个概念,那么就不是技术圈的概念。个人觉得不应该由技术从业者解释,越解释越乱的感觉。它是平台、也是系统。
7、中间件:从更高的层次看,类似于组件。是解决某类问题,可独立运行的应用。如:解决各类存储问题的数据库中间件,解决消息传递问题的消息中间件,解决web服务的中间件框架(tomcat其实也算框架)。
8、工具:框架、架构、中间件都带有工具的属性,ide是最容易理解的工具。it从业者被工具困扰太久太久,以至于对一些底层逻辑理解较差,太专注工具的使用,而对工具形成的初衷不了解。而工具、轮子也是从业者喜好之处,形成死循环。



 5 

锤子VS钉子---寻找大锤子VS制造大锤子


    孔子在论语中说到”君子不器”,我们不能把自己的身份、技能、做事方法等固化,甚至我们有必要刻意的摆脱自己头上固有的标签。假如我们把经历的、眼见的现象案例称之为经验,归纳后变为规律,基于规律我们制造的、用顺手的工具称之为“器”。显而易见,“器”能解决的问题是规律能覆盖的现象,但是规律也可能有不适用的时候。
    我们不能像圣人一样留下永恒的“道”,只能不断的发明轮子、工具,期望留下一些痕迹。按照心理学来讲,人们总想证明自己的理论是正确的,说不服别人,就制作出一个工具来证实能够提升多少效率。这个事情没有任何问题,只是这类东西太多了,造成两个不好影响:第一、太多了,选择困难。第二、太好用,成了工具的奴隶。

    有人说过,如果你手里有一把锤子,所有东西看上去都像钉子。还有一位说过,如果你有一个钉子,就会满大街找锤子!这两个现象在我们工作生活中每天都会上演。

手里有锤心中无锤不要见人就锤,工具是死的人是活的,不要被工具禁锢。by 知乎。
1、使用工具要懂工具的魂,而不要做工具作恶的傀儡。
2、用好工具,学会甄别工具、创造工具。不过在我看了,能创造工具的人真的很少,基本工具都是提炼、孵化出来的。

    关于道、术、器网上论述很多,可以自行搜索。这里把工具概念放大一下,把这个问题泛化。从不同层面看,新的思维方式、能力不是提升效率的工具吗?语言层面、中间件层面、存储层面、开发框架层面、行业层面等难道不都是一种工具吗?PC技术、web技术、移动技术、ai技术不是都是一种实现“平行世界”的工具吗?面对新技术(工具)我们怎么处理?我们不用太强调道、术、器,而强调应该具备哪些能力。到底我们应该把时间花费到哪里?我引用三本书的内容,详细读者可以自己搜索学习。

l跟着高人“足迹”

    我们不一定能跟高人共事,但是跟着他的足迹应该是有可能的。如果能透过现象、发现规律、能感知到价值更好。

    李善友老师有本《第二曲线创新》很不错,里面提到“单一要素最大化”,聚焦第一曲线的一个要素,把它放大为第二曲线的全部。其实很多企业都在寻找创新点,我们发现商业创新太难,但是我们可以跟着政策、高人或名企的发力点,布局自己的未来。新的商业创新背后一定会用到新的技术、工具、思路、能力。比如:移动互联网在10年左右随着智能手机普及,移动技术肯定会蓬勃发展,如果我们能10年左右学习智能手机相关技术、工具,肯定能个人利益最大化;或创业入局这个产业生态,也会分得一大杯羹。
    

    当然例如共享单车、p2p、区块链,入局后失败惨重。 如何甄别这些呢?作为个人,对新的技术、模式一定要投入时间学习。作为创业者我们一定要对成熟生态做储备工作。例如:2年前抖音号获得粉丝的难度比现在容易多了,竞争压力小多了。

    背后也可以用笨鸟先飞的思路来理解,如果平时可以训练写一手漂亮的文字或平时积极主动的分享,在这波知识付费势头下,肯定会有一番作为。


l该学什么,别贪多

    推荐校友张萌美女《人生效率手册》中七个人物法。大致思路是写出自己想成为的或作为榜样的七个、层次不同的、职业目标人物;列出每个人在架构方面(当然其它也可以)的三项能力;按照聚合排序,选出三项能力或本领;然后阶段性死磕这些能力或本领,并定期做迭代。比如:我当初筛选技术方向时,明确未来几年,自己要向商业化广告为个人职业方向。

    书中描述很详细,这里不累述。有明确目标了,不仅仅让自己有个灯塔,最重要的是你取舍拒绝时候很简单。时间管理也会很简单,抗诱惑能力也会加强。往往我们不是不知道做什么,而是不知道自己不该做什么。

l 新时代的学习方法

古典老师有本书《跃迁:成为高手的技术》也很不错,里面提到联机学习、功利性学习、破局的方法。移动互联网创造了太多的信息、概念,人与人之前连接更多、更复杂。作为从业者,如何利用呢?联机学习可以称得上互联网时代全新的学习方式。如何破局展开新的职场、生活呢,书中对破局有详尽描述。

   我们不是不愿意学习,而是学习后,投入产出比较低,会丧失学习的动力。学会功利式学习,多读书、多总结、多分享,倒逼有价值的输入。

    注:这三本书真心推荐。新时代我们应该学什么、怎么学、学了该怎么应用,这条线书中都可以找到参考答案。



 6 

非功能性需求---静态知识容易体系化


    软件架构师跟桥梁、房屋架构师不一样,不但需要静态知识,还需要业务知识。    
    静态知识体系是通用的。业务知识没几年打磨,很难体系化。就拿静态知识来说,很多思想、思路都是从其它行业、现实中抽象而来的。业务知识更加复杂。
    任何行业的领航者,源源不断的思考源泉来自哪里呢?除了领域内深厚功底外,在现实世界中的经历,对生活的感悟是灵感的源头!毕竟任何技术都是解决生活的遇到的问题,灵感也是来源于生活(看看前文中提到的类比法)。近年来自己突然想通一个事情,世上很多钻牛角尖,有一种是见得太少。

    下面举例把架构中用到一些技术跟现实中对照梳理一下(例子有些牵强,只为回顾技术点。ps写了半天没点技术相关内容也不好):
  
    弹性扩容、微服务、注册发现、微服务架构:
疫情期间,全国医疗团队支援湖北。北京派出136人(多名医生、多名护士),支援武汉协和医院。协和医院把136名医务人员注册备案后,安排到相关科室,由医院统一协调安排工作。提升医院医治病人的能力。这里医院相当于微服务体系。其它医院也接受援助,不同医院管理规则肯定有差别(微服务架构有多少实现方式),但整体效果差别不大。另外,如果把医院当成服务个体来看,火神山、雷神山也相当于快速扩容的案例。
    阻塞、熔断、限流、降级、涟漪:
全国各地排医疗队到武汉前,处理不过来的病人呢?  阻塞:排队在某处引起体系奔溃,人心惶惶!限流:有选择的接受病人!降级:简单处理一下或不接受非疫情病人,让病人回家隔离!熔断处理:接收到一定阶段后,不再接受新病人!涟漪处理:救护车在院前做一部分处理,防止带到医院上游造成压力!
    隔离、关键链路:
隔离:武汉封城,防止问题扩散!关键链路,无论如何食物链路必须通畅。
    API网关、路由:
外交部新闻发言官,发布官方信息后,各个媒体才能得到分发处理。
    鉴权\注册\权限:
全国统一的身份证号;信用出问题后,坐飞机被限制。
    分层:
早些年贷款买过房的人知道需要走多少流程就知道了,职责不同,层层审批,一排排红章。这里可以想想纵向横向分层的场景,组织上职权边界带来管理上便利,但随着效率提升,反而带来不利。分分合合、拆拆建建。
    负载均衡:
前段时间境外新冠输入严重,北京机场压力过大。统一协调后,按照规则不同航班分发到天津、太原等地,降低首都机场压力。
    削峰:
98年洪水,宜昌站的最大洪峰流量是6.36万m³/s。而10年7月三峡水库的入库流量也达到了将近7万m³/s,如果这个流量再次通过荆州河段,洪水的威力绝对不亚于98年的洪水,然而三峡工程凭借其巨大的拦洪能力,硬是将7万m³/s的洪峰(入库流量)削减到4万m³/s(下泄流量),几天之内将大约70亿立方米的洪水拦在水库(消息队列)之中。
    统一配置中心:
每个银行的存款利率都不一样,通常各大银行的存款利率都是在央行的基准利率上,进行浮动得出的。央行自己调整后,各大银行自行更新自己利率。
    框架、架构、平台等:见上文。
    同步、异步,阻塞、非阻塞:
同步阻塞:小时候妈妈给宝宝喂饭,妈妈喂完后才去刷锅刷碗。同步非阻塞:宝宝长大点能自己吃了不用喂了,妈妈看着宝宝吃,确认吃完后才去刷锅刷碗(爱心泛滥&独立培养)。异步非阻塞回调:孩子更加懂事了,妈妈做好饭给儿子(立马干别的事),儿子边玩手机游戏边吃饭,妈妈去看电视,儿子吃饭后,告诉妈妈,我吃完了,妈妈再去刷锅刷碗。
远程调用、超时、重试、幂等、队列等:
高中同桌男女谈恋爱,自习时,小声相互表达爱意。高考考入不同城市大学,只能通过书信(远程调用)表达相思。本来约好一周一封来回信,某周末,男孩没有收到女孩回信(超时)。以为没收到,男孩又写了一封信邮寄(重试),由于邮局原因,积压好多信件(队列),女孩没有收到男孩来信也没法回信(突然故障),邮局恢复后后突然收到好几封信,回了一封信(类似幂等处理)。
    通知:
村口大喇叭播报,疫情期间所有人不得外出。成年人无法去劳作,学生无法上去,幼童无法出去游戏,不同角色人得到通知,表现及造成影响不同。
    选举:
英蒂利海上大帝国选举领袖,采用自荐提名式,最终获得票数大于一半获选,否则一直选下去。某次发生大风暴,隔离了领袖所在小岛,没办法,其它岛屿选择出了新的领袖。
    交易:
一手交钱一手交货;让村长当个担保人,先把钱给村长;
    广告竞价:
线下拍卖机制的参考和不断优化,最终形成的GSP广义第二价格拍卖这种易于操作、均衡各方利益的竞价方式。
    前后端分离:
各人自扫门前雪,莫管他家瓦上霜的流水线的工作方式。其实从纵向分层、微服务来看,核心问题是,中心避免不了?中心控制放到哪里?如何去中心化?
    日志、监控:
“飞机黑匣子”是俗名。它的真名很普通:“飞行数据记录仪(FDR)”。它是一种将飞机飞行的情况储存下来的仪器,当“不幸”发生以后需要了解飞行情况时,可以通过一些设备把它们播放出来。14年,马航出事后,对航空器实时位置跟踪提出事件触发和定时执行的思路,包括预警等设置。
    全链路跟踪:
强调无侵入性、低成本、与业务(品类)无关的通用实现。例如:“食品质量安全追溯系统”是一个能够连接生产、检验、监管和消费各个环节,让消费者了解符合卫生安全的生产和流通过程,提高消费者放心程度的信息管理系统。
    服务部署、docker、k8s:
集装箱、火车皮运力调度真是伟大的发明。把繁荣的车船码头变为历史,间接的促进了货品尺寸标准化。
    流计算:
了解一下自来水厂净水过程。如果某个节点出现问题,将出现“系统故障”。
    批处理计算:
小区凌晨垃圾调度车把垃圾桶中垃圾调度(运送)到郊区垃圾场,垃圾场定时启动相关流程,批量处理这些垃圾。(从时间间隔长短来看,批流、实时离线是个相对的概念)
    存储距离、存储格式:
老家山西产煤,小时候经常看到火车、汽车运煤出省,比如到天津港口;也有把煤加工成焦炭运输出省,到港口货船;也会本地发电运电到全国直接使用。如果从物质永恒不变角度来看,自然界(人类)需要哪种形式的物质,就用合适的方式 转化、存储、使用。
    数据不一致、cap:
疫情期间,政策一天一个样。工作需要拜访其它公司,进写字楼有的只要扫码、有的需要登记、有的直接不让进... ...。我们抛开政策理解的因素,各个执行点对政策的接收时差肯定有区别,也就是各个执行点对政策(信息)获取不一致。
    冗余:
飞机通常会有多个发动机;汽车都会有备用轮胎;也有类汽车把备用轮胎直接装到车轮上,当重量达到某个阈值时,可以直接接触地面承重。
写完这些例子,决心下步研究一番还原论,对我们认识世界作用很大。尤其是解决确定问题的架构师,我们不是在创造,而是在“抄袭”还原。也可留言探讨!    
    注:架构师的抽象是为了获得更好的实现方案;产品经理的抽象是为了更好的发现需求点,设计优秀的产品解决方案满足需求。



 7 

功能性需求易变的难点---多元化思维

    

    需求管理不在这里讨论,有很多产品经理方面的书籍对功能性需求的管理有详细的描述。试着思考,为什么设计系统要考虑可扩展性?为什么产品和技术经常掐架?为什么要上各种中台?究其原因,是我们对需求的把控能力、对未来需求的应对能力、或对需求变更的把控能力较差造成的。或者说,需求随着用户群体效应、时间变化会发生质变,在(时、空、用户、群体效应)N维坐标系中“每个点”都是不同的,持续完全满足是不可能的。

    我们不知道谁发现了水,但是肯定不是鱼。后验就是必须体验后才知道的,例如这杯水热不热。“需求”在一系列干系人面前,是个特殊的要素。可以明确的是,谁也无法真正的掌握它,只能通过事后的反应、数据等点点滴滴来验证当初的决策是否正确。现代软件产品对这种后验的支持,必须很到位才能有竞争力。

    面对不确定问题时,最好的解决思路不是试图找到解决办法,而是提升对问题变化的敏感度。创业也好、研发新产品也好,都是如此,当然构建世界也是如此。多元化思维值得期望成功的人们拥有。(当然多元化思维提升的个人素养,而不是单独此处)

    

    成大事者,一定要有从全局观察、大处着眼的气度与能力,绝不能拘于小范围或局部;扩展多元化思维,是一个人走向成功的动力与方向。人的大脑是多元化的,多元化思维是多元化大脑的最佳思维方式。然而,过去我们所受的教育,使我们习惯于“直线式的思考”。其实这并不是一种好的思维方法,相比、较而发散性的多元化思维在处理各种问题时要迅速和有效得多。


    ps:对机器学习了解的知道,这个世界很多规律都是非线性的、多维的,而人类天生对线性和二维规律擅长。而神经网络又模仿人脑,构建多层神经网络,得到很多人类无法解释的分类预测模型。(这个世界真的很奇妙)


    这里推荐《穷查理宝典》这本书。世上很多钻牛角尖,有一种是见得太少。君子不器,不要把自己思维固话。总之多看书、多思考、多学习,有限的生命中多认识这个世界。构建多元化思维没有好的办法,就是多读书。

注:我们一定要把架构提升到一定高度,而不是简单执行层面。我们的偶像应该是邓小平爷爷,中国社会主义改革开放和现代化建设的总设计师。



 8 

结语


    回到文章开头。复杂事情往简单了去想,是拆解,是切割。确定边界后,找到某个点突破,就像一剑破万法;而将简单事情往复杂了去想,是缝补,是搭建。形成面面俱到的规矩、规划、指导方案,规矩内任何组织都跳不出框架,就像是打造自成规则的小天地。
   你的答案是什么呢?欢迎留言!
    


名句摘抄


“授人以鱼,不如授人以渔;授人以渔,不如授人以欲。” 就是指没有直接给予物质,而是教以方法或某种信念!



往期推荐


关注【微观技术】


我们热衷于收集&分享高并发、系统架构、微服务、消息中间件、 RPC框架、高性能缓存、搜索、分布式数据框架、分布式协同服务、分布式配置中心、中台架构、领域驱动设计、系统监控、系统稳定性等技术知识。

关注公众号,后台回复“中台,下载学习资料




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存