衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

DMicro框架的應用開發

電子工程師 ? 來源:OSCHINA 社區 ? 作者:ClownFish ? 2022-08-08 15:18 ? 次閱讀

概述

DMicro中的drpc組件的思想是參考erpc實現,甚至可以說是它的繼承者。

drpc組件是DMicro框架的一部分,為了適配DMicro框架,在erpc的基礎上做了深入的擴展開發。

整個DMicro大量使用goframe中的組件,如果業務使用goframe框架,可以無縫接入。

DRpc特性列表:

對等通信,對等Api

高性能,非阻塞異步IO

自定義Proto,,兼容http協議,自定義Codec

Hook點,插件系統,

Push消息,session管理,Socket抽象,

斷線重連,過載保護,負載均衡,心跳機制,

平滑重啟...

DServer特性列表:

快速構建,平滑重啟,多進程支持,單/多進程一致

預定義命令行,ctrl命令管理服務

可觀測,可控制,應用沙盒

DMicro已經內置組件:

[x]Registry服務注冊

[x]Selector服務發現

[x]Eventbus事件總線

[x]Supervisor進程管理

[ ]Code gen代碼生成

[ ]Tracing鏈路追蹤

[ ]Metrics統計告警

[ ]Broker限流熔斷

[ ]OpenAPI文檔自動生成

架構

bace98a4-16c5-11ed-ba43-dac502259ad0.png

設計理念

對DMicro框架的設計,從設計之初就是在追求靈活性,適應性。在保證微服務的穩定性前提下,追求項目的開發效率。

面向接口設計,保證代碼穩定,提供靈活定制。

抽象各組件的接口,高內聚,低耦合

分層設計,自上而下逐層封裝,利于穩定和維護。

高性能,高可用,低消耗。

對開發友好,封裝復雜度。

提供豐富的組件及功能,讓開發專注業務。

無數個寫DMicro的日夜,我都謹記開發三原則:

Clarity(清晰)

Simplicity(簡單)

Productivity(生產力)

無論工作,還是做開源項目,都應該保持這三個原則,養成良好的習慣。

面向接口設計

DMicro秉承著萬物皆接口的原則,提供框架無與倫比的擴展性.

下圖展示的是消息的發送的流轉流程,可以看到,所有的功能點都被抽象成了接口,每個功能點都提供了不同的實現.

baf85414-16c5-11ed-ba43-dac502259ad0.png

會話 Session

大多數的Rpc框架并不強調會話 (session) 的概念,因其應用場景不需要用到會話 (session). 那么drpc為什么需要抽象出會話 (session) 呢?

Endpoint融合了Client和Server, 需要提供相同的Api.

服務端需要主動向客戶端發送消息,并且獲取客戶端的響應.

服務端支持對多個客戶端批量發送消息.

異步主動斷開一個或多個會話.

獲取會話底層的文件描述符, 對其進行性能調優.

可以為每個會話綁定特殊的數據/屬性.

Session抽象了整個drpc框架的會話,把Socket,Message,Context都融合到一起。開發者只需要對session進行操作,就能實現大多數需求.

獲取連接信息

控制連接的生命周期 (超時時間)

控制單次請求的生命周期 (超時時間)

接收消息

發送消息

創建消息的上下文

綁定會話的相關信息 (如用戶信息)

斷線重連

主動斷開會話.

健康檢查

獲取連接關閉事件

為會話設置單獨的 id

Session接口可以細分為 4 個interface{}, 分別是EarlySession,BaseSession,CtxSession,Session. 對應的是應用的不同生命階段會話 (Session) 擁有的不同屬性.

EarlySession表示剛生成會話,尚未啟動 goroutine 讀取數據的階段.

BaseSession只有最基礎的方法,用于關閉連接時候的插件參數.

CtxSession在處理程序上下文中傳遞的會話對象.

Session全功能的會話對象.

正常情況下,開發者用到的都是Session,CtxSession這兩個接口,其他 2 個接口是在插件中使用.

消息Message

消息Message包含消息頭Header, 消息體Body, 是客戶端與服務端之間通信的實體.

Message interface{}抽象了對通信實體的操作.

Size消息的長度

Transfer-Filter-Pipeline報文數據過濾處理管道

Seq序列號

MType消息類型

ServiceMethod資源標識符

Meta消息的元數據

BodyCodec消息體編碼格式

Body消息體

bb16b72e-16c5-11ed-ba43-dac502259ad0.png

協議 Proto

協議是對消息Message對象的序列化和反向序列化,框架提供Proto接口。只需要實現該接口,開發者就能定制符合業務需求的自定義協議,從而提升了框架的靈活性.

接口的定義如下:

type Proto interface { Version() (byte, string) Pack(Message) error Unpack(Message) error}

Version()返回該協議的 id 和名字,兩個組成唯一的版本號.

Pack對消息Message對象進行序列化.

Unpack對字節流反序列化,生成一個消息Message對象.

目前框架已支持Http,Json,Raw,Protobuf,JsonRpc這 5 個協議.

RAW協議組成如下:

bb34d1c8-16c5-11ed-ba43-dac502259ad0.png

