正文
2. Django 和 Tornado
看Django的源码是纯属工作需要,当时我们基于Django的Admin系统进行了很多定制开发,而Django的Admin部分文档偏偏很少,因此大部分的需求都需要去查看Django Admin的源码来进行处理。
这么做带来的好处就是遇到问题是不依赖文档,直接通过查看源码来确认有哪些API可以使用,可以用来hook,或者patch。
在前面的课程中我也介绍过,Django的Admin用到了Django提供的各个模块:Model,Form,Widget,QuerySet等,因此通过这个机会熟悉了Django常用的模块。
看Tornado源码是源于我们认为相对于Django庞杂的业务代码来说,Tornado的代码的技术含量更高。有一段时间团队成员都在私下学习Tornado的源码,对于要承载高流量的业务来说,完全掌握所使用的框架是非常有必要的。
从读源码的体验上来说,Django的源码纷繁复杂,各种模块之间的依赖需要阅读大量相关代码才能捋的清楚。而Tornado的代码是,晦涩难懂,因为它基于事件模型封装出来的协程实现方案是非常绕的。两者是不同的逻辑,可以学习到不同的内容。
3. Nginx
阅读Nginx源码是为了解决当时遇到的一个问题:《Nginx主动监测模块upstream check误用导致的502--no live upsteams》。
从解决的问题的方向上来说,阅读Nginx源码并不是最有效的方式,毕竟是C的代码,没有那么熟悉。但当时没有想到nginx_upstream_check_module模块的默认值为default_down=true,以为是我们的Nginx配置有问题。所以花了些时间调试并阅读了Nginx部分源码,从根上找到了问题所在。
从技术储备上来说,也是有些收获,虽然现在回忆起来有很多细节都忘了,但再次阅读源码应该问题不大。关键在于熟悉了Nginx启动、重启、模块加载以及处理请求的流程。