learn-tech/专栏/中间件核心技术与实战/用户故事愿做技术的追梦人.md
2024-10-16 06:37:41 +08:00

67 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

因收到Google相关通知网站将会择期关闭。相关通知内容
用户故事 愿做技术的追梦人
你好,我是徐拥,目前是京东科技交易相关部门的软件开发工程师。
我从《中间件核心技术与实战》刚上架的时候,就一直在跟随丁老师的脚步学习中间件相关的知识。在这个过程中,我对各种中间件有了一些新的认知,也收获了很多新的思维方式。很高兴能在这里跟你分享我学习课程的心得体会和学习方法。
为什么要学习和中间件相关的专栏?
在互联网电商领域,高并发场景下,数据流量动辄就是 GB 级、TB 级甚至是 PB 级的,这些数据都需要服务器在短时间内处理完,这就涉及到如何充分利用单机的性能,如何保障服务间的交互等问题了。
于是, 削峰填谷、降级限流、异步解耦、分布式,各种概念扑面而来。而它们也成为了系统交互、任务处理的关键。在我所在的岗位上,分布式事务、数据一致性、突发流量的应对、大数据处理,这些都是工作必备的基础知识。
比如,某个审计系统通过 KafkaStream 对接实时流量数据,在经过过滤清洗后,存储在 Es 的数据量依旧非常大。
比如,每天的订单量虽然会流转很多系统,但是必须保证事务的最终一致性和补偿 / 对账机制,不能有一丝的差错。
再比如,在活动系统中,每天官网都会有优惠秒杀、限时折扣等类型的活动。
如果负责这些板块,但却不能尽快熟知各个组件的原理,尽快解决或者避免各种问题的发生,那既是一种失职,也会让自己的技术水平日益落后于同事。所以在工作之余,我会主动地收集从点到面再到点的相关资料,修炼专项技能,吸取很多业界大佬和同事们的经验。
兴趣是最好的老师
作为一名初级程序员,我和很多人都一样,学习的动力主要是基于对新技术的兴趣,看到各种新技术就想 demo 它。对于不同中间件推出的新特性,我也经常迫不及待地想要尝尝鲜,可以说是乐在其中。但是每次出现没见过的问题,自己解决不了,我就只能去 Google。这也是大家的常规操作了不过时间久了我也发现自己对它太依赖了。
这么做的问题是,如果我对组件的了解只停留在用的程度,也就是黑盒。一旦出现问题,就可能自乱阵脚。这时候我们需要知道的是,组件这块是怎么写的,然后扒拉一下它的代码,看看各种包、类、方法和思想。
理解组件的原理和思想,要从 case 入手
接下来,我想跟你分享一下我在学习 Kafka 时的经验。
首先push 下代码后,要把对应的环境搭建好。然后从 case 入手,理解这个 case 的用途,它是测试什么的。然后一层层、一行行地 Debug。如果对哪个模块感兴趣就去写个小 demo 运行一下,了解这个模块的具体作用(要想研究源码,首先得知道这个模块是干啥的,有什么作用)。
在 Debug 的过程中,我们第一遍的重点是根据方法名,简略地看下逻辑,每个方法都用了哪些类。
第二遍看源码,要深入特定模块,看看这些类承担了哪些功能,使用了哪些设计模式。如果看完还是有点迷糊,就需要重复这一步,同时根据主要类画出调用时序图。这样,根据图再去看代码,思路就会更加清晰一些。其实这个过程也是在印证你思考的过程。你会被带入某些场景中,有更深刻的理解。
学习的另一条“捷径”——线上问题
学习的另一个“捷径”,就是让 Bug 给自己带路,通过解决线上遇到的问题,来扩大自己的知识储备,提高应对问题的能力。这个学习思路在丁威老师的案例课里也有体现。
虽然我们踩过的坑前人基本都踩过,但不得不说,什么事都有例外。因为各种环境不一致导致的问题就是这样。
举个例子,在 KStream 消费时,如果中间件或者网络不稳定,超过了 Kafka 的默认配置,这个时候服务虽然健康,但是消息已经不消费了。因为线上消息是非常庞大的,在很短的时间内, Lag 就会特别大。
出现这个问题之后,我们也是第一时间重启恢复了消费,紧接着就是复盘。以前,我的学习都是这样由 Bug 驱动的。出现问题我会第一时间 Google 一下, 但是还是找不到原因,所以我发邮件请教了 Kafka 团队。同时,把 Kafka 代码下载下来看,最终发现修改某些心跳参数和拉取量,就能尽可能避免这种问题的出现。
在这期间,我对这模块代码的理解也有了质的飞跃。不过,只是 Bug 驱动的学习,会让知识体系变得比较零散。今年 6 月,我发现了极客时间的专栏,这个新大陆发现得太及时,我一眼就爱上了。
丁威老师的这个专栏,刚好弥补我在系统性上的欠缺。它让我慢慢开始从架构师的视角来看待业务,同时也让我认识到,技术是服务于业务的,所以不要过度设计,因为这样会提高团队的学习成本。
写在最后
很荣幸能和大家共同学习,我也认为,订阅这门课程的同学本身就对技术和视野有更高的追求。
借用黄清昊老师的一句话 :“优秀的同学往往对技术本身有着更强烈的好奇,比如出现一些事故的时候,想办法快速解决问题之后,他们往往会做更深刻的复盘,去了解相关中间件或者代码背后的运行机制,甚至还会做一些分享。”也祝我们在学完课程后,自身的能力都可以更上一层楼。
最后,我想借这个专栏,感谢一下在我刚进入团队时就带着我的成良和英草导师,是他们让我成为一个更坚定、更有温度的技术追梦人。世界急剧变化,未来山高路远,但相信一定可以江湖再见。
期待你的留言,我们一起交流和讨论,共同进步!