代码中的减法

2022-09-29 17:32:29 浏览数 (1)

  ”简单就是美”,这句谚语在软件领域也是非常适用的。比如MapReduce框架,采用分而治之的思想,最原始的数据由各个map处理,reduce将map的结果汇合,这么简单的框架就解决了很多大数据的问题,待Apache将其开源后,引领了大数据开源社区的发展。还有些经验丰富的程序员告诉我们“负责任的工程师在离职前会删代码”也佐证了这一点,他们利用最后一段空闲时间,梳理程序的脉络,删除冗余的逻辑,让代码更加的清晰,方便接手的人维护。   接手小米流量最大的一块业务后,随着公司对数据的需求越来越大,流量也在不断的增长,后端的性能也受到了极大地挑战,经常出现实时计算以及例行任务不能按时完成的情况。在对后端代码梳理和优化后,发现了大量的冗余代码,以及不需要的过程,删除这些逻辑后,让storm程序能消耗qps高达3W的数据,并且例行任务也能按时完成了。主要有以下几点:

  1. storm程序优化:干掉一些无用的spout,同时减少了一些shuffle过程,让程序的性能提升了一大截,每条消息处理的延迟被大大地降低了
  2. 例行任务:发现一个MR有好多冗余的逻辑判断和处理。blame发现,是由好几拨人提交的。估计业务也是换了几个团队,同时团队人员也有流动。删除这些逻辑后,代码精神了不少

  业务快速发展的时候,为了快速的完成任务,会有很多代码写的不是很友好,一段时间后,就很难维护了。这个时候就要采取措施,以免大规模风险爆发。在代码构建或者维护过程中,都可以参考以下几点。

抽象公共库

  将常用的方法和变量,抽象到公用库中,不仅可以减少代码量,也降低了维护成本。公共库中的类,还更容易发现潜在的错误,因为该方法会被不同的人在不同场合review,增加了bug的曝光量

采用开源的库

  和抽象公共库类似,只不过这些库不是自己写的,而是由公司的其他团队或者开源社区提供,如果选择合适的库,可以减少重复制造轮子,从而更加专注业务。

技术选型

  针对不同的场景,会有很多技术能满足需求,但是不同的选型有着不同的开发维护成本。Spark兴起后,很多公司开始废弃MapReduce,不仅因为Spark的性能,更因为其开发效率很高,数行代码就能完成MapReduce数十行的工作。公司的科学家有时候教育我们“现在的软件都能用汇编实现,为什么不用他们编写呢”,这句话在很多时候都指导着我们。

综合本文,在编写一套软件时,在易于维护的情况下,尽量少写一些代码。

0 人点赞