BIND9源码阅读

2019-05-22  本文已影响0人  死鱼

启动流程(盗图一用)

原文:http://blog.also777.com/2018/05/05/bind-source-code-analysis-1/

设计模式

有一张现成好图来描述BIND的半同步半异步设计模式:

原文:http://blog.also777.com/2018/05/05/bind-source-code-analysis-1/
类似的项目本人之前尝试过:node.js 调度式离线任务处理,用的也是master接受外部消息,然后砸进task queue中,各个worker线程(进程或其他机器)来找master注册一个位置,接着master按照配置,均衡地调度任务给各个worker,然后worker回调结果给master。而BIND看起来可能是worker去捞任务的方式,有待后续源码阅读继续理解。

针对DNS服务端的IO密集型场景,BIND选用了Reactor模式(事件驱动),类似于nginx,nodejs的模型,但nodejs用的是全异步的方式,BIND用的是半同步半异步,代码结构相对简单且清晰很多。
但nodejs近年来已经出现的await/async语法,模仿C#的流程控制,其实已经使得nodejs的代码结构变得十分清晰,不需要函数式不需要callbackhell也能实现异步非阻塞。

入口

#/bin/named/main.c

/* main entry point, possibly hooked */
int
main(int argc, char *argv[]) {
    .......
}

随便修改点啥,在读配置的流程里加一行日志输出:


image.png

然后回到项目目录编译:

make 
sudo make install
bin/named/named -g

就发现代码改成功辣:


image.png

参考:
BIND源代码浅析(一)基本框架

上一篇下一篇

猜你喜欢

热点阅读