日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

概述

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

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

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

DRpc特性列表:

對(duì)等通信,對(duì)等Api

高性能,非阻塞異步IO

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

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

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

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

平滑重啟...

DServer特性列表:

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

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

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

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

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

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

[x]Eventbus事件總線

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

[ ]Code gen代碼生成

[ ]Tracing鏈路追蹤

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

[ ]Broker限流熔斷

[ ]OpenAPI文檔自動(dòng)生成

架構(gòu)

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

設(shè)計(jì)理念

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

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

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

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

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

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

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

無(wú)數(shù)個(gè)寫(xiě)DMicro的日夜,我都謹(jǐn)記開(kāi)發(fā)三原則:

Clarity(清晰)

Simplicity(簡(jiǎn)單)

Productivity(生產(chǎn)力)

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

面向接口設(shè)計(jì)

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

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

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

會(huì)話 Session

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

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

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

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

異步主動(dòng)斷開(kāi)一個(gè)或多個(gè)會(huì)話.

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

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

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

獲取連接信息

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

控制單次請(qǐng)求的生命周期 (超時(shí)時(shí)間)

接收消息

發(fā)送消息

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

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

斷線重連

主動(dòng)斷開(kāi)會(huì)話.

健康檢查

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

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

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

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

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

CtxSession在處理程序上下文中傳遞的會(huì)話對(duì)象.

Session全功能的會(huì)話對(duì)象.

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

消息Message

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

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

Size消息的長(zhǎng)度

Transfer-Filter-Pipeline報(bào)文數(shù)據(jù)過(guò)濾處理管道

Seq序列號(hào)

MType消息類(lèi)型

ServiceMethod資源標(biāo)識(shí)符

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

BodyCodec消息體編碼格式

Body消息體

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

協(xié)議 Proto

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

接口的定義如下:

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

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

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

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

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

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

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

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

編碼 Codec

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

接口的定義如下:

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

ID返回編 Codec 的 id

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

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

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

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

連接 Socket

