一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

DMicro框架的應(yīng)用開發(fā)

電子工程師 ? 來源:OSCHINA 社區(qū) ? 作者:ClownFish ? 2022-08-08 15:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概述

DMicro中的drpc組件的思想是參考erpc實(shí)現(xiàn),甚至可以說是它的繼承者。

drpc組件是DMicro框架的一部分,為了適配DMicro框架,在erpc的基礎(chǔ)上做了深入的擴(kuò)展開發(fā)。

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

DRpc特性列表:

對等通信,對等Api

高性能,非阻塞異步IO

自定義Proto,,兼容http協(xié)議,自定義Codec

Hook點(diǎn),插件系統(tǒng),

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

斷線重連,過載保護(hù),負(fù)載均衡,心跳機(jī)制,

平滑重啟...

DServer特性列表:

快速構(gòu)建,平滑重啟,多進(jìn)程支持,單/多進(jìn)程一致

預(yù)定義命令行,ctrl命令管理服務(wù)

可觀測,可控制,應(yīng)用沙盒

DMicro已經(jīng)內(nèi)置組件:

[x]Registry服務(wù)注冊

[x]Selector服務(wù)發(fā)現(xiàn)

[x]Eventbus事件總線

[x]Supervisor進(jìn)程管理

[ ]Code gen代碼生成

[ ]Tracing鏈路追蹤

[ ]Metrics統(tǒng)計告警

[ ]Broker限流熔斷

[ ]OpenAPI文檔自動生成

架構(gòu)

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

設(shè)計理念

對DMicro框架的設(shè)計,從設(shè)計之初就是在追求靈活性,適應(yīng)性。在保證微服務(wù)的穩(wěn)定性前提下,追求項(xiàng)目的開發(fā)效率。

面向接口設(shè)計,保證代碼穩(wěn)定,提供靈活定制。

抽象各組件的接口,高內(nèi)聚,低耦合。

分層設(shè)計,自上而下逐層封裝,利于穩(wěn)定和維護(hù)。

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

對開發(fā)友好,封裝復(fù)雜度。

提供豐富的組件及功能,讓開發(fā)專注業(yè)務(wù)。

無數(shù)個寫DMicro的日夜,我都謹(jǐn)記開發(fā)三原則:

Clarity(清晰)

Simplicity(簡單)

Productivity(生產(chǎn)力)

無論工作,還是做開源項(xiàng)目,都應(yīng)該保持這三個原則,養(yǎng)成良好的習(xí)慣。

面向接口設(shè)計

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

下圖展示的是消息的發(fā)送的流轉(zhuǎn)流程,可以看到,所有的功能點(diǎn)都被抽象成了接口,每個功能點(diǎn)都提供了不同的實(shí)現(xiàn).

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

會話 Session

大多數(shù)的Rpc框架并不強(qiáng)調(diào)會話 (session) 的概念,因其應(yīng)用場景不需要用到會話 (session). 那么drpc為什么需要抽象出會話 (session) 呢?

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

服務(wù)端需要主動向客戶端發(fā)送消息,并且獲取客戶端的響應(yīng).

服務(wù)端支持對多個客戶端批量發(fā)送消息.

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

獲取會話底層的文件描述符, 對其進(jìn)行性能調(diào)優(yōu).

可以為每個會話綁定特殊的數(shù)據(jù)/屬性.

Session抽象了整個drpc框架的會話,把Socket,Message,Context都融合到一起。開發(fā)者只需要對session進(jìn)行操作,就能實(shí)現(xiàn)大多數(shù)需求.

獲取連接信息

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

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

接收消息

發(fā)送消息

創(chuàng)建消息的上下文

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

斷線重連

主動斷開會話.

健康檢查

獲取連接關(guān)閉事件

為會話設(shè)置單獨(dú)的 id

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

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

BaseSession只有最基礎(chǔ)的方法,用于關(guān)閉連接時候的插件參數(shù).

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

Session全功能的會話對象.

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

消息Message

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

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

Size消息的長度

Transfer-Filter-Pipeline報文數(shù)據(jù)過濾處理管道

Seq序列號

MType消息類型

ServiceMethod資源標(biāo)識符

Meta消息的元數(shù)據(jù)

BodyCodec消息體編碼格式

Body消息體

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

協(xié)議 Proto

協(xié)議是對消息Message對象的序列化和反向序列化,框架提供Proto接口。只需要實(shí)現(xiàn)該接口,開發(fā)者就能定制符合業(yè)務(wù)需求的自定義協(xié)議,從而提升了框架的靈活性.

接口的定義如下:

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

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

Pack對消息Message對象進(jìn)行序列化.

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

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

RAW協(xié)議組成如下:

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

其他協(xié)議可以參考代碼.

編碼 Codec

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

接口的定義如下:

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

ID返回編 Codec 的 id

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

Marshal對消息內(nèi)容進(jìn)行編碼

Unmarshal對消息內(nèi)容進(jìn)行解碼

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

連接 Socket

Socket擴(kuò)展了net.Conn, 并且抽象出接口,方便框架對底層網(wǎng)絡(luò)協(xié)議的集成.

Socket接口實(shí)現(xiàn)了一部分Session接口的功能,Session接口調(diào)用的一些方法,實(shí)際上是轉(zhuǎn)發(fā)調(diào)用了Socket中的方法.

這樣的分層實(shí)現(xiàn),讓Socket擁有的集成其他協(xié)議的能力.

TCP V4,TCP V6

Unix Socket

KCP

QUIC

支持對連接的性能調(diào)優(yōu).

SetKeepAlive開啟鏈接?;?/p>

SetKeepAlivePeriod鏈接?;铋g隔時間

SetReadBuffer設(shè)置鏈接讀緩沖區(qū) size

SetWriteBuffer獲取鏈接寫緩沖區(qū) size

SetNoDelay開啟關(guān)閉 no delay 算法

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

有機(jī)的組合

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

接下來我們要講到實(shí)現(xiàn)這些能力的基礎(chǔ)。插件系統(tǒng).

插件 Plugin

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

什么樣的插件系統(tǒng)才能算是優(yōu)雅呢?我能想到的有以下幾點(diǎn):

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

每個hook位置的入?yún)⒑统鰠⒍际墙?jīng)過精心設(shè)計。

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

設(shè)計的足夠簡潔,優(yōu)雅。能方便的進(jìn)行二次開發(fā)定制。

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

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

通過這些鉤子 Hook點(diǎn),賦予了插件無限可能.

組件

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

服務(wù)端 Rpc Server

客戶端 Rpc Client

服務(wù)注冊 Registry

服務(wù)發(fā)現(xiàn) Selector

事件總線 EventBus

進(jìn)程管理 Supervisor

即將提供:

鏈路追蹤 Tracing

統(tǒng)計告警 Metrics

限流熔斷 Broker.

限于篇幅的原因,具體組件的實(shí)現(xiàn),這里就不深入講解,請關(guān)注后續(xù)的文章.

未來展望

如果把DMicro比作人生,現(xiàn)在成長的階段還處在少年時期,只完成了基礎(chǔ)的架構(gòu)設(shè)計和一部分組件的開發(fā).

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

易用性:

項(xiàng)目效能工具dmctl工具的開發(fā),包括代碼生成,項(xiàng)目結(jié)構(gòu)生成,打包,編譯等等功能.

符合 openapi 定義的文檔組件的開發(fā).

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

可靠性:

可觀測性

鏈路追蹤

指標(biāo)信息

日志流

生產(chǎn)可用

測試用例的完善

代碼覆蓋率

