架构师的核心能力-抽象能力

简介: 架构的核心是管理复杂度,架构师的核心能力是抽象能力,什么是抽象能力?抽象能力就是一种化繁为简的能力。何为化繁为简?就是把一种复杂的事情变得简单的能力,比如通过打比喻让别人很容易听明白你说的意思就是一种抽象能力。如何锻炼抽象能力?我觉得有三种方法,第一种是用归纳法找共性,从多个问题中找到共同的问题提炼通用解决方案,去其糟粕取其精华。第二种通过演绎法找关系,从多个问题中找关系,把多个问题串成一个问题,系统化解决问题!第三种是通过归纳法找特性。化繁为简需要不断的思考,不断的看清一件事的本质,这个事的解决方案越容易。

架构的核心是管理复杂度,架构师的核心能力是抽象能力,什么是抽象能力?抽象能力就是一种化繁为简的能力。何为化繁为简?就是把一种复杂的事情变得简单的能力,比如通过打比喻让别人很容易听明白你说的意思就是一种抽象能力。如何锻炼抽象能力?我觉得有三种方法,第一种是用归纳法找共性,从多个问题中找到共同的问题提炼通用解决方案,去其糟粕取其精华。第二种通过演绎法找关系,从多个问题中找关系,把多个问题串成一个问题,系统化解决问题!第三种是通过归纳法找特性。化繁为简需要不断的思考,不断的看清一件事的本质,这个事的解决方案越容易。


1、通过归纳法找共性


通过归纳法找共性有两种方法,分别是找需求的共性和找信息的共性


1.1、找需求的共性。分期作为一个单一产品服务于海量亿级用户和全行业,但是各行业有很多的个性化需求,有限的技术资源不可能解决无限的行业个性化需求,所以必须对问题进行收敛,从一类需求中找到共性问题,找到最大交集然后求解。找需求的共性就是你收到一堆需求,你能分析出共同的需求是什么?比如用户说想吃香蕉、梨子、桔子和苹果等,那么共性的需求就是用户想吃水果。分期有商家贴息、部分贴息、第三方贴息和混合贴息等需求,共性需求就是灵活的贴息模式,然后基于这个共性的需求,推导出我们可以提供的技术服务或技术能力是什么,从而推导出系统架构,再比如各行业都想接入分期,但是都有些个性化的需求,那么我们是不是可以对个性化需求进行分类,提供几种标准的分期组件让各行业快速接入,比如小程序分期组件、H5版分期组件和JS版分期组件等。如果把这个问题再扩展下,作为技术要解决的问题也非常多且复杂,如果找共性需求,对所有技术问题进行收敛的话,可以收敛成三个基本需求,第一个是技术如何给业务带来护城河?第二个是技术如何给业务带来增量?第三个是技术如何保障业务安全运行?再延伸到经济活动,经济活动的本质或者核心需求是人类需求与服务供给的匹配,能交往和交流的人越多,匹配越容易匹配效率越高,人均GDP也越高,也就越富裕。


1.2、找信息的共性。领域建模就是一种找信息共性的方法,领域建模首先就是要区分需求里哪些是变化的哪些是不变,把这个领域不变的信息沉淀成领域模型,基于领域模型做架构。分期在各个场景下可能衍生出不同的分期产品,如租房分期、汽车分期、家装分期和电商分期等,但其实共性都是通过组合额度、利率和还款方式等几要素产生不同的分期产品,比如电商分期额度较低、还款期限最长24个月,汽车分期则额度较高、还款期限可达3年。我们学习技术也是一样,所以技术的共性是什么,我觉得是TCP\IP等协议、语言基础、数据结构等基础技术,这些基础技术点你会发现几十年都不会变化。


2、通过演绎法找关系


通过演绎法找关系能让架构师更体系化的看一个问题。通过演绎法找关系可以分为找内部关系和找外部关系两种


2.1、找内部关系。内部关系就是找到业务的生命周期和系统内部的主链路,分期业务虽然支持各种场景的个性化需求,但是系统内主链路和生命周期就一个,也很少发生变化,比如分期业务的生命周期是分期创建-分期失败-分期成功-分期支付关闭,他们的关系是从分期支付单创建到支付成功或支付失败,从支付成功到退款,最后到支付关闭。系统内部主流程包括前置鉴权、支付咨询、支付和退款等。找关系的的另外一个作用就是你看到一堆需求,你能看出这些需求彼此的关系是什么,通过这些关系去分析未来需求的趋势,是偏分期线下的需求更多,还是偏分期线上的需求更多,为啥是分期线下的需求会逐渐多起来,那么未来是不是要围绕着分期线下进行架构升级,通过对分期未来的趋势的判断做架构升级,把未来很多不确定性的事情变得逐渐有确定性。


2.2、找外部关系,外部关系梳理清楚架构的边界,什么做什么不做,什么是本领域的核心服务,这些服务提供给谁使用,我们需要依赖其他领域的核心服务有哪些。为什么理清楚架构边界能够化繁为简?因为架构边界类似一个架构标准,大家遵循统一的标准沟通效率和沟通复杂度就会降低,否则每个需求都要讨论这个功能做在哪个系统?为啥要放在这个系统?我觉得不应该放在这个系统?


