browser-os5711.2.總體設計-msgout重構(gòu)詳細設計_第1頁
browser-os5711.2.總體設計-msgout重構(gòu)詳細設計_第2頁
browser-os5711.2.總體設計-msgout重構(gòu)詳細設計_第3頁
browser-os5711.2.總體設計-msgout重構(gòu)詳細設計_第4頁
browser-os5711.2.總體設計-msgout重構(gòu)詳細設計_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、msgout 重構(gòu)詳細設計網(wǎng)絡技術(shù)(,)()模塊名稱Msgout所屬系統(tǒng)BCMS模塊祥項目祥文檔提交日期修改No修改后版本號修改內(nèi)容簡介修改日期修改人1V1.0全文祥目錄123背景4.4設計目標43.1實現(xiàn)的功能445設計思路及折衷5系統(tǒng)設計65.15.2BCMS 整體架構(gòu)6Msgout 實現(xiàn)架構(gòu)66處理流程6.4長連接 fetch7短連接 fetch/ack7長連接訂閱7訂閱87與外部系統(tǒng)的接口8與 msgpipe 的接口8與 router 的接口.2Sub8Push989兼容性設計9風險評估及對其他模塊/系統(tǒng)影響101背景Msgout 模塊目前的架構(gòu)是

2、:基于 UB netreactor 實現(xiàn)了一套異步 RPC 服務。但是目前的實現(xiàn)方式存在幾個問題:直接管理 FD,存在難以排查的 FD 泄漏問題;存在難以排查的內(nèi)存泄漏問題;3) 代碼可性差;4) 太多基于隊列類型的條件判斷,也是導致代碼性變差的一個重要原因。另外,雙向channel 項目要求 msgout 有一些功能上的升級,包括:單個 TCP 連接上可以訂閱多個隊列單個 TCP 連接可以 fetch 任意隊列的消息支持批量消費消息4) 支持從的消息開始訂閱2BCMS: Baidu Cloud Message ServiceQueue 類型: 隊列類型,也稱單模式,一個消息只會被一個消費者消

3、費(即使有多個消費者)。Topic 類型: 隊列類型,也稱多模式,每個消費者都可以消費隊列上的所有消息。3設計目標基于 ub 的異步 rpc 編程框架。將 FD 管理這類問題交給框架去做;簡化類型系統(tǒng),將類型簡化為 queue 模式,topic 模式兩種,其余特性作為隊列屬性實現(xiàn);3)消息消費邏輯,任何消息都可以用任何方式來消費3.1實現(xiàn)的功能除保持現(xiàn)有功能外,需要實現(xiàn)以下功能單個 TCP 連接上可以訂閱多個隊列單個 TCP 連接可以 fetch 任意隊列的消息支持批量消費消息4) 支持從的消息開始訂閱4設計思路及折衷隊列類型簡化為單模式和多模式兩種。其余特性用屬性描述,歸納起來有以下一些屬性

4、:1) 隊列類型:queue or topic 2) 可靠性:是否要求回 ack有序性:是否要求隊列上的消息被嚴格有序地被消費持久化:消息是否需要持久化所有類型的隊列,都支持拉取或推送的消費方式(nshead, http),都支持一次取多個消息。這么做的理由如下:隊列屬性正交化,各種屬性相互獨立,也可以組合出處理邏輯簡化、直觀的隊列形態(tài)來。5系統(tǒng)設計5.1BCMS 整體架構(gòu)5.2Msgout 實現(xiàn)架構(gòu)Msgout 的實現(xiàn)擬復用 ubAserver 網(wǎng)絡編程框架來實現(xiàn)。架構(gòu)圖如下所示:fetch, sub, notify, inotify 各用一個 ubAserver 實現(xiàn)。具體實現(xiàn)見下文詳細描

5、述。6處理流程6.1 長連接 fetch接上回ack。如果這個連接出現(xiàn)錯誤,需客戶端在一個長連接上取走消息,在同要及時向后端(ack fail)。為了能夠及時 ack faigout 需要已被fetch 走,但是還沒有回 ack 的隊列及消息(un_ack_list),當客戶端回 ack 時,msgout 向后端 ack suc的項。s,并清除 un_ack_list 中對應如果客戶端斷開連接或網(wǎng)絡有異常,msgout 需要針對該連接上所有 un ack 消息,向后端 ack 一個fail。/todoun_ack_list 數(shù)據(jù)結(jié)構(gòu)是不是應該每個 ses擁有一個?6.2 短連接 fetch/a

6、ck客戶端在接里取走消息,在另接回 ack。6.3 長連接訂閱客戶端(router)在長連接到 msgout,訂閱一個或多個隊列,當隊列上有消息到達時,將消息推送到指定長連接上,直到把隊列上所有消息推送完畢。當客戶端訂閱的是單模式的隊列時,只需要提供隊列名稱,當訂閱多模式隊列時,同時需要提供一個唯一的 sub_id。Msgout 保存每個隊列的訂閱信息,當收到 msgpipe 的 notify 消息時,msgout 會取出隊列訂閱信息,根據(jù)隊列類型為單模式,則把消息推送到一個隨機的連接上;若隊列類型為多模式,則把消息推送到所有 sub_id 對應的 fd 上。如果一個隊列的一個 sub_id

7、對應多個 FD,則隨機選擇其中一個推送。單模式隊列的訂閱,當接里隨機選擇一個推送。接推送失敗時,若還有其它連接可用,則在其它可用的連多模式隊列的訂閱,當一個 sub_id 對應該的連接推送失敗時,若該 sub_id 下還有可用的連接,則隨機選取一個進行推送??蛻舳艘部梢灾付◤漠斍暗南㈤_始接收推送。使用全局的 nshead_push_reactor 進行推送。6.4訂閱用戶一個 url,當指定隊列有消息到達時,推送到指定的 url 上,直到把隊列上所有消息推送完畢。使用全局的 http_push_reactor 進行推送。7與外部系統(tǒng)的接口7.1 與 msgpipe 的接口與 msgpipe

8、的接口保持不變。略。7.2 與 router 的接口7.2.1 Substruct msgout_uas_req_t string acs_token = optional(); string cnt_id = optional(); string sign = optional();binary basic_string = optional();struct msgout_sub_req_tu32_t role; string queue_name;/u32_t sub_type;/* 0:Topic 訂閱 1:Queue 訂閱msgout_uas_req_t acl;u64_t msg_

9、id = optional();*/u64_t sub_id = optional();/* router 提供的 sub_id */;對于 topic 類型隊列,如果用戶沒有提供 sub_id,則表明用戶自己管理消費進度。如果提供 sub_id,則表明希望 bcms 代為管理消費進度。對于 bcms 來說,前一種情況下,直接由 msgpipe 去 kv-ac的消費進度。s 取下一條消費進度;后一種情況下需要到 idgen 去取對應 sub_id 上struct msgout_sub_res_tu32_t error;/* 0:ok 1:參數(shù)錯誤2:權(quán)限錯誤3:系統(tǒng)錯誤4:系統(tǒng)5:無*/u32_t msgout_id;string queue_name = optional();7.2.2 Pushstruct msgout_push_req_tstring queue_name; u32_t msgout_id; u64_t msg_id

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論