中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

后臺服務器框架中的瑞士軍刀——MCP

發布時間:2020-03-04 15:20:41 來源:網絡 閱讀:687 作者:mb5dd747fa86df1 欄目:建站服務器

后臺服務器框架中的瑞士軍刀——MCP
上篇介紹了一個簡單的UDP服務框架,但是面對海量的請求,同步框架顯然有點力不從心。于是在我接手好友系統的接口服務的時候,就采用了一個強大的異步框架——MCP框架。

MCP框架是一個多進程異步框架,支持UDP、TCP和http,結構很靈活,可以根據需要將各組件像搭積木一樣組裝。下面是MCP最基礎的進程結構。分為3種進程:CCD、MCD和DCC。
后臺服務器框架中的瑞士軍刀——MCP

CCD是面向客戶端的進程,是服務的入口,負責處理前端的請求,維護連接,收發數據,并向MCD轉發。其內部使用線程池實現對TCP請求的listen和accept。服務器內部進程之間使用flow(實際上是一個數字)來表示連接,因此CCD負責維護前端請求句柄和flow之間的映射關系。CCD一般根據端口和協議設置多個。

DCC是面向后端的進程,負責向其他服務發出請求。使用跟CCD類似實現方法,只是面向的是服務器。在經過協程改造的MCP框架中,DCC被去掉了,因為MCD通過協程就可以實現與后端的交互了。DCC跟后端的連接一般采用長連接,避免頻繁創建和釋放連接導致大量TIME_WAIT的情況。

MCD是服務器的核心進程,負責處理業務邏輯,通過epoll和回調函數實現異步。

進程之間通過MQ進行通信,MQ采用共享內存隊列傳輸數據,而通過管道傳輸讀寫信號。如下圖所示,進程首先把數據寫入隊列,當隊列中的數據達到一定長度(避免每個請求都讀取數據)時,MQ會通過管道傳輸一個字符。MQ的使用者只要通過epoll監聽管道句柄,就可以及時地獲得讀寫信號。

后臺服務器框架中的瑞士軍刀——MCP

了解了MCP的基本原理,就可以根據業務的需要進程個性化的定制。例如因為MCD單進程可能有性能瓶頸,我們對其進行了擴展,改造成多MCD進程版本。如圖所示,MCD后端派生出多個SUBMCD進程,SUBMCD進程負責處理真正的業務邏輯;而MCD進程退化成一個業務分發的程序,同時負責一些公共的業務邏輯,例如負責管理全局哈希表數據的超時清理(定期掃描超時節點,表太大的情況可以分次掃描,只要保持好掃描位置信息即可)。
后臺服務器框架中的瑞士軍刀——MCP

SUBMCD直接跟CCD和DCC通信(圖中省略了SUBMCD和CCD之間的MQ),通過配置文件設置,在服務初始化的時候就在各個需要通信的進程間創建好共享內存MQ。這樣可以避免MCD成為通信瓶頸。

另外還派生出一個MONITOR進程,負責日志的收集和輸出,還可以做其他一些耗時的操作,避免業務進程阻塞。

MCP框架兼有功能強大和性能卓越的優點。具體壓測數據不太記得,在一個數據包轉發服務中,QPS也在30W+。在使用上,有一定的學習成本,但是適用面非常廣,可以說一個框架走天下。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平阴县| 蒙城县| 绥芬河市| 兴和县| 方山县| 临高县| 大厂| 都安| 绥芬河市| 万安县| 周口市| 绥德县| 临澧县| 赤峰市| 依兰县| 卢龙县| 昌图县| 广饶县| 衡阳县| 晋宁县| 清新县| 北川| 宜宾县| 如皋市| 新蔡县| 平乡县| 太康县| 赣榆县| 锦屏县| 仁寿县| 闽侯县| 胶南市| 锦州市| 山东省| 崇礼县| 金华市| 昭平县| 通江县| 从化市| 莎车县| 鸡泽县|