Socket擴(kuò)展了net.Conn, 并且抽象出接口,方便框架對(duì)底層網(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

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

SetKeepAlive開(kāi)啟鏈接?;?/p>

SetKeepAlivePeriod鏈接保活間隔時(shí)間

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

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

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

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

有機(jī)的組合

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

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

插件 Plugin

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

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

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

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

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

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

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

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

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

組件

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

服務(wù)端 Rpc Server

客戶端 Rpc Client

服務(wù)注冊(cè) Registry

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

事件總線 EventBus

進(jìn)程管理 Supervisor

即將提供:

鏈路追蹤 Tracing

統(tǒng)計(jì)告警 Metrics

限流熔斷 Broker.

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

未來(lái)展望

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

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

易用性:

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

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

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

可靠性:

可觀測(cè)性

鏈路追蹤

指標(biāo)信息

日志流

生產(chǎn)可用

測(cè)試用例的完善

代碼覆蓋率

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

審核編輯:郭婷

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

    關(guān)注

    33

    文章

    9603

    瀏覽量

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

    關(guān)注

    128

    文章

    9339

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    Labview的DQMH框架數(shù)據(jù)傳輸

    Labview開(kāi)發(fā)過(guò)程中,DQMH框架兩個(gè)采集模塊之間,怎么傳遞數(shù)據(jù)好一些呢?搞個(gè)fgv,簇里面包含著兩個(gè)簇、分別對(duì)應(yīng)兩個(gè)模塊數(shù)據(jù)。兩個(gè)地方同時(shí)寫(xiě)入,應(yīng)該沒(méi)啥問(wèn)題吧
    發(fā)表于 05-04 19:24

    FBX/glTF 模型渲染與動(dòng)畫(huà)技術(shù)解析 | 圖撲 HT 框架

    Web 3D 渲染框架, 為 FBX/glTF 模型的骨骼動(dòng)畫(huà)、材質(zhì)切換及自定義 Shader 開(kāi)發(fā)提供完善支持 ,可大幅降低開(kāi)發(fā)門(mén)檻,提升 3D 應(yīng)用的開(kāi)發(fā)效率與視覺(jué)呈現(xiàn)質(zhì)量。 F
    的頭像 發(fā)表于 04-21 11:31 ?92次閱讀
    FBX/glTF 模型渲染與動(dòng)畫(huà)技術(shù)解析 | 圖撲 HT <b class='flag-5'>框架</b>

    從網(wǎng)絡(luò)接口到 DMA,一套面向工程師的 FPGA 網(wǎng)絡(luò)開(kāi)發(fā)框架

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

    LuatOS框架的使用(上)

    在資源受限的物聯(lián)網(wǎng)終端設(shè)備中,如何實(shí)現(xiàn)快速開(kāi)發(fā)與穩(wěn)定運(yùn)行是關(guān)鍵挑戰(zhàn)。LuatOS框架通過(guò)將Lua語(yǔ)言與底層硬件抽象層深度融合,提供了一套簡(jiǎn)潔高效的開(kāi)發(fā)范式。本文將圍繞LuatOS框架
    的頭像 發(fā)表于 01-27 19:38 ?401次閱讀
    LuatOS<b class='flag-5'>框架</b>的使用(上)

    恩智浦推出全新eIQ Agentic AI框架

    恩智浦半導(dǎo)體宣布推出全新eIQ Agentic AI框架,進(jìn)一步鞏固其在安全實(shí)時(shí)邊緣AI領(lǐng)域的領(lǐng)導(dǎo)地位。該工具支持在邊緣設(shè)備上直接實(shí)現(xiàn)自主智能體功能,助力資深與新手設(shè)備開(kāi)發(fā)人員簡(jiǎn)化并加速智能體AI
    的頭像 發(fā)表于 01-13 11:15 ?1595次閱讀

    開(kāi)源鴻蒙技術(shù)大會(huì)2025丨跨平臺(tái)開(kāi)發(fā)框架分論壇:共拓移動(dòng)開(kāi)發(fā)新邊界,共創(chuàng)跨平臺(tái)生態(tài)新時(shí)代

    隨著開(kāi)源鴻蒙生態(tài)的持續(xù)壯大,開(kāi)發(fā)者迎來(lái)了除Android與iOS之外的“第三種選擇”。為解決“加入一個(gè)新生態(tài)就會(huì)增加一倍投入”的行業(yè)痛點(diǎn),讓開(kāi)發(fā)者的代碼能夠在更多平臺(tái)上復(fù)用,開(kāi)源鴻蒙跨平臺(tái)框架PMC
    的頭像 發(fā)表于 11-20 17:31 ?1207次閱讀
    開(kāi)源鴻蒙技術(shù)大會(huì)2025丨跨平臺(tái)<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>框架</b>分論壇:共拓移動(dòng)<b class='flag-5'>開(kāi)發(fā)</b>新邊界,共創(chuàng)跨平臺(tái)生態(tài)新時(shí)代

    NVIDIA助力新一代機(jī)器人開(kāi)發(fā)開(kāi)源框架

    今年的 ROSCon 在新加坡舉辦,并于 10 月 29 日順利閉幕。大會(huì)吸引了全球機(jī)器人操作系統(tǒng)(ROS)領(lǐng)域開(kāi)發(fā)者的關(guān)注。ROS 是目前全球應(yīng)用最廣泛的機(jī)器人開(kāi)發(fā)開(kāi)源框架
    的頭像 發(fā)表于 11-06 11:55 ?1257次閱讀

    PYQT 應(yīng)用程序框架開(kāi)發(fā)工具

    大家好,本團(tuán)隊(duì)此次分享的內(nèi)容為開(kāi)發(fā)過(guò)程中使用到的PYQT 應(yīng)用程序框架開(kāi)發(fā)工具。 pYqt 是一個(gè)多平臺(tái)的 python 圖形用戶界面應(yīng)用程序框架,由于其面向?qū)ο蟆? 易擴(kuò)展(可
    發(fā)表于 10-29 07:15

    嵌入式開(kāi)發(fā)新選擇:LuatOS腳本框架入門(mén)教程

    LuatOS正成為嵌入式開(kāi)發(fā)的新趨勢(shì)!本教程帶你從基礎(chǔ)入手,全面了解其基于Lua的腳本開(kāi)發(fā)模式與輕量級(jí)運(yùn)行框架。 一、LuatOS 編程起步 1.1 底層固件怎么啟動(dòng) LuatOS 腳本
    的頭像 發(fā)表于 09-26 17:34 ?778次閱讀
    嵌入式<b class='flag-5'>開(kāi)發(fā)</b>新選擇:LuatOS腳本<b class='flag-5'>框架</b>入門(mén)教程

    請(qǐng)問(wèn)STM32如何移植Audio框架

    最近在學(xué)習(xí)音頻解碼,想用一下Audio框架。 1、這個(gè)該如何移植到自己創(chuàng)建的BSP并對(duì)接到device框架中?看了官方移植文檔沒(méi)有對(duì)沒(méi)有對(duì)該部分的描述。 2、我只想實(shí)現(xiàn)一個(gè)簡(jiǎn)單的播放功能,只用一個(gè)DAC芯片(比如CS4344)是否就能達(dá)到我的需求?
    發(fā)表于 09-25 07:17

    知乎開(kāi)源“智能預(yù)渲染框架” 幾行代碼實(shí)現(xiàn)鴻蒙應(yīng)用頁(yè)面“秒開(kāi)”

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

    HarmonyOS NEXT意圖框架習(xí)慣推薦一場(chǎng)景說(shuō)明

    一、概述 意圖框架是HarmonyOS系統(tǒng)級(jí)的意圖標(biāo)準(zhǔn)體系。將應(yīng)用和元服務(wù)的業(yè)務(wù)功能智慧分發(fā)給不同的系統(tǒng)入口,以“音樂(lè)播放”為例,HarmonyOS將業(yè)務(wù)分發(fā)給“小藝建議”,提供了桌面大流量曝光
    發(fā)表于 06-18 15:06

    ArkUI-X框架LogInterface使用指南

    WARN/INFO/DEBUG),存在應(yīng)用崩潰的風(fēng)險(xiǎn)。 注意:開(kāi)發(fā)者使用時(shí)注冊(cè),必須位于調(diào)用MyApplication超類(lèi)的onCreate()方法之后 設(shè)置ArkUI-X框架
    發(fā)表于 06-15 23:20

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

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

    KaihongOS筆記本電腦開(kāi)發(fā)實(shí)戰(zhàn)第九節(jié):全功能TypeC驅(qū)動(dòng)框架適配

    《手把手教你做PC》系列直播課再度開(kāi)播 !《 KaihongOS筆記本電腦開(kāi)發(fā)實(shí)戰(zhàn)第九節(jié)九:全功能TypeC驅(qū)動(dòng)框架適配》將于5月21日19:00開(kāi)播 ↑掃碼入群,領(lǐng)課程講義資料包↑ 深開(kāi)鴻資深
    發(fā)表于 05-19 18:29
    大冶市| 维西| 晋城| 大埔区| 会泽县| 常宁市| 丘北县| 东丽区| 丽水市| 沿河| 宜兰市| 溧阳市| 霍山县| 罗江县| 平果县| 灵璧县| 台山市| 西盟| 洛宁县| 镇原县| 天台县| 黄大仙区| 绥德县| 新绛县| 上犹县| 太原市| 洛阳市| 宁乡县| 苏尼特左旗| 济源市| 广东省| 肃南| 冀州市| 卫辉市| 武宁县| 吕梁市| 静宁县| 平舆县| 三都| 鄢陵县| 米林县|