头图

「案例分享」研发效能提升之第一性原理

作者:樊思国

一、引言

被埃隆·马斯克多次提及的第一性原理First principle thinking,是计算物理学领域的一个专业术语,在商业领域依然具有鲜活的生命力。读过《硅谷钢铁侠》这本书的知道,正是因为应用了第一性原理对问题进行分析,才使得马斯克在跨航天、汽车、能源和软件领域创新硕果累累,比如SpaceX的成功,就是从根本上找到运载火箭的成本重头在推进系统上并解决该问题,从而创造了可回收利用的火箭推进器,从根本上解决成本问题,对行业来说是颠覆性的创新模式。

第一性原理的本义是指在进行计算的时候除了告诉程序你所使用的原子和他们的位置外,没有其它的实验的,经验的或者半经验的参量,且具有很好的移植性。通俗理解,第一性原理就是基于客观事实进行的推导,其中不加入自己猜测和类比等经验性的东西。

在创新和研发效能提升的行业大背景下,作者认为在我们的日常研发工作中,也可以利用第一性原理思维帮助我们提升效能甚至是提升创新能力。比如,线上问题排查和分析解决,就可以很好的利用第一性原理指导我们实践。

下文将通过一个真实的线上问题排查经历,提炼出一种利用第一性原理进行问题排查和解决的通用流程框架,并分析案例中的第一性原理应用关键,最后总结了第一性原理应用需要具备的基本步骤,旨在为提升我们研发效能找到一个实际的结合点。

二、一次线上问题排查过程

我们经常会遇到排查解决线上问题的场景,每次如果都能运用第一性原理定位问题,将会得到不一样的效果。下面我们来看一个真实的线上问题排查场景:

11月5日早晨6:10,我们亲爱的运维同学从睡梦中被Flink作业重启的告警电话吵醒,经过排查发现redis内存满了,于是告知大家一起排查。排查过程中发现三类现象,并一步步分析得出结论,作者经过深入分析和整合大家排查情况和现象,总结如下图:

上图可以看到,从收到Flink重启的告警出发,发现三个现象(或者说三个为什么),一直沿着这三个现象往下分析,逐步剥开问题表象,推导出导致问题的根本原因,最后收敛成了三个结论(标记位置),并进一步针对收敛出来的结论深入挖掘本质,从而导出我们下一步的todo项。

三、第一性原理分析

上面的问题排查过程的思路梳理,其实是一种第一性原理的运用,也就是通过不加入任何经验、猜测,只看现象和发现(日志与监控),提出假设并证明的过程。因为只有这样,才能保证我们每一步都是接近问题本质的,最终收敛出来的结论才是真实可靠的,我们针对结论再提出解决方案,才是从根本上解决问题的一种方式。

反之,如果我们加入自己经验或类比,则违背了第一性原理的出发点,使得后面所有建立起来的推导或是结论都是站不住脚的,也许某些情况下,猜测和粗暴的重启活动能够暂时性地解决问题,但长期来看,类似问题还是会存在。就比如我们去网吧上网发现机器坏了,网管一般会让你重启一下机器一样,因为网管这个时候加入了自己的经验判断,那就是重启就能解决问题,虽然大多数时候也很管用,但这很多时候其实并不是一种从根本上解决问题的办法,我想我们作为研发人员,应当具备一种刨根问底,切入本质的思维模式,这种思维模式就是利用好第一性原理。

四、应用第一性原理

那么,我们怎样才能真正的使用第一性原理呢?有三点,一是具备丰富的领域知识。二是从客观规律出发。三是从根本上提出解决方案。

4.1 丰富领域知识

就如上面问题排查过程,需要掌握的知识包括了flink、redis缓存、消息队列、日志排查能力、源码阅读能力和计算机基础等,如果不具备这些专业的知识功底,是不可能深入根本地分析和解决问题的,就像网吧管理员一样,不懂硬件和软件知识,当然就只能通过重启来解决问题。因此,作为研发人员,在工作中很好的应用第一性原理,前提条件是对相关领域知识有深入原理级别的理解,对应用的技术组件能够理解核心的技术原理和架构,对业务能够理解背后的根本动机和运行规则。

4.2 从客观规律出发

这一点尤其重要,有时候我们具备了丰富的领域知识,但是却没法扎实的去分析问题,去做到只看客观规律、然后提出假设、然后找证据来证明或是证伪,那么也是没法做到从本质上解决问题的。因为,只看现象是第一性原理的出发点,提出假设是在问题的答案空间里面做剪枝排除,最后找证据则要求我们具备绝对的理性来对待。只有这样,离真相才能更进一步,直至找到根因为止。

比如我们看到线上告警,第一步应当是去寻找和这个告警相关的原始日志,而不应该是通过现象进行经验判断或是猜测而不看日志,因为日志才是记录整个程序运行的过程,属于客观规律的范畴,而经验判断和猜测则是基于观念的偏见,是意识领域的范畴。在必要的时候,我们通过日志找到了客观现象和规律,我们还需要通过源码的分析来进一步掌握更多的客观规律,因为掌握的客观规律越多,越利于我们做出正确的判断,也就越接近事物本质。

