一、我对好代码的看法1.什么是好代码如果你看过《设计模式之美》,你可能会觉得可以玩转各种设计模式,代码符合设计模式6条基本原则的才是好代码;如果你读过《clean code》,你可能会觉得好的代码的标准之一就是干净;如果你经常研究Spring源码,你可能会觉得设计精巧、抽象高、配置灵活都是好代码,就像一本书,一千个读者眼中有一千个哈姆雷特,每个人都会有自己的根据自己的认知判断。2、我认为什么是好代码前面说过,不同的人对好代码的认知标准是不一样的。我认为什么是好的代码也仅限于我的认知水平。也许我今天认为这是一个很好的代码。随着认知的提高,改天就会有不同的想法;就目前的认知,我认为好的代码的一些特征:可用性是对的,你没有看错,好的代码一定是可用的,可以工作的,如果一段代码只是看起来不错,使用各种花哨的编码技术和技巧,但它不能起作用,那么它就失去了存在的意义。因此,好的代码最重要的特征就是可用性。可读性我认为好的代码的第二个特征是可读性。我们代码编写的目标用户有两类。第一种是供编译器读取的;第二种是给维护它的程序员。.对于第一类用户,只要你符合它的语法规范,它就会识别并执行;而第二类用户是程序员,后期会继续维护和升级。如果这段代码,维护它如果大多数人都看不懂,那么它长期存在的意义不大。其他优秀的特性可维护性、可扩展性、可重用性、强健壮性、可测试性等。好代码的其他优秀特性太多了,这里就不一一列举了。3、让代码在电脑上翩翩起舞回到本源,我们写代码的目的是什么?把我们的所思所想,通过计算机识别的指令告诉它,让它为我们做我们想做的事。好的代码不仅能简单地完成我们的想法,而且能快速、高效、完整地执行。让我们的代码一起在电脑上跳舞。2、为什么要在2020年五一假期做?当大家都在享受五一假期的欢乐时光时,突然收到hbase的报警。整个hbase的IO压力已经接近瓶颈,直接影响到数据的读写,临时扩展hbase只能勉强支撑过去。按照这个发展趋势,一旦遇到业务高峰,hbase的读写会直接给整个业务环节带来瓶颈问题。为了解决大量数据实时写入hbase+solr时产生的高IO压力,我们设计了一个基于redis的轻量级分布式均衡消费队列,实现数据按照一定的规则分片到不同的服务器。在队列中,将一批批数据累加去重,然后分批写入hbase+solr,从而降低hbase+solr的IO压力。3.组件整体设计思路:整个组件主要分为三个核心模块,master(主节点),writer(数据写入节点),worker(工作节点)。设计机制:弱中心机制,任何配置的节点都可能成为master(主节点)、writer(数据写入节点)、worker(工作节点),具有高可用性,不存在单机单点瓶颈问题。Master(主节点)职责:负责实时检测活跃worker(工作节点)变化、断线;负责将任务队列分配给存活的worker(工作节点);负责实时检测整个redis队列的负载情况。Writer(数据写入节点)职责:负责分配实时写入任务分片到不同的队列;负责检测当前写队列的负载。Worker(工作节点)职责:负责实时上报当前Worker(工作节点)的状态,保持心跳;负责定时消费worker(工作节点)负责的数据。伟大的linux大师曾经说过,“说话是便宜的,让我看看代码”。4.我们做了什么1.整个组件的包结构图2.简洁的代码结构注释清晰,介绍类的作用和职责启动项配置,灵活配置,控制模块是否启动。lambda-logger/lambda表达式,通过简洁的语法结构,轻量代码冗余,提高代码简洁性。断言判断,替代传统的if-else判断,提高代码的可读性。整个项目有60个类,核心代码一共1623行。每个类平均代码行数27.05行,最大类代码行数不超过200行。3.强大的扩展性通过hook回调方式的设计,方便接入的用户可以快速注入自己的回调实现方式,快速扩展业务能力。4.线上日志展示截图日志文件master队列分配日志worker数据消费日志writer队列负载检测日志redis消费队列监控市场5.我们收益组件部署上线时,hbase服务器监控指标发生变化,实现hbase的整体使用水平近50%的优化。hbaseIOPS使用监控hbaseCPU使用监控六、我们的展望独立抽象组件,基于Redis的轻量级分布式均衡消费队列,是自主创新开发的高可用、可扩展的基础组件,已经封装成为独立的spring-boot-具有高可重用性和高可扩展性的启动器。使用场景广泛,基于组件的灵活配置,可用于分布式任务队列场景,如任务中心分布,可以实现天然的负载均衡。拥抱开源,未来希望开源组件。7、我的一些代码,看得懂的,给人的第一印象,就像一篇好文章,读起来朗朗上口。不同的文章有不同的风格,不同的代码有不同的编程风格要求。Python有严格的缩进,像诗歌一样整齐地对立;C语言像散文一样面向过程,像散文一样散而集中,意境深远;Java语言像写小说一样面向对象,可以勾勒出人物的形象。但无论是哪种文章体裁,其可读性和可理解性都非常重要。只有文章可读易懂,才会吸引更多的读者去阅读,让它流传下去,代码也一样,它的可维护性和可读性也很重要。保证代码的可用性,提高代码的简洁性和可维护性,可以让我们的代码在计算机上跑得更远、更久。
