主頁 > .NET開發 > 低代碼平臺--基于surging開發微服務編排流程引擎構思

低代碼平臺--基于surging開發微服務編排流程引擎構思

2021-06-09 14:39:56 .NET開發

前言

 微服務對于各位并不陌生,在互聯網浪潮下不是在學習微服務的路上,就是在使用改造的路上,每個人對于微服務都有自己理解,有用k8s 就說自己是微服務,有用一些第三方框架spring cloud, dubbo ,abp, nginx,kong就說是微服務的,還有用一些第三放分布式平臺去架設部署也認為它是微服務,反正微服務的架設是各種各樣,沒有定義哪個架構是對的,只要是集大成者,全部用docker, 滿足服務發現,服務治理就是微服務,而對于以上架構選擇不去評判是對是錯,沒有一桿稱砣去評判是否滿足微服務思想架構,所以這種口伐筆誅是沒有意義,那么現在淺談一下對于微服務中微是如何理解,如何架構實作,

    而對于微服務,微服務一詞中的前綴"微"是一個隱含體系結構最佳實踐,讓服務在設計階段保持簡單、傻瓜式,雖然傳統上微服務僅應用于架構,但它也開始與日常中所說的服務、webapi等進行替換,

    "微"是一個重要的提示詞,它可以消除企業對系統過渡復雜化的架構,如果你去拆解數年業務系統,然而可以將一個大功能分解為許多小的功能模塊服務,從而提供微服務給其它服務終端呼叫,

      而每個微服務都能成為模塊功能或者是API.通過微服務集成,可以輕松實作復雜的集成方案,例如,物聯網的設備多終端互動,流媒體的多終端推流訂閱播放,支付成功多終端訊息推送,對于這些都可以分解為獨立的微服務進行呼叫集成,如果不能滿足業務需要,不能擴展實作的,只能說你只是對于現有的服務演變升級為分布式服務治理,并不是微服務,因為你還停留在以往需要找尋第三框架,工具去實作,這樣還是造成架構臃腫,

  而對于業務會有源源不斷的需求需要實作,對于這種需求的情況下不可能重復去實作微服務,而我們要做的是對于現有的微服務進行聚合,形成新的服務以提供給其它服務終端進行呼叫,而surging 現有的做法是通過在服務代碼中遠程呼叫微服務資料整合的方式去實作服務聚合,這種方式有一種弊端,需要投入大量的人力去架構維護,并不能滿足大型系統架構需要,那么怎么去解決這個難題呢?首先就需要通過現有的微服務進行流程化服務編排,以便實作新的業務服務,那么我們可以通過這篇文章來淺談一下微服務編排,后面surging 將如何實作,

什么是微服務編排?

微服務編排是指把已經開發好的微服務按照一定的業務流程進行可視化編排的程序,微服務編排引擎會在內部重新聚合為一個新的服務進行發布,而這個服務我們稱為聚合服務

通過微服務編排引擎可以把已經開發好的微服務無需任何代碼就可以進行業務邏輯的重組與重構,可以提升微服務的復用效率實作前臺業務或業務系統集成的的敏捷交付,通過微服務編排引擎也能把業務系統、資料、業務邏輯進行解藕,業務邏輯的編排交由專門的微服務編排引擎完成,而微服務只需要專注完成自已內部邏輯即可,


 

為什么需要微服務編排引擎

 試想一下當你在沒有微服務編排引擎,在已經完成微服務拆分的情況下,第三方合作商或者移動端要求你增加邏輯處理服務呼叫,你該怎樣去實作,重新研發擴展微服務?如果是這樣的話,整個系統的微服務將比較臃腫,而且違反了單一職責,完全作為獨立的業務服務存在,

那么微服務編排引擎可以進行可視化的業務流程編排來降低這些重復沒有技術含量的作業、提升服務呼叫邏輯的可視化,
 

 

微服務編排流程的思路

通過微服務rpc,提供的routepath,引數模型和結果模型,再通過流程編排這些微服務來實作一個新的聚合服務,

編排流程的模型
  • 服務節點模型,例如(引數賦值、invoke(遠程呼叫和本地呼叫))
  • 控制模型,例如(順序、分支、回圈、例外拋出、并行)

 微服務編排框架提供了很多的服務節點模型基礎化設定,比如編排框架引擎可以支持本地呼叫、遠程RPC呼叫、協議轉化其它第三方服務呼叫等服務節點,從而在使用上更加的方便,有了這些基本的模型,我們就能方便的編排出復雜的聚合服務

 基于surging 如何研發微服務編排流程引擎

首先現在只是對于需要實作服務編排流程引擎的構思,那么我們從二個方面著手

  • 可視化流程編排:對于服務節點,控制模型的屬性和規則進行可視化設定
  • 服務編排引擎的邏輯處理:需要對于業務流程,服務節點邏輯處理呼叫,配置處理回傳結果,

那么針對于微服務之間怎么樣順序,分支呼叫處理呢?我們可以抽象出需要呼叫的模型

比如每個服務節點都可以以routepath 作為呼叫標識,然后可以設計輸入引數和輸出引數, 輸入引數是通過網關呼叫傳入的json 型別的httpbody ,再通過httpbody 可以轉為字典引數模型,就比如以下操作

可以舉例通過網關傳入以下引數:

{

  “name”:"fanly",

  "age":36,

  "sex":1

}

 

那么我們在服務節點如何設定輸入引數呢? 比如需要傳入的是name,那么我們可以通過以下設定

 

"inputParameters": {
    "name": "${input.name}"
  }

 

那么我們怎么樣去設定輸出引數呢?比如我們需要獲取服務節點名稱為node1 的結果,那么我們可以通過以下進行設定
"outputParameters": {
"result": "${node1.output.entity}"
}

 

 
通過以上我們就可以這樣定義業務流程的json
{
"name": "workflow_name",
"description": "測驗",
"version": 1,
"services": [
{
  "name": "node1",
  "routepath": "api/user/getuser",
  "inputParameters": {
    "name": "${input.name}", 
  },
  "type": "microservice",
  "metadata":{}
},
{}
...
],
"outputParameters": {
"result": "${node1.output.entity}"
}
}

 而對于以上闡述,如何抽象資料模型來滿足流程化呼叫,而對于surging 是可以通過routepath呼叫的,所以配置routepath,輸入,輸出引數完全是可以實作微服務呼叫,就比如可以通過以下代碼routepath方式進行呼叫

      Dictionary<string, object> model = new Dictionary<string, object>();
            model.Add("username","name");
            string path = "api/user/getuser";
            string serviceKey = "User";

            var userProxy = ServiceLocator.GetService<IServiceProxyProvider>().Invoke<object>(model, path, serviceKey);
            var s = userProxy.Result;

 

總結

以上是對于低代碼平臺微服務編排流程引擎構思,后續會陸續實作,現在surging 能支持服務發現,服務治理,多協議擴展,快取中間件,訊息中間件,掃描引擎,并且還支持多語言版本(現支持java 和.net core 兩個版本)完全可以滿足企業多語言混合異構開發,后面會陸續開源至https://github.com/microsurging ,建立surging 微服務引擎低代碼平臺

 


 

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

標籤:.NET Core

上一篇:.NetCore 訊息佇列的使用

下一篇:.Net Core with 微服務 - 架構圖

標籤雲
其他(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