学习思路
面对一个开源项目, 首先了解其基本部署和功能点。例如,对于 一个消息中间件,可以先找些资料了解,它的功能是什么、用于什么场景、弊端等等。 接下来,再来理解这个中间件,不就是多个生产者多个消费者之间进行数据传递吗?那么传递的方式呢? 点对点? 点对多? 订阅发布(如何实现),pull还是push? 这些方式在实际场景中有什么优点、局限性?
了解了最简单的功能、使用场景,再深入一点。如何保证在中间件出问题的情况下,消息不丢?或者事物回滚?如何保证消息的一致性?如何平衡上下游的生产和消费能力?
到达一定程度之后,再去深入。比如单机性能不够了,考虑使用分布式消息组件。
那么在引入分布式消息组件后又会带来什么新的问题?实现负载均衡? 消息一致性? 可靠性(单机挂掉不会导致消息丢失)?
所以必然有冗余备份机制,那么又如何解决消息重复问题(已经收到的消息又被通知了)?而分布式里边还需要考虑单点故障及容灾。
源码和场景处理
知道一个东西有什么用,然后研究怎么用,明白了有些什么场景,而明白了场景看源码比较清晰,而死扣源码又会对场景和功能有了进一步的了解, 形成一个相互促进的关系。
在面对一个开源项目没有任何疑问之前,说明你啥也不知道,没有目的、没有兴趣、没有思考。只是为了看源码而看源码。或许在看源码的期间会有收获,但是这个过程是很痛苦的。