其他協議可以參考代碼.

編碼 Codec

作為一個通用性的框架,支持的協議可以有多種,消息體的編解碼也可以有多少種.drpc使用Codec接口對消息體 Body 進行編解碼.

接口的定義如下:

type Codec interface { ID() byte Name() string Marshal(interface{}) ([]byte, error) Unmarshal([]byte, interface{}) error }

ID返回編 Codec 的 id

Name返回編 Codec 的名字,名字是為了開發者更容易識別.

Marshal對消息內容進行編碼

Unmarshal對消息內容進行解碼

目前框架已支持Form,Json,plain,Protobuf,XML這 5 個編解碼.

連接 Socket

Socket擴展了net.Conn, 并且抽象出接口,方便框架對底層網絡協議的集成.

Socket接口實現了一部分Session接口的功能,Session接口調用的一些方法,實際上是轉發調用了Socket中的方法.

這樣的分層實現,讓Socket擁有的集成其他協議的能力.

TCP V4,TCP V6

Unix Socket

KCP

QUIC

支持對連接的性能調優.

SetKeepAlive開啟鏈接保活

SetKeepAlivePeriod鏈接保活間隔時間

SetReadBuffer設置鏈接讀緩沖區 size

SetWriteBuffer獲取鏈接寫緩沖區 size

SetNoDelay開啟關閉 no delay 算法

ControlFD支持操作鏈接的原始句柄

有機的組合

前面講到,DMicro框架萬物皆接口,分層 + 接口的設計,讓DMicro有了靈活的組成高效且符合業務實際情況的能力.

接下來我們要講到實現這些能力的基礎。插件系統.

插件 Plugin

插件系統給框架帶來了極大的擴展性和靈活性,是整個框架的一個靈魂模塊,有了它,框架就有了無限可能。

什么樣的插件系統才能算是優雅呢?我能想到的有以下幾點:

合理且豐富的hook位置,能夠覆蓋整個框架的生命周期,貫穿通訊的各個環節。

每個hook位置的入參和出參都是經過精心設計。

每個插件都能夠使用多個hook位置,每個hook位置都能被多個插件使用。

設計的足夠簡潔,優雅。能方便的進行二次開發定制。

在drpc中,鉤子貫穿與整個Endpoint的生命周期,是它不可或缺的重要一環。

bb6862a4-16c5-11ed-ba43-dac502259ad0.png

通過這些鉤子 Hook點,賦予了插件無限可能.

組件

有了插件,就能通過插件的組合,編寫綜合功能的組件,目前框架提供一些內置的組件,

服務端 Rpc Server

客戶端 Rpc Client

服務注冊 Registry

服務發現 Selector

事件總線 EventBus

進程管理 Supervisor

即將提供:

鏈路追蹤 Tracing

統計告警 Metrics

限流熔斷 Broker.

限于篇幅的原因,具體組件的實現,這里就不深入講解,請關注后續的文章.

未來展望

如果把DMicro比作人生,現在成長的階段還處在少年時期,只完成了基礎的架構設計和一部分組件的開發.

接下來的方向主要是往易用性和可靠性方向發展.

易用性:

項目效能工具dmctl工具的開發,包括代碼生成,項目結構生成,打包,編譯等等功能.

符合 openapi 定義的文檔組件的開發.

更加完善的文檔和使用示例.

可靠性:

可觀測性

鏈路追蹤

指標信息

日志流

生產可用

測試用例的完善

代碼覆蓋率

性能調優

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8694

    瀏覽量

    151929
  • 封裝
    +關注

    關注

    127

    文章

    7997

    瀏覽量

    143416
