那些追源码的平凡之路
共 4615字,需浏览 10分钟
·
2020-12-28 01:47
在斯坦福大学, 乔布斯做了一场我认为他最精彩的演讲。他讲的第一个故事是 connecting the dots,这也是贯穿他一生非常重要的思想。
“你不可能充满预见地将生命的点滴串联起来;只有在你回头看的时候,你才发现这些点点滴滴之间的联系。所以,你要坚信,你现在所经历的将在你未来的生命中串联起来… 正是这种信仰让我不会失去希望,它让我的人生变得与众不同。
”
01 数据库连接池 Durid
不过,有一个问题是:每天第一次数据库请求总会报连接错误。当时我也不怎么会看源码,就直接给 Druid 的作者温少(也是 FastJson 作者)发了一封邮件:
温少给我回复了邮件,我马上翻看源码,发现我配置的连接心跳有问题。核心点在于连接池每隔一段时间就会发送心跳包到数据库服务器,而数据库为了节省资源,会关闭掉长期没有读写的连接。
这次简单的源码之旅给了我很大的激励,也让我更加关注技术背后的原理。
1、精神层面:向别人请教问题是会上瘾的。
2、技能层面:理解连接池的实现原理。druid是基于数组实现的,后来用到的 jedis 连接池基于 commons-pool 实现的,netty 连接池是基于 FixChannelPool 实现的。
3、架构层面:客户端和服务端的长连接通信需要考虑心跳。类似 druid 连接池发送心跳的机制,以及 netty 中的 idleStateHandler。
02 分库中间件 Cobar
在写 NIO 工程的同时,我还学习到了 Maven 的 Assemble 打包模式,这个现在听起来很简单,但在 2013 年还是以 Tomcat 部署 war 包占主流的年代,让当时的我眼前一亮。
03 阿里的消息中间件 MetaQ
3.1 广播消息在推送系统中的使用
1、业务系统推送消息到 MetaQ
2、TCP 网关广播模式消费 MetaQ 的消息
3、TCP 网关获取当前服务器所持有的 Session 会话,推送数据给 App
3.2 ZK 崩溃引申的一连串知识
04 任务调度系统 XXL-Job
Schedule-Client 收到调度请求后,会将任务丢到线程池中异步执行,同时立马返回给调度服务器,这样就不会阻塞了。
1、RPC 调用类似 RocketMQ remoting
2、任务调度通过 RPC 触发,有统一的注册中心(NameServer 模式)
3、支持多端口启动,以防当前端口启动失败
4、任务执行和任务调度的线程池做了隔离
1、任务调度重度依赖数据库, 当真正有 10 万、20 万级别的任务的时候,任务的分配以及调度的触发肯定会有瓶颈。
2、当系统是容器的时候,是否可以正常使用?
05 写在最后
亲爱的程序员朋友,爱你所选,全情投入,相信你必有所得。一首《平凡之路》献给正在砥砺前行的你和我!
IT人的职场进阶
前亚马逊工程师,现58转转技术总监,持续分享技术和管理干货,希望为你的职场发展带来些新思路,欢迎扫码关注我!
大家在看: