国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    9520

    瀏覽量

    157036
  • 封裝
    +關注

    關注

    128

    文章

    9249

    瀏覽量

    148626
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    從網絡接口到 DMA,一套面向工程師的 FPGA 網絡開發框架

    快速開發 FPGA 加速網絡應用的開源框架,是連接?高速網絡接口、FPGA 邏輯與主機處理器?的工程級利器。 什么是 Liberouter NDK? NDK 全稱 Network
    的頭像 發表于 02-12 11:28 ?314次閱讀
    從網絡接口到 DMA,一套面向工程師的 FPGA 網絡<b class='flag-5'>開發</b><b class='flag-5'>框架</b>

    LuatOS框架的使用(上)

    在資源受限的物聯網終端設備中,如何實現快速開發與穩定運行是關鍵挑戰。LuatOS框架通過將Lua語言與底層硬件抽象層深度融合,提供了一套簡潔高效的開發范式。本文將圍繞LuatOS框架
    的頭像 發表于 01-27 19:38 ?158次閱讀
    LuatOS<b class='flag-5'>框架</b>的使用(上)

    開源鴻蒙技術大會2025丨跨平臺開發框架分論壇:共拓移動開發新邊界,共創跨平臺生態新時代

    隨著開源鴻蒙生態的持續壯大,開發者迎來了除Android與iOS之外的“第三種選擇”。為解決“加入一個新生態就會增加一倍投入”的行業痛點,讓開發者的代碼能夠在更多平臺上復用,開源鴻蒙跨平臺框架PMC
    的頭像 發表于 11-20 17:31 ?977次閱讀
    開源鴻蒙技術大會2025丨跨平臺<b class='flag-5'>開發</b><b class='flag-5'>框架</b>分論壇:共拓移動<b class='flag-5'>開發</b>新邊界,共創跨平臺生態新時代

    NVIDIA助力新一代機器人開發開源框架

    今年的 ROSCon 在新加坡舉辦,并于 10 月 29 日順利閉幕。大會吸引了全球機器人操作系統(ROS)領域開發者的關注。ROS 是目前全球應用最廣泛的機器人開發開源框架
    的頭像 發表于 11-06 11:55 ?1002次閱讀

    PYQT 應用程序框架開發工具

    大家好,本團隊此次分享的內容為開發過程中使用到的PYQT 應用程序框架開發工具。 pYqt 是一個多平臺的 python 圖形用戶界面應用程序框架,由于其面向對象、 易擴展(可
    發表于 10-29 07:15

    嵌入式開發新選擇:LuatOS腳本框架入門教程

    LuatOS正成為嵌入式開發的新趨勢!本教程帶你從基礎入手,全面了解其基于Lua的腳本開發模式與輕量級運行框架。 一、LuatOS 編程起步 1.1 底層固件怎么啟動 LuatOS 腳本
    的頭像 發表于 09-26 17:34 ?590次閱讀
    嵌入式<b class='flag-5'>開發</b>新選擇:LuatOS腳本<b class='flag-5'>框架</b>入門教程

    請問STM32如何移植Audio框架

    最近在學習音頻解碼,想用一下Audio框架。 1、這個該如何移植到自己創建的BSP并對接到device框架中?看了官方移植文檔沒有對沒有對該部分的描述。 2、我只想實現一個簡單的播放功能,只用一個DAC芯片(比如CS4344)是否就能達到我的需求?
    發表于 09-25 07:17

    知乎開源“智能預渲染框架” 幾行代碼實現鴻蒙應用頁面“秒開”

    近日,知乎在Gitee平臺開源了其自研的鴻蒙“智能預渲染框架”,并將該框架的Har包上架到OpenHarmony三方庫中心倉。該框架在鴻蒙平臺首創“智能預渲染”技術,旨在破解應用復雜頁面加載緩慢
    的頭像 發表于 08-29 14:32 ?627次閱讀
    知乎開源“智能預渲染<b class='flag-5'>框架</b>” 幾行代碼實現鴻蒙應用頁面“秒開”

    HarmonyOS NEXT意圖框架習慣推薦一場景說明

    一、概述 意圖框架是HarmonyOS系統級的意圖標準體系。將應用和元服務的業務功能智慧分發給不同的系統入口,以“音樂播放”為例,HarmonyOS將業務分發給“小藝建議”,提供了桌面大流量曝光
    發表于 06-18 15:06

    ArkUI-X框架LogInterface使用指南

    WARN/INFO/DEBUG),存在應用崩潰的風險。 注意:開發者使用時注冊,必須位于調用MyApplication超類的onCreate()方法之后 設置ArkUI-X框架
    發表于 06-15 23:20

    網關智商暴增!涂鴉T5AI網關開發框架讓設備秒懂人話,兼容國內外頂尖AI大模型

    2025年2月,涂鴉全新發布WuKongAI硬件開發框架(點擊查看WuKongAI硬件開發框架往期介紹),為廣大智能設備和AI玩具開發者提供
    的頭像 發表于 05-22 18:30 ?1312次閱讀
    網關智商暴增!涂鴉T5AI網關<b class='flag-5'>開發</b><b class='flag-5'>框架</b>讓設備秒懂人話,兼容國內外頂尖AI大模型

    KaihongOS筆記本電腦開發實戰第九節:全功能TypeC驅動框架適配

    《手把手教你做PC》系列直播課再度開播 !《 KaihongOS筆記本電腦開發實戰第九節九:全功能TypeC驅動框架適配》將于5月21日19:00開播 ↑掃碼入群,領課程講義資料包↑ 深開鴻資深
    發表于 05-19 18:29

    百度飛槳框架3.0正式版發布

    、推理等任務都離不開深度學習框架的優化與支撐。 飛槳框架3.0,從設計理念上實現了從底層硬件適配到頂層開發體驗的全面進化,在訓練效率、性能、兼容性等關鍵指標上建立了新標桿。 其中, “動靜統一自動并行”、“大模型訓推一體”、“科
    的頭像 發表于 04-02 19:03 ?1196次閱讀
    百度飛槳<b class='flag-5'>框架</b>3.0正式版發布

    STM32如何移植Audio框架

    最近在學習音頻解碼,想用一下Audio框架。 1、這個該如何移植到自己創建的BSP并對接到device框架中?看了官方移植文檔沒有對沒有對該部分的描述。 2、我只想實現一個簡單的播放功能,只用一個DAC芯片(比如CS4344)是否就能達到我的需求?
    發表于 04-01 08:08

    北京迅為RK3568開發板OpenHarmony系統南向驅動開發內核HDF驅動框架架構

    北京迅為RK3568開發板OpenHarmony系統南向驅動開發內核HDF驅動框架架構
    的頭像 發表于 03-11 14:13 ?1853次閱讀
    北京迅為RK3568<b class='flag-5'>開發</b>板OpenHarmony系統南向驅動<b class='flag-5'>開發</b>內核HDF驅動<b class='flag-5'>框架</b>架構