主頁 > .NET開發 > [開源地址] 放棄Flink,.NET5.0開發CSharpFlink,簡要設計、部署及二次開發說明。

[開源地址] 放棄Flink,.NET5.0開發CSharpFlink,簡要設計、部署及二次開發說明。

2020-11-17 23:31:20 .NET開發

github地址:https://github.com/wxzz/CSharpFlink
gitee地址:https://gitee.com/wxzz/CSharpFlink


 1 概述及背景

      我們有一個全國性質的面向工業的公有云平臺,通過專線或4G的鏈路方式實時向平臺傳輸資料,每天處理1億條左右的資料量,為現場用戶提供實時的在線服務和離線資料分析服務,現在已經上線穩定運行有將近3年的時間,同時也為工業企業提供私有云建設服務,

      我們計劃使用Flink作為云平臺后臺的實時計算部分,基本實作資料點的聚合計算、運算式規則計算等業務,進一步實作機器學習或自定義復雜演算法的需求,

      我們經過將近一年左右時間的研究及開發,已經基本實作了聚合和邏輯等業務,但是感覺Flink比較重,并且應用和運維的水平要求比較高,

      基于上述情況,我們自主使用NET 5.0開發一套CSharpFlink實時計算組件,支持自定義資料源、計算和存盤的基本要求,

2 應用場景

主要面向物聯網、工業互聯網私有云或公有云平臺建設程序中的資料點實時聚合和運算式計算,應用場景包括:

(1)資料點的實時時間視窗范圍內聚合計算,例如:最大值、最小值、平均值、和值、眾數、方差、中位數等,可以自定義二次開發,

(2)資料點的歷史延遲視窗的一段時間范圍內資料補充或更新的重新計算,

(3)資料點的運算式計算,支持自定義C#腳本進行編輯,實時預警或資料深度加工處理,

(4)主從結構的分布式部署,主節點負責計算任務分發,作業節點負責任務計算及結果存盤,

3 框架特點

主要特點主要是根據我們多年的物聯網、工業專案經驗的提煉和總結,滿足實作應用場景,特點包括:

(1)使用最新的NET 5.0進行開發,完全跨平臺,

(2)實時資料視窗范圍外的資料補發或更新的重新計算,例如:當前5秒的實時資料視窗,支持5秒以前的資料補充和更新,并且進行重新計算及更新到資料存盤單元,

(3)實時資料運算式計算支持定時計算或資料值改事件變觸發計算,滿足實時運算式或周期性計算,

(4)C#語言的二次開發,對接多種資料源,自定義算子和多種方式資料存盤等,

(5)單節點或分布式部署,

4  框架結構

框架結構組件的基本示意,如下圖:

 

5  代碼目錄說明

使用VS2019進行工程開發,工程解決方案檔案為:CSharpFlink.sln,代碼目錄說明如下:

(1)Cache:主節點和作業節點計算任務本地快取管理,

(2)Calculate:計算任務輸入、程序、輸出操作及管理,

(3)Channel:主節點和作業節點分布式部署模式的IO通訊操作,

(4)Common:操作公眾類別庫,

(5)Config:全域組態檔操作,

(6)Execution:全域工程的執行環境入口,

(7)Expression:運算式計算任務操作,

(8)Log:日志操作及管理,

(9)Model:資料點元資料資訊,

(10)Node:主節點和作業節點管理,

(11)Protocol:主節點和作業節點之間分布式部署之間互動的協議,

(12)Sink:計算任務計算結果存盤介面,

(13)Source:對接多種資料源介面,例如:mqtt、kafka、rabbitmq、資料庫等,

(14)Task:視窗或表達任務介面,主節點和作業節點任務操作及管理,

(15)Window:資料視窗任務操作,

(16)Worker:作業節點介面,

6  組態檔說明

組態檔默認為:cfg\global.cfg,可以自定義指定組態檔,參見:命令列操作說明,組態檔說明,如下:

 (1)MaxDegreeOfParallelism:任務并行度,主節點生成任務、作業節點處理任務依賴這個引數,

 (2)MasterListenPort:主節點偵聽埠,用于作業節點主動連接,

 (3)MasterIp:主節點IP,用于作業節點主動連接,

 (4)NodeType:節點運行模式,包括:Master、Slave和Both,

 (5)RemoteInvokeInterval:遠程呼叫作業節點間隔時間,單位:毫秒,

 (6)RepeatRemoteInvokeInterval:呼叫作業節點失敗后,重新呼叫作業節點間隔時間,單位:毫秒,

 (7)SlaveExcuteCalculateInterval:作業節點執行計算任務間隔時間,單位:毫秒,

 (8)MaxFrameLength:主節點和作業節點之間傳輸資料最大資料偵,單位:位元組,

 (9)WorkerPower:作業節點能力系數,大于1,會連續發送多個任務,

7  任務部署說明

二次開發參見:二次開發說明,開發好的任務,測驗通過后,把程式集(.dll)復制到“tasks”目錄下,例如工程TestTask專案測驗、編譯通過后,可以部署到“tasks”目錄下,運行“CSharpFlink”主程式會自動加載和呼叫,

可以自定義指定任務程式集,參見:命令列操作說明,

8  命令列操作說明

命令列運行“CSharpFlink”程式,支持自定義指定組態檔或任務程式集,說明如下:

-h         顯示命令列幫助,

-c         加載指定組態檔, 例如:CSharpFlink -c c:/my.cfg

-t         加載任務程式集,     例如:CSharpFlink -t c:/mytask.dll

例如:

dotnet CSharpFlink.dll -c c:/master.cfg -t c:/mytask.dll

 9  部署說明

“release”目錄下是編譯好的程式,把“CSharpFlink v1.0”分別復制到不同的路徑下,分別修改“cfg\global.cfg”組態檔中“NodeType”引數為:Master和Slave,修改主節點程式“tasks\tasks.cfg”檔案中的任務數,分別運行不同目錄下的“dotnet CSharpFlink.dll”,

“TestTask.dll”源代碼,參見:二次開發說明,

10   二次開發說明

二次開發主要針對資料源、計算程序和資料計算結果存盤,大致程序如下:

(1)  資料源對接,可以自定義對接mqtt、kafka、rabbitmq、資料庫等,需要繼承SourceFunction介面,參見:RandomSourceFunction.cs類,

(2)  資料計算程序,可以自定義資料處理或加工,需要繼承Calculate.Calculate介面,參見:聚合計算Avg.cs、運算式計算ExpressionCalculate.cs,通過AddWindowTask或AddExpressionTask函式引數進行實體化,

(3)  資料計算結果存盤,可以自定義存盤任何介質上,需要繼承SinkFunction介面,參見:SinkFunction.cs類,

11   應用事例展示

同一臺電腦,CPU:4核 I5-7400 3.0GHz,記憶體:16G,1個主節點,5個作業節點,生成1000個資料點任務,隨機資料點時間視窗和計算算子,CPU使用率為:20%-30%,記憶體使用率:30%-40%,主節點CPU和記憶體使用情況:3%-5%、100MB-300MB, 作業節點CPU和記憶體使用情況:0.1%-2%、25MB-60MB,運行效果,如下圖:


物聯網&大資料技術 QQ群:54256083

物聯網&大資料合作 QQ群:727664080

網站:http://www.ineuos.net

聯系QQ:504547114

合作微信:wxzz0151

官方博客:https://www.cnblogs.com/lsjwq

iNeuOS工業互聯網作業系統 公眾號

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/222966.html

標籤:.NET技术

上一篇:Winform 進度條彈窗和任務控制

下一篇:Winform 進度條彈窗和任務控制

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more