4.3 从根本原因上提出解决方案

利用第一性原理得到根因后,最后一步也是最关键的一步则是解决问题,这个时候提出的方案要么就是从根本上解决已有问题,要么就是创新的解决方案,犹如足球运动中的临门一脚。

五、研发效能之第一性原理

除了线上问题排查,第一性原理亦可应用于我们整个研发过程中。

比如,需求阶段利用第一性原理可以帮助我们挖掘出客户真实需求而不是停留在表象层面;设计和研发阶段,利用第一性原理,在深入理解好我们研发工具箱中各类技术和组建的实现原理的基础上,针对需求阶段提炼出来的最为真实的问题点进行逐一分析,揭示问题域中核心复杂度,最终产生的架构设计和实现必定是最为合适的;测试阶段,利用第一性原理去理解系统实现的核心逻辑,针对核心逻辑设计测试用例覆盖功能点。针对系统上线后出现的问题,利用第二章的问题分析框架,可以一步步帮助我们找到问题本质,并针对该本质采取改进措施,反馈回我们的产品,这样就能做到从系统层面解决问题,而不是停留在点对点的问题应急上。

在整个研发周期中,充分利用第一性原理分析每个环节,提炼出每个环节的首要问题,并针对问题提出解决方案,各个过程之间互相迭代反馈,形成增强回路,久而久之,我相信我们的研发效能定会有一个大的提升。

五、总结

本文通过一个真实的线上问题排查案例,展示了第一性原理在工作中的落地,通过分析第一性原理的应用关键点,提出了三种可行的应用第一性原理的方法。然而,由于作者才疏学浅,在行文过程中难免会存在一些考虑不周的地方,也欢迎提出您宝贵的建议一起学习进步。


京东云技术新知
京东云最新产品信息、技术干货以及最新活动发布,拥抱技术,与开发者携手创造未来!

京东云开发者(Developer of JD Technology)是京东云旗下为AI、云计算、IoT等相关领域开发者提供技术分...

1.9k 声望
5.1k 粉丝
0 条评论
推荐阅读
zookeeper的Leader选举源码解析
zookeeper是一个分布式服务框架,主要解决分布式应用中常见的多种数据问题,例如集群管理,状态同步等。为解决这些问题zookeeper需要Leader选举进行保障数据的强一致性机制和稳定性。本文通过集群的配置,对leade...

京东云开发者

封面图
Redis 发布订阅模式:原理拆解并实现一个消息队列
“65 哥,如果你交了个漂亮小姐姐做女朋友,你会通过什么方式将这个消息广而告之给你的微信好友?““那不得拍点女朋友的美照 + 亲密照弄一个九宫格图文消息在朋友圈发布大肆宣传,暴击单身狗。”像这种 65 哥通过朋...

码哥字节6阅读 1.9k

封面图
Redis的线程模型和事务
我原本只是想学习Redis的事务,但后来发现,Redis和传统关系型数据库的事务在ACID的表现上差异很大。而要想详细了解其中的缘由,就离不开Redis独特的单线程模型,因此本文将二者联系在一起讲解。

KerryWu6阅读 5.9k评论 2

Redis分布式锁的实现
很多新手将 分布式锁 和 分布式事务 混淆,个人理解:锁 是用于解决多程序并发争夺某一共享资源;事务 是用于保障一系列操作执行的一致性。我前面有几篇文章讲解了分布式事务,关于2PC、TCC和异步确保方案的实现...

KerryWu4阅读 6.8k评论 2

又一款内存数据库横空出世,比 Redis 更强,性能直接飙升一倍!杀疯了
KeyDB是Redis的高性能分支,专注于多线程,内存效率和高吞吐量。除了多线程之外,KeyDB还具有仅在Redis Enterprise中可用的功能,例如Active Replication,FLASH存储支持以及一些根本不可用的功能,例如直接备份...

民工哥4阅读 899评论 1

封面图
详解Redisson分布式限流的实现原理
  我们目前在工作中遇到一个性能问题,我们有个定时任务需要处理大量的数据,为了提升吞吐量,所以部署了很多台机器,但这个任务在运行前需要从别的服务那拉取大量的数据,随着数据量的增大,如果同时...

xindoo3阅读 890

封面图
redis 学习笔记
一 搭建 {代码...} 二 数据类型,常用操作命令 {代码...} {代码...} 三 redis常用命令 {代码...} 四 Redis高级应用 {代码...} 五 PHP-REDIS使用 {代码...} 六 BitMap 教程 {代码...}

hufeng2阅读 2.2k

京东云开发者(Developer of JD Technology)是京东云旗下为AI、云计算、IoT等相关领域开发者提供技术分...

1.9k 声望
5.1k 粉丝
宣传栏