性能調(diào)優(yōu)

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9005

    瀏覽量

    153743
  • 封裝
    +關(guān)注

    關(guān)注

    128

    文章

    8685

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    網(wǎng)關(guān)智商暴增!涂鴉T5AI網(wǎng)關(guān)開發(fā)框架讓設(shè)備秒懂人話,兼容國內(nèi)外頂尖AI大模型

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

    北京迅為RK3568開發(fā)板OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)內(nèi)核HDF驅(qū)動框架架構(gòu)

    北京迅為RK3568開發(fā)板OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)內(nèi)核HDF驅(qū)動框架架構(gòu)
    的頭像 發(fā)表于 03-11 14:13 ?1126次閱讀
    北京迅為RK3568<b class='flag-5'>開發(fā)</b>板OpenHarmony系統(tǒng)南向驅(qū)動<b class='flag-5'>開發(fā)</b>內(nèi)核HDF驅(qū)動<b class='flag-5'>框架</b>架構(gòu)

    涂鴉Wukong AI硬件開發(fā)框架超強(qiáng)兼容DeepSeek等大模型,助你打造爆款A(yù)I硬件

    一、什么是“Wukong”?涂鴉全新推出的“Wukong”AI硬件開發(fā)框架,是為實(shí)現(xiàn)AI硬件領(lǐng)域的商業(yè)化而專門開發(fā)設(shè)計的創(chuàng)新平臺。它基于TuyaOS所構(gòu)建,繼承了諸多優(yōu)勢,如跨平臺兼容性、模塊化
    的頭像 發(fā)表于 02-13 20:58 ?822次閱讀
    涂鴉Wukong AI硬件<b class='flag-5'>開發(fā)</b><b class='flag-5'>框架</b>超強(qiáng)兼容DeepSeek等大模型,助你打造爆款A(yù)I硬件

    熱門前端框架:引領(lǐng)現(xiàn)代 Web 開發(fā)的潮流

    在當(dāng)今快速發(fā)展的前端開發(fā)領(lǐng)域,熱門前端框架如 React、Vue 和 Angular 等,成為了開發(fā)者構(gòu)建高效、高性能 Web 應(yīng)用的得力工具。它們各自具有獨(dú)特的特點(diǎn)和優(yōu)勢,引領(lǐng)著現(xiàn)代 Web
    的頭像 發(fā)表于 01-22 10:08 ?467次閱讀

    AI開發(fā)框架集成介紹

    隨著AI應(yīng)用的廣泛深入,單一框架往往難以滿足多樣化的需求,因此,AI開發(fā)框架的集成成為了提升開發(fā)效率、促進(jìn)技術(shù)創(chuàng)新的關(guān)鍵路徑。以下,是對AI開發(fā)
    的頭像 發(fā)表于 01-07 15:58 ?555次閱讀

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

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

    SSM框架的源碼解析與理解

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

    SSM框架的優(yōu)缺點(diǎn)分析 SSM在移動端開發(fā)中的應(yīng)用

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

    SSM框架在Java開發(fā)中的應(yīng)用 如何使用SSM進(jìn)行web開發(fā)

    SSM框架,即Spring、SpringMVC和MyBatis的整合,是Java Web開發(fā)中常用的技術(shù)棧。它通過分層架構(gòu),實(shí)現(xiàn)了視圖、控制、業(yè)務(wù)邏輯和數(shù)據(jù)訪問的分離,提高了代碼的可維護(hù)性和可擴(kuò)展性
    的頭像 發(fā)表于 12-16 17:28 ?1584次閱讀

    大語言模型開發(fā)框架是什么

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

    HarmonyOS NEXT應(yīng)用元服務(wù)開發(fā)Intents Kit(意圖框架服務(wù))習(xí)慣推薦方案開發(fā)者測試

    意圖框架開發(fā)者提供真機(jī)測試能力,即開發(fā)者可連接設(shè)備進(jìn)行調(diào)測。開發(fā)者完成代碼開發(fā)之后,功能正式上架應(yīng)用市場前,可以在HarmonyOS NE
    發(fā)表于 11-25 17:37

    JavaWeb框架比較

    JavaWeb框架開發(fā)人員提供了構(gòu)建Web應(yīng)用程序所需的基礎(chǔ)設(shè)施和組件,每種框架都有其獨(dú)特的特點(diǎn)和適用場景。以下是對幾種主流JavaWeb框架的比較: Spring MVC 優(yōu)點(diǎn)
    的頭像 發(fā)表于 11-25 09:14 ?688次閱讀

    HarmonyOS NEXT應(yīng)用元服務(wù)開發(fā)Intents Kit(意圖框架服務(wù))事件推薦開發(fā)者測試

    意圖框架開發(fā)者提供真機(jī)測試能力,即開發(fā)者可連接設(shè)備進(jìn)行調(diào)測。開發(fā)者完成代碼開發(fā)之后,功能正式上架應(yīng)用市場前,可以在HarmonyOS NE
    發(fā)表于 11-18 17:39

    HarmonyOS NEXT應(yīng)用元服務(wù)開發(fā)Intents Kit(意圖框架服務(wù))事件推薦方案概述

    一、概述 事件推薦是應(yīng)用/元服務(wù)有新的動態(tài)產(chǎn)生且滿足推薦規(guī)則時給用戶做出的主動推薦。實(shí)現(xiàn)事件推薦需要開發(fā)者將事件信息共享給意圖框架,當(dāng)滿足事件推送規(guī)則時,會在小藝建議入口向指定用戶推薦該事件提醒卡片
    發(fā)表于 11-13 10:38

    HarmonyOS NEXT應(yīng)用元服務(wù)開發(fā)Intents Kit(意圖框架服務(wù))本地搜索方案概述

    一、概述 本地搜索是在HarmonyOS歸一化搜索特性,開發(fā)者將應(yīng)用/元服務(wù)內(nèi)的功能和內(nèi)容通過意圖框架共享到HarmonyOS,即可實(shí)現(xiàn)“一步搜索,內(nèi)容直達(dá)”。 二、典型場景 以“音樂垂域”的“歌曲
    發(fā)表于 11-06 10:59