
image.png
幾千行 C 代碼實(shí)現(xiàn)了的一個(gè)優(yōu)先級/延時(shí)隊(duì)列,短小精悍
概念
tube - 消息通道,類似于 kafka 里面的 topic, 用來存儲某一類或者業(yè)務(wù)的任務(wù)
job - 生產(chǎn)和消費(fèi)的基本單元,每個(gè) job 都會有一個(gè) id 和 優(yōu)先級
特點(diǎn)
1、協(xié)議,類 Memcached 協(xié)議, 非二進(jìn)制安全
2、全內(nèi)存, 可開啟 binlog, 斷電從 binlog 恢復(fù)數(shù)據(jù)
3、單線程, 使用 epoll/kqueue 來實(shí)現(xiàn)事件機(jī)制
基于golang和beanstalk封裝的分布式發(fā)布訂閱消息系統(tǒng)
主要工作
1、producer消息路由
2、維護(hù)client與topic的訂閱關(guān)系
3、dispatcher并發(fā)投遞消息給多個(gè)相關(guān)訂閱者,從而支持1對N的關(guān)系
delivery guarantee:At least one(消息絕不會丟,但可能會重復(fù))
問題
1、存在單點(diǎn),沒有replication機(jī)制(會引入復(fù)雜性)
2、無探活,failover機(jī)制
3、訂閱關(guān)系存儲在文件中
使用beanstalk調(diào)度系統(tǒng)