Go消息中間件Nsq系列(二)------Nsq目錄結(jié)構(gòu)

上一篇: Go消息中間件Nsq系列(一)------初識(shí)Nsq

  • 1.Nsq 源碼目錄結(jié)構(gòu)

1.1 首先了解一下tree命令 查看使用指南, 主要功能是: 創(chuàng)建文件列表,將所有文件以樹(shù)的形式列出來(lái)

mac下安裝brew install tree

` tree ../nsq -L 2` //查看nsq項(xiàng)目結(jié)構(gòu)
```bash 
    ├── CODE_OF_CONDUCT.md
    ├── CONTRIBUTING.md 
    ├── ChangeLog.md    #更新日志
    ├── Dockerfile      #鏡像構(gòu)建
    ├── Gopkg.lock
    ├── Gopkg.toml
    ├── LICENSE
    ├── Makefile    # 編譯指令集
    ├── README.md
    ├── Study.md
    ├── apps    # nsq所有項(xiàng)目
    │   ├── nsq_stat # 節(jié)點(diǎn)數(shù)據(jù)狀態(tài)
    │   ├── nsq_tail  #消費(fèi)數(shù)據(jù)打印到控制臺(tái)
    │   ├── nsq_to_file  # 消費(fèi)數(shù)據(jù)到文件
    │   ├── nsq_to_http #  消費(fèi)數(shù)據(jù)由http方式發(fā)送出去
    │   ├── nsq_to_nsq  # 消費(fèi)數(shù)據(jù)然后在由其他生產(chǎn)者生產(chǎn)
    │   ├── nsqadmin  # 用于實(shí)時(shí)查看集群的統(tǒng)計(jì)數(shù)據(jù)(并且執(zhí)行各種各樣的管理任務(wù))。
    │   ├── nsqd    # 接收消息、分發(fā)消息到消費(fèi)者客戶端
    │   ├── nsqlookupd # 管理拓?fù)湫畔⒉⑻峁┳罱K一致性的發(fā)現(xiàn)服務(wù)。 
    │   └── to_nsq
    ├── bench # 批量測(cè)試腳本
    │   ├── bench.py
    │   ├── bench_channels
    │   ├── bench_reader
    │   ├── bench_writer
    │   └── requirements.txt
    ├── bench.sh # 批量測(cè)試腳本
    ├── contrib # 配置說(shuō)明
    │   ├── nsq.spec # rpm建包腳本
    │   ├── nsqadmin.cfg.example
    │   ├── nsqd.cfg.example
    │   └── nsqlookupd.cfg.example
    ├── coverage.sh # 覆蓋率測(cè)試
    ├── dist.sh
    ├── fmt.sh
    ├── go.mod # go module
    ├── go.sum
    ├── internal # 內(nèi)部實(shí)現(xiàn)代碼,internal對(duì)外部不可見(jiàn)
    │   ├── app # 浮點(diǎn)數(shù)組 字符串?dāng)?shù)組工具類
    │   ├── auth # 權(quán)限處理
    │   ├── clusterinfo # 集群監(jiān)控信息, 比如當(dāng)前版本號(hào),消費(fèi)者,生產(chǎn)者節(jié)點(diǎn)信息操作處理等
    │   ├── dirlock # flock 文件鎖類似
    │   ├── http_api  # http客戶端封裝
    │   ├── lg # 日志庫(kù)封裝
    │   ├── pqueue # 最小堆實(shí)現(xiàn)的優(yōu)先級(jí)隊(duì)列
    │   ├── protocol #系統(tǒng)中任何協(xié)議的基本行為
    │   ├── quantile #位數(shù)操作
    │   ├── statsd # 統(tǒng)計(jì)
    │   ├── stringy #數(shù)組去重,合, 格式化時(shí)間
    │   ├── test # 測(cè)試 工具類
    │   ├── util #waitgroup, 唯一隨機(jī)數(shù)生成
    │   ├── version #版本常量
    │   └── writers # 輸出流封裝
    ├── nsqadmin  # nsqadmin實(shí)現(xiàn)
    │   ├── README.md
    │   ├── bindata.go # go-bind自動(dòng)生成
    │   ├── context.go # 上下文
    │   ├── gulp # 前端自動(dòng)構(gòu)建工具
    │   ├── gulpfile.js # 前端構(gòu)建腳本
    │   ├── http.go # http api服務(wù)
    │   ├── http_test.go # 測(cè)試
    │   ├── logger.go # 日志
    │   ├── notify.go # admin操作提醒
    │   ├── nsqadmin.go # 主程序
    │   ├── nsqadmin_test.go 
    │   ├── options.go # 配置對(duì)應(yīng)
    │   ├── package-lock.json
    │   ├── package.json # 前端配置信息
    │   ├── static
    │   └── test
    ├── nsqd # 實(shí)現(xiàn)
    │   ├── README.md
    │   ├── backend_queue.go #后端隊(duì)列接口定義
    │   ├── buffer_pool.go # sync.pool 實(shí)現(xiàn)
    │   ├── channel.go # channel 實(shí)現(xiàn)
    │   ├── channel_test.go
    │   ├── client_v2.go # 客戶端一些操作實(shí)現(xiàn)
    │   ├── context.go # 上下文
    │   ├── dqname.go # 獲取存儲(chǔ)結(jié)構(gòu)名稱
    │   ├── dqname_windows.go # 兼容windows文件名 用;號(hào)
    │   ├── dummy_backend_queue.go # 假實(shí)現(xiàn)
    │   ├── guid.go # 全局唯一id生成參考noeqd和snowflake
    │   ├── guid_test.go
    │   ├── http.go # http api服務(wù)
    │   ├── http_test.go
    │   ├── in_flight_pqueue.go # 隊(duì)列
    │   ├── in_flight_pqueue_test.go
    │   ├── logger.go # 日志
    │   ├── lookup.go # lookup 連接操作
    │   ├── lookup_peer.go # lookup 連接操作
    │   ├── message.go # nsq 消息結(jié)構(gòu)
    │   ├── nsqd.go # 主程序
    │   ├── nsqd_test.go
    │   ├── options.go # 配置
    │   ├── protocol_v2.go # nsqd協(xié)議處理
    │   ├── protocol_v2_test.go
    │   ├── stats.go # 統(tǒng)計(jì)
    │   ├── stats_test.go
    │   ├── statsd.go # 統(tǒng)計(jì)進(jìn)程
    │   ├── tcp.go # tcp 協(xié)議
    │   ├── test
    │   ├── topic.go # 主題
    │   └── topic_test.go
    ├── nsqlookupd # nsqlookupd 實(shí)現(xiàn)
    │   ├── README.md
    │   ├── client_v1.go # 客戶端封裝
    │   ├── context.go # 上下文
    │   ├── http.go # http api服務(wù)
    │   ├── http_test.go
    │   ├── logger.go
    │   ├── lookup_protocol_v1.go # lookup協(xié)議
    │   ├── lookup_protocol_v1_test.go
    │   ├── nsqlookupd.go # 主程序
    │   ├── nsqlookupd_test.go
    │   ├── options.go # 配置
    │   ├── registration_db.go # 服務(wù)發(fā)現(xiàn)數(shù)據(jù)庫(kù)管理
    │   ├── registration_db_test.go
    │   └── tcp.go # tcp協(xié)議
    ├── test.sh # 測(cè)試腳本
    └── travis.sh # travis腳本
```
  • 2. 可以學(xué)到或者說(shuō)了解一下,需要自己去實(shí)踐

    2.1 Travis CI/CD
    作為 GitHub MarketPalce 上的一個(gè)產(chǎn)品,目前只支持 GitHub 倉(cāng)庫(kù),私有和共有庫(kù)都可以使用, 只是用私有庫(kù)的時(shí)候需要在環(huán)境遍歷中配置一個(gè) Token, 這個(gè)Token 設(shè)置可以和下面設(shè)置 GitHub Token 、GIT_NAME 等一樣。
    2.2 coverage.sh 統(tǒng)計(jì)單元測(cè)試的覆蓋率,也就是白盒測(cè)試的覆蓋率。
    還有Go集成 Coveralls.io 代碼覆蓋率持續(xù)跟蹤系統(tǒng) https://github.com/mattn/goveralls
    2.3 Makefile 編譯項(xiàng)目腳本 , Dockerfile docker鏡像構(gòu)建腳本 , bench.sh性能測(cè)試腳本等
    2.4 go mod (go包管理)的使用
    2.5 使用了 go-svc 來(lái)啟動(dòng)nsq的相關(guān)程序,使得在程序退出的時(shí)候可以做一些釋放資源等收尾工作 https://github.com/judwhite/go-svc
    2.6 使用了 toml language配置語(yǔ)言,作為配置文件https://github.com/BurntSushi/toml
    2.7 使用了testify用go實(shí)現(xiàn)的一個(gè)assert風(fēng)格的測(cè)試框架,這個(gè)包提供了我們需要的斷言的功能,提供了非常豐富的斷言方法。https://github.com/stretchr/testify
    2.8 使用了difflib比對(duì)文本之間的差異https://github.com/pmezard/go-difflib
    2.9 使用了go-options解析通過(guò)命令行標(biāo)志,配置文件和默認(rèn)結(jié)構(gòu)值設(shè)置的配置值。https://github.com/mreiferson/go-options
    2.10 使用了httprouter 高性能路由框架,內(nèi)置實(shí)現(xiàn)算法radix tree https://github.com/julienschmidt/httprouter
    2.11 使用go-binddata內(nèi)嵌靜態(tài)資源https://github.com/jteeuwen/go-bindata
    2.12 使用了timer_metrics捕獲定時(shí)信息和定期輸出指標(biāo)的有效方法https://github.com/bitly/timer_metrics
    2.13 使用了golang編寫的語(yǔ)義版本控制(semver)庫(kù)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變量數(shù)據(jù)結(jié)構(gòu)調(diào)試?yán)?go-spewhttps://github.com/davecgh/go-spew
    2.16 使用了snappy 壓縮優(yōu)點(diǎn)是非常高的速度和合理的壓縮率。壓縮率比gzip 小,CPU 占用小。https://github.com/golang/snappy
    2.17 go-hostpool 主機(jī)池,使用 epsilon-Greedy算法(?-貪婪算法)實(shí)現(xiàn)負(fù)載https://github.com/bitly/go-hostpool
    2.18 backbone.js是一款web前端開(kāi)發(fā)的javascript輕量級(jí)MVC框架;gulp 前端項(xiàng)目構(gòu)建工具等等, 具體查看nsadmin/package.json

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容