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

你可能感兴趣的:(Go消息中间件Nsq系列(二)------Nsq目录结构)