3、通过归纳法找特性


找特性首先是通过归纳法先找两个业务的共性,花呗支付和花呗分期都是互联网金融产品,都具备互联网产品属性和金融属性,花呗支付和花呗分期不一样的点就是分期的特性,主要体现在付费模式更多(有用户付息和用户免息),还款方式更多(3期、6期和12期),营销方式更多(全贴息和部分贴息)、以及服务角色更多(服务ISV)。


再举一个例子,如果要精通JAVA要学习的内容会非常多,可能花很多时间学习也不一定能精通JAVA语言,投入产出比不高,但是如果想化繁为简就必须先找到JAVA的特性,针对特性进行深入学习,我觉得JAVA的两项特性技术是垃圾回收机制多线程框架,剩下的就和其他语言的特性差不多。


大家会发现找特性和找共性是不是存在矛盾,所以在这个过程中需要做取舍,比如是否只满足共性需求不满足个性化需求,我觉得在某些场景下,取的是共性需求舍的是差异化需求,但是也可能在另外一些场景下取的是差异化的需求舍的是共性需求。关键是面对当下的业务,你判断什么当下或者未来最重要的事是什么,可能满足场景个性化需求虽然增加研发成本,但是能给业务带来技术壁垒,或者有没有一种方式能既满足共性需求又能满足部分个性化需求。


4、最后


我发现当解决一个问题的时候一定会带来一个新的问题,因为这个可能会破坏现在维持的一种平衡,要学会无为而治,并不是什么都不做,无为是不违背自然规则,我理解就是尽量少打破平衡,做好取舍维持平衡,不既左既右。比如你在做架构升级的时候,虽然升级完了能很好的满足未来的需求,但是在升级的过程中一个需求可能要同时在新老链路里同时实现,风险和工作量加倍。

目录
相关文章
|
SQL Oracle 关系型数据库
关系型数据库Oracle 数据库启动失败
【7月更文挑战第17天】
452 2
|
弹性计算 定位技术 数据安全/隐私保护
狂赚13亿流水的幻兽帕鲁私服搭建,一起玩耍吧
狂赚13亿流水的幻兽帕鲁私服搭建
139405 8
|
Java API Apache
阿里巴巴开源框架JarsLink
JarsLink是一个基于JAVA的模块化开发框架,它提供在运行时动态加载模块(JAR包)、卸载模块和模块间调用的API,它能够帮助你进行模块化开发,也能帮助你的系统在运行时动态添加新功能,减少编译、打包和部署带来的发布耗时,同时它也是阿里巴巴的开源项目之一 https://github.com/alibaba/jarslink,目前在微贷事业群各团队广泛使用。
14704 0
|
存储 数据采集 监控
数据治理包括哪些内容
数据流程与操作管理:是指对数据从采集到存储、处理及使用的全生命周期进行规范化管控,以保障数据流转和各项操作的合法性与规范性。这涵盖了数据存储的标准化管理、有效的数据处理机制、以及完备的数据备份与恢复方案等多个关键环节。
|
Linux Docker 容器
Red Hat系列Docker安装与移除
Docker 安装 添加 Docker 官方 YUM 源 sudo yum-config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo 安装 Docker Engine sudo yum install -y docker-ce docker-ce-cli containerd.io 启动 Docker 服务并设置开机自启 sudo systemctl start docker sudo systemctl enable docker 验证 Docker 安装 docker --versio
572 0
|
Apache 项目管理 流计算
祝贺!两位 Apache Flink PMC 喜提 Apache Member
目前,国内(华人)近 30 位 Apache Member 中,有 3 位是 Apache Flink 的核心贡献者。他们热爱开源也为开源贡献,不仅积极参与社区与其他 PMC 成员共同规划、主导 Apache Flink 的发展,更活跃在多个开源项目,持续为开源社区做贡献。
|
Java Linux 开发工具
jdk(Windows/Mac含M1/M2 Arm原生JDK)安装,附各个版本JDK下载链接
jdk(Windows/Mac含M1/M2 Arm原生JDK)安装,附各个版本JDK下载链接
jdk(Windows/Mac含M1/M2 Arm原生JDK)安装,附各个版本JDK下载链接
|
存储 人工智能 大数据
本文带你了解透彻云计算(前世,今生,未来)
对于云计算,我们将会通过云计算的前世,今生,未来,特点,原理等几个方面进行讲解。
4100 1
本文带你了解透彻云计算(前世,今生,未来)
|
Kubernetes IDE Java
2023Java面试学习网站推荐
2023Java面试学习网站推荐
445 0
|
JavaScript 前端开发 Java
Javascript 20分钟快速入门
JavaScript是目前web开发中不可缺少的脚本语言,js是解释性语言,不需要编译即可运行,运行在客户端,需要通过浏览器来解析执行JavaScript代码。
567 0
Javascript 20分钟快速入门