Go消息中间件Nsq系列(二)------Nsq目录结构
上一篇: Go消息中间件Nsq系列(一)------初识Nsq
-
1.Nsq 源码目录结构
1.1 首先了解一下
tree
命令 查看使用指南, 主要功能是: 创建文件列表,将所有文件以树的形式列出来
mac下安装brew install tree
` tree ../nsq -L 2` //查看nsq项目结构
```bash
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── ChangeLog.md #更新日志
├── Dockerfile #镜像构建
├── Gopkg.lock
├── Gopkg.toml
├── LICENSE
├── Makefile # 编译指令集
├── README.md
├── Study.md
├── apps # nsq所有项目
│ ├── nsq_stat # 节点数据状态
│ ├── nsq_tail #消费数据打印到控制台
│ ├── nsq_to_file # 消费数据到文件
│ ├── nsq_to_http # 消费数据由http方式发送出去
│ ├── nsq_to_nsq # 消费数据然后在由其他生产者生产
│ ├── nsqadmin # 用于实时查看集群的统计数据(并且执行各种各样的管理任务)。
│ ├── nsqd # 接收消息、分发消息到消费者客户端
│ ├── nsqlookupd # 管理拓扑信息并提供最终一致性的发现服务。
│ └── to_nsq
├── bench # 批量测试脚本
│ ├── bench.py
│ ├── bench_channels
│ ├── bench_reader
│ ├── bench_writer
│ └── requirements.txt
├── bench.sh # 批量测试脚本
├── contrib # 配置说明
│ ├── nsq.spec # rpm建包脚本
│ ├── nsqadmin.cfg.example
│ ├── nsqd.cfg.example
│ └── nsqlookupd.cfg.example
├── coverage.sh # 覆盖率测试
├── dist.sh
├── fmt.sh
├── go.mod # go module
├── go.sum
├── internal # 内部实现代码,internal对外部不可见
│ ├── app # 浮点数组 字符串数组工具类
│ ├── auth # 权限处理
│ ├── clusterinfo # 集群监控信息, 比如当前版本号,消费者,生产者节点信息操作处理等
│ ├── dirlock # flock 文件锁类似
│ ├── http_api # http客户端封装
│ ├── lg # 日志库封装
│ ├── pqueue # 最小堆实现的优先级队列
│ ├── protocol #系统中任何协议的基本行为
│ ├── quantile #位数操作
│ ├── statsd # 统计
│ ├── stringy #数组去重,合, 格式化时间
│ ├── test # 测试 工具类
│ ├── util #waitgroup, 唯一随机数生成
│ ├── version #版本常量
│ └── writers # 输出流封装
├── nsqadmin # nsqadmin实现
│ ├── README.md
│ ├── bindata.go # go-bind自动生成
│ ├── context.go # 上下文
│ ├── gulp # 前端自动构建工具
│ ├── gulpfile.js # 前端构建脚本
│ ├── http.go # http api服务
│ ├── http_test.go # 测试
│ ├── logger.go # 日志
│ ├── notify.go # admin操作提醒
│ ├── nsqadmin.go # 主程序
│ ├── nsqadmin_test.go
│ ├── options.go # 配置对应
│ ├── package-lock.json
│ ├── package.json # 前端配置信息
│ ├── static
│ └── test
├── nsqd # 实现
│ ├── README.md
│ ├── backend_queue.go #后端队列接口定义
│ ├── buffer_pool.go # sync.pool 实现
│ ├── channel.go # channel 实现
│ ├── channel_test.go
│ ├── client_v2.go # 客户端一些操作实现
│ ├── context.go # 上下文
│ ├── dqname.go # 获取存储结构名称
│ ├── dqname_windows.go # 兼容windows文件名 用;号
│ ├── dummy_backend_queue.go # 假实现
│ ├── guid.go # 全局唯一id生成参考noeqd和snowflake
│ ├── guid_test.go
│ ├── http.go # http api服务
│ ├── http_test.go
│ ├── in_flight_pqueue.go # 队列
│ ├── in_flight_pqueue_test.go
│ ├── logger.go # 日志
│ ├── lookup.go # lookup 连接操作
│ ├── lookup_peer.go # lookup 连接操作
│ ├── message.go # nsq 消息结构
│ ├── nsqd.go # 主程序
│ ├── nsqd_test.go
│ ├── options.go # 配置
│ ├── protocol_v2.go # nsqd协议处理
│ ├── protocol_v2_test.go
│ ├── stats.go # 统计
│ ├── stats_test.go
│ ├── statsd.go # 统计进程
│ ├── tcp.go # tcp 协议
│ ├── test
│ ├── topic.go # 主题
│ └── topic_test.go
├── nsqlookupd # nsqlookupd 实现
│ ├── README.md
│ ├── client_v1.go # 客户端封装
│ ├── context.go # 上下文
│ ├── http.go # http api服务
│ ├── http_test.go
│ ├── logger.go
│ ├── lookup_protocol_v1.go # lookup协议
│ ├── lookup_protocol_v1_test.go
│ ├── nsqlookupd.go # 主程序
│ ├── nsqlookupd_test.go
│ ├── options.go # 配置
│ ├── registration_db.go # 服务发现数据库管理
│ ├── registration_db_test.go
│ └── tcp.go # tcp协议
├── test.sh # 测试脚本
└── travis.sh # travis脚本
```
-
2. 可以学到或者说了解一下,需要自己去实践
2.1 Travis CI/CD
作为 GitHub MarketPalce 上的一个产品,目前只支持 GitHub 仓库,私有和共有库都可以使用, 只是用私有库的时候需要在环境遍历中配置一个 Token, 这个Token 设置可以和下面设置 GitHub Token 、GIT_NAME 等一样。
2.2 coverage.sh 统计单元测试的覆盖率,也就是白盒测试的覆盖率。
还有Go集成 Coveralls.io 代码覆盖率持续跟踪系统 https://github.com/mattn/goveralls
2.3 Makefile 编译项目脚本 , Dockerfile docker镜像构建脚本 , bench.sh性能测试脚本等
2.4 go mod (go包管理)的使用
2.5 使用了 go-svc 来启动nsq的相关程序,使得在程序退出的时候可以做一些释放资源等收尾工作 https://github.com/judwhite/go-svc
2.6 使用了 toml language配置语言,作为配置文件https://github.com/BurntSushi/toml
2.7 使用了testify用go实现的一个assert风格的测试框架,这个包提供了我们需要的断言的功能,提供了非常丰富的断言方法。https://github.com/stretchr/testify
2.8 使用了difflib比对文本之间的差异https://github.com/pmezard/go-difflib
2.9 使用了go-options解析通过命令行标志,配置文件和默认结构值设置的配置值。https://github.com/mreiferson/go-options
2.10 使用了httprouter 高性能路由框架,内置实现算法radix tree https://github.com/julienschmidt/httprouter
2.11 使用go-binddata内嵌静态资源https://github.com/jteeuwen/go-bindata
2.12 使用了timer_metrics捕获定时信息和定期输出指标的有效方法https://github.com/bitly/timer_metrics
2.13 使用了golang编写的语义版本控制(semver)库https://github.com/blang/semver
2.14 Perks contains the Go package quantile that computes approximate quantiles over an unbounded data stream within low memory and CPU bounds.https://github.com/bmizerany/perks
2.15 GoLang变量数据结构调试利器 go-spewhttps://github.com/davecgh/go-spew
2.16 使用了snappy 压缩优点是非常高的速度和合理的压缩率。压缩率比gzip 小,CPU 占用小。https://github.com/golang/snappy
2.17 go-hostpool 主机池,使用 epsilon-Greedy算法(ϵ-贪婪算法)实现负载https://github.com/bitly/go-hostpool
2.18 backbone.js是一款web前端开发的javascript轻量级MVC框架;gulp 前端项目构建工具等等, 具体查看nsadmin/package.json