收藏 人收藏

    評論

    相關推薦

    熱門前端框架:引領現代 Web 開發的潮流

    在當今快速發展的前端開發領域,熱門前端框架如 React、Vue 和 Angular 等,成為了開發者構建高效、高性能 Web 應用的得力工具。它們各自具有獨特的特點和優勢,引領著現代 Web
    的頭像 發表于 01-22 10:08 ?92次閱讀

    AI開發框架集成介紹

    隨著AI應用的廣泛深入,單一框架往往難以滿足多樣化的需求,因此,AI開發框架的集成成為了提升開發效率、促進技術創新的關鍵路徑。以下,是對AI開發
    的頭像 發表于 01-07 15:58 ?136次閱讀

    商湯參與基于昇思AI框架的大模型原生開發成果發布

    近日,昇思人工智能框架峰會暨成果發布會在北京舉辦。AI框架作為大模型開發及產業落地的基礎軟件,在人工智能技術棧中起到使能算法開發、釋放硬件性能的“承上啟下”作用。
    的頭像 發表于 12-17 15:04 ?387次閱讀

    SSM框架的源碼解析與理解

    SSM框架(Spring + Spring MVC + MyBatis)是一種在Java開發中常用的輕量級企業級應用框架。它通過整合Spring、Spring MVC和MyBatis三個框架
    的頭像 發表于 12-17 09:20 ?372次閱讀

    SSM框架的優缺點分析 SSM在移動端開發中的應用

    :Spring框架是企業型開發使用的成熟的開源框架,能夠節省成本。SSM框架使用起來更加輕快,能夠更合理地分配資源,使用最小的資源完成當前的需求。 節省
    的頭像 發表于 12-16 18:18 ?769次閱讀

    SSM框架在Java開發中的應用 如何使用SSM進行web開發

    SSM框架,即Spring、SpringMVC和MyBatis的整合,是Java Web開發中常用的技術棧。它通過分層架構,實現了視圖、控制、業務邏輯和數據訪問的分離,提高了代碼的可維護性和可擴展性
    的頭像 發表于 12-16 17:28 ?651次閱讀

    大語言模型開發框架是什么

    大語言模型開發框架是指用于訓練、推理和部署大型語言模型的軟件工具和庫。下面,AI部落小編為您介紹大語言模型開發框架
    的頭像 發表于 12-06 10:28 ?183次閱讀

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)事件推薦開發者測試

    意圖框架開發者提供真機測試能力,即開發者可連接設備進行調測。開發者完成代碼開發之后,功能正式上架應用市場前,可以在HarmonyOS NE
    發表于 11-18 17:39

    bootstrap框架和vue框架的區別

    Bootstrap和Vue都是目前非常流行的前端開發框架,它們各自具有獨特的優勢和特點。 設計理念 Bootstrap是一個基于HTML、CSS和JavaScript的前端開發框架,主
    的頭像 發表于 07-11 09:55 ?986次閱讀

    bootstrap框架用什么軟件開發

    Bootstrap是一個流行的前端框架,用于快速開發響應式和移動優先的Web應用程序。它提供了一套預定義的CSS和JavaScript組件,使得開發者可以快速構建出漂亮的用戶界面
    的頭像 發表于 07-11 09:50 ?589次閱讀

    鴻蒙ArkUI-X框架開發:【開發準備】

    本文檔適用于ArkUI-X框架開發的初學者。通過環境搭建、代碼下載、代碼編譯、API擴展和使用,快速了解跨平臺項目開發流程。
    的頭像 發表于 05-23 21:02 ?522次閱讀
    鴻蒙ArkUI-X<b class='flag-5'>框架開發</b>:【<b class='flag-5'>開發</b>準備】

    鴻蒙開發學習:【方舟開發框架容器類API的介紹與使用】

    在**方舟**開發框架中,提供了**線性**和**非線性**兩類容器類,共14種,每種容器都有自身的特性及使用場景。下面,我們將為大家一一道來。
    的頭像 發表于 05-13 16:45 ?943次閱讀
    鴻蒙<b class='flag-5'>開發</b>學習:【方舟<b class='flag-5'>開發</b><b class='flag-5'>框架</b>容器類API的介紹與使用】

    太極類Xposed框架宣布停更,將專注開發實用軟件

    5月8日晚間,“太極”——一款無需Root就能運行的Xposed框架——的開發者維術通過公眾號“虛擬框架”宣布,經過六年來的發展,這款應用迎來了終止運營的時刻。
    的頭像 發表于 05-09 11:35 ?1464次閱讀

    谷歌模型框架是什么軟件?谷歌模型框架怎么用?

    谷歌模型框架通常指的是谷歌開發的用于機器學習和人工智能的軟件框架,其中最著名的是TensorFlow。TensorFlow是一個開源的機器學習框架,由谷歌的機器學習團隊
    的頭像 發表于 03-01 16:25 ?969次閱讀

    谷歌模型框架是什么?有哪些功能和應用?

    谷歌模型框架(Google Model Framework)并不是一個特定的框架,而是指谷歌開發的一系列軟件框架,用于支持機器學習和人工智能的應用。以下是一些與谷歌模型
    的頭像 發表于 02-29 18:11 ?1594次閱讀
    昆明百家乐官网装修装潢有限公司| 百家乐官网玩揽法的论坛| 在百家乐二庄两闲揽的概率| 足球竞彩网| 网络百家乐模拟投注| 百家乐官网赌博机原理| 中国百家乐软件| 百家乐官网有送体验金| 大发888信用| 太子百家乐官网娱乐城| 百家乐官网发牌千数| A8娱乐城| 百家乐澳门技巧| 百家乐官网计划| 赌博拘留几天| 91百家乐的玩法技巧和规则| 百家乐官网赌场论坛在线| 斗地主棋牌游戏| 娱乐城百家乐规则| 百家乐官网微笑投注| 做生意房门挂啥招财| 好用百家乐官网分析软件| 沈阳盛京棋牌官网| 百家乐l23| 木棉百家乐官网的玩法技巧和规则 | 作弊百家乐赌具价格| 百家乐官网双龙出海| 赤水市| 大发888娱乐城.com| 百家乐稳中一注法| 视频百家乐官网赌法| 新葡京官网| 金彩百家乐的玩法技巧和规则 | 德州扑克中文单机版| 百家乐透视牌靴价格| 百家乐官网技巧看| 赌博百家乐官网的路单| 大发888促销活动| 大世界百家乐娱乐平台| 百家乐官网园能贷款吗| 百家乐官网路单免费下载|