人生苦短,不如养狗
经历了考研“溺水”、亲人离别之后,闲鱼又恬不知耻地回到了原先的公司,重归队伍。此处感谢各位领导和老板,还有帅气的敏哥,以及团队的各位成员。 重回部门,看到那熟悉又陌生的项目代码,不由得感到一阵亲切。还是那个熟悉的味。。。咦?怎么原先所有的线程池都被改成了MQ?难道出bug了? 此时,闲鱼的鬓角不禁流下一滴冷汗。在网上因为线程池使用不当导致的系统崩溃问题屡见不鲜,作为一个菜鸟coder的闲鱼,会犯错也是的正常的,吧? 闲鱼表面波澜不惊、内心慌得一批地打开钉钉,咨询了下目前负责的同事。还好还好,不是出bug了。松了一口气的同时,闲鱼不禁奇怪:既然没有出bug,那么为什么在项目中干掉了线程池呢?
结合前面学习的线程以及线程池的知识,闲鱼仔细思考了一下,有了一些思路。
相比使用线程池,RocketMQ有以下优势可以解决上述的问题:
啧啧,这么分析下来,感觉使用MQ的方式好像确实要优于线程池啊。但是,线程池就真的不能用吗?
相比线程池这种基于线程的方式,跨进程的MQ在使用成本上毫无疑问是非常高的。虽然有上述的那些缺点,但是真的就没办法使用线程池了吗? 闲鱼又翻了翻美团技术团队的文章,不愧是大团队,还是有思路的(一时白嫖一时爽,一直白嫖一直爽)。其实很简单,就是针对上面的问题进行逐个解决:
最后一个问题其实还是比较难以解决的,无论怎么想都需要一个外部存储来存储正在执行的任务或者等待执行的任务,否则一旦重启必定会导致线程池中的任务丢失。 但是仔细考虑一下现在的项目情况,我们有许多的私有化部署需求。如果进行私有化,项目一旦发布到私有云上,基本应该不会进行频繁迭代或者服务重启的情况。放弃了线程池的我们就需要对自建的RocketMQ进行相应的维护,使用成本上可能会有所提高,毕竟和阿里云版本的RocketMQ相比,开源版本还是有所差距的。
是线程池还是MQ,这个问题还是需要根据实际业务场景来进行分析。可能这个阶段需要的是线程池,下一个阶段就需要RocketMQ了。这就需要拥有对于线程池和RocketMQ的底层原理的深刻理解和丰富的使用经验了。那么如何获取这些呢?好好加班啊骚年! 疫情依旧,希望大家能够好好保重身体,好好学习,天天向上,哈哈哈~
以及闲鱼的个人博客: https://www.swzgeek.com
本文分享自 Brucebat的伪技术鱼塘 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!