surging 微服務引擎 2.0 會有多少驚喜?

来源:https://www.cnblogs.com/fanliang11/archive/2019/07/01/11109364.html
-Advertisement-
Play Games

surging 微服務引擎從2017年6月至今已經有兩年的時間,這兩年時間有多家公司使用surging 服務引擎,並且有公司搭建了CI/CD,並且使用了k8s 集群,這裡我可以說下幾家公司的服務搭建情況,公司名不便透露,我們就以字母標識 A公司:40多個服務提供者,一個服務提供者擴展了四五個實例節點 ...


     surging 微服務引擎從2017年6月至今已經有兩年的時間,這兩年時間有多家公司使用surging 服務引擎,並且有公司搭建了CI/CD,並且使用了k8s 集群,這裡我可以說下幾家公司的服務搭建情況,公司名不便透露,我們就以字母標識

A公司:40多個服務提供者,一個服務提供者擴展了四五個實例節點,只使用了3台伺服器,並且搭建了CI/CD, k8s 集群,使用suring 構建航空行業信息化系統

B公司:房產系統,門店2300多家,峰值線上使用人數1700,平均保持在1200人左右,有21個服務提供者,每個服務提供者有70-80個服務,使用了三台伺服器,部署在linux環境,並且使用docker, 資料庫使用sql server 2017,運行了1年,產生的數據已經超過1億

C公司:業務中台,服務2000多個,移動端和web端都已經上線,至今沒產生什麼問題,反應挺穩定

D公司:物聯網,服務提供者1個,伺服器1台8核支持了3.5W+, 部署在window 環境

....

以上是瞭解比較詳細的一些數據,還有很多公司都採用了surging,還有一些公司採用surging 做二次開發,有了這些市場的證明,說明surging 作為服務引擎是及格的,可為各行業公司快速研發投入市場提供了可靠的解決方案。

那談了這麼多surging又是怎麼樣定義微服務這個邊界的?

微服務應該是粒度最小的功能業務模塊,針對於行業解決方案,集成相應的service host,而針對於業務需要一些中間件來輔助,比如緩存中間件,eventbus中間件(消息中間件),數據儲存中間件,而各個服務又可以互相通過rpc進行可靠性通信。

以下是surging 服務引擎的調用鏈

 

 

 

 從以上調用可以看出surging 可以支持多行業的解決方案,通過協議Mqtt、ws、http服務主機生成服務提供者,  在服務啟動的時候服務A、服務B、服務C、服務D的ServiceRoute 會註冊到註冊中心,而A,B,C,D如果不是部署在同一個服務提供者中就需要通過RPC進行通信,而RPC提供了服務發現 和服務治理功能從而保證了通信之間,可靠性,可用性和可擴展性。

 

那麼新版本surging 又有多少新的功能,多少驚喜呢?

1.靈活配置RoutePath

針對於RoutePath做了一次優化,可以通過ServiceBundle設置RoutePath, 也可以通過 ServiceRoute進行設置,具體參考以下代碼

 

    [ServiceBundle("api/{Service}")]
    //[ServiceBundle("api/{Service}/{Method}")]
    //[ServiceBundle("api/{Service}/{Method}/test")]
    //[ServiceBundle("api/{Service}/{Method}/test",false)]
    public interface IUserService: IServiceKey
    {

        /// <summary>
        /// 獲取用戶姓名
        /// </summary>
        /// <param name="id">用戶編號</param>
        /// <returns></returns>
        [ServiceRoute("{id}")]  //[ServiceRoute("{參數名}")] 
        Task<string> GetUserName(int id);
    }

 

通過以上設置,GetUserName 生成的routepath是/api/user/getusername/{id}, 然後我們可以通過引用swagger組件來測試服務是否調用成功,具體效果如下

 

或者也可以用postman進行訪問,具體效果如下圖

2.擴展Dns 協議服務主機

 因dotnetty沒有dns 組件,擴展了基於dotnetty 的dns 編解碼,支持tcp,udp協議, 但僅支持PTR、OPT記錄類型。

引擎擴展了Dns 協議服務主機組件,包含了以下功能

1、Domain Name 解析
2、支持模塊化Domain Name 解析自定義擴展
3.、支持引擎模塊的集群化功能變數名稱解析

那麼我們可以按照以下方式把dns 集成到引擎中

1、需要通過nuget包引用Surging.Core.DNS或者通過指定目錄Components進行掃描裝載,再通過以下配置RootDnsAddress

  "Dns": {
    "RootDnsAddress": "192.168.1.1",
    "QueryTimeout": 1000
  }

 2. dns服務介面,需要繼承IServiceKey

   [ServiceBundle("Dns/{Service}")]
     public interface IDnsService : IServiceKey
    {
    }

 3. dns業務模塊需要繼承DnsBehavior,dns 服務主機才能進行載入

    public class DnsService : DnsBehavior, IDnsService
    {
        public override Task<IPAddress> Resolve(string domainName)
        {
            if(domainName=="localhost")
            {
                return Task.FromResult<IPAddress>(IPAddress.Parse("127.0.0.1"));
            }
            return Task.FromResult<IPAddress>(null);
        }
    }

然後通用以上配置,然後指向部署的DNS服務主機地址,解析功能變數名稱規則為 首碼.(XX.XX.XX).尾碼, 首碼會解析為key,以結合基於key做哈希一致性負載演算法, (XX.XX.XX)會解析成routepath, 尾碼不解析可以隨便取名。以下是通過nslookup命令進行測試

 3.擴展Udp 協議服務主機

需要按照以下方式把Udp集成到引擎中

1、需要通過nuget包引用Surging.Core.Protocol.Udp或者通過指定目錄Components進行掃描裝載,再通過以下代碼編寫Udp Service

配置udp埠

{  
"Surging": {
    "Ports": {
      "HttpPort": "${HttpPort}|280",
      "WSPort": "${WSPort}|96",
      "MQTTPort": "${MQTTPort}|97",
      "UdpPort": "${UdpPort}|95"
    }
  }
}

udp服務介面,需要繼承IServiceKey

    [ServiceBundle("Udp/{Service}")]
    public interface IUdpService : IServiceKey
    {
    }

udp業務模塊需要繼承UdpBehavior,udp服務主機才能進行載入

    public class UdpService : UdpBehavior, IDnsService
    {
        public override async Task<bool> Dispatch(IEnumerable<byte> bytes)
        {
            await this.GetService<IMediaService>().Push(bytes);
            return await Task.FromResult(true);
        }

        public override Task<bool> Dispatch(object message)
        {
            return Task.FromResult(true);
        }
    }

通過以上代碼,可以通過ffmpeg推流到Udp,再通過udp 推流MPEG-TS 格式分發到ws 服務,再通過http://127.0.0.1:280/JSMpeg.html查看ws 推送的共用桌面

以下是推送的高清視頻,有可能是播放器緩衝的問題,推送的視頻流解析的不是很清楚

 4.擴展基於netty 的ws 協議服務主機

引擎擴展了netty 的ws協議服務主機組件,包含了以下功能

1.支持基於webscoket 的Open、Error、nMessage、Close方法的封裝

2.支持消息的發送和廣播

需要按照以下方式把Udp集成到引擎中

1、需要通過nuget包引用Surging.Core.Protocol.Udp或者通過指定目錄Components進行掃描裝載,再通過以下代碼編寫Udp Service

配置ws埠

 

{  
"Surging": {
    "Ports": {
      "HttpPort": "${HttpPort}|280",
      "WSPort": "${WSPort}|96",
      "MQTTPort": "${MQTTPort}|97",
      "UdpPort": "${UdpPort}|95"
    }
  }
}

 ws服務介面,需要繼承IServiceKey

 

    [ServiceBundle("Api/{Service}")]
    [BehaviorContract(Protocol = "media")]
    public interface IMediaService : IServiceKey
    { 
        Task Push(IEnumerable<byte> data);
    }

 

ws業務模塊需要繼承WSBehavior,ws服務主機才能進行載入

 

    public class MediaService : WSBehavior, IMediaService
    {
        public   Task Push(IEnumerable<byte> data)
        {
              this..Broadcast(data.ToArray());
              return Task.CompletedTask;
        }
    }

 

5. 多註冊中心集群支持

可以通過設置多註冊中心進行服務註冊,配有健康檢查和負載均衡,註冊中心地址以,隔開,具體按照以下進行配置

  "Consul": {
    "ConnectionString": "${Register_Conn}|127.0.0.1:8500,127.0.0.1:9500", // "127.0.0.1:8500,127.0.0.1:9500",
    "SessionTimeout": "${Register_SessionTimeout}|50",
    "RoutePath": "${Register_RoutePath}",
    "ReloadOnChange": true,
    "EnableChildrenMonitor": false
  }

 

以下是通過網關的管理界面配置
  "Register": {
    "Provider": "Consul",
    "Address": "${Register_Conn}|127.0.0.1:8500,127.0.0.1:9500"
  }

以下查看以下界面,就說明配置成功

6,擴展支持ABP 組件

 ABP 組件在.NET使用者還是比較多,ABP是一套業務封裝快速開發框架,大多數使用者都是使用abp 架設單體應用和垂直應用SOA服務,那麼使用微服務,必然需要用到ABP的組件,那麼對於一些組件可以集成到surging 引擎中來,

其中通過引入Surging.Core.Abp組件,就能裝載ABP組件。那麼有多少ABP組件可以引入到引擎,這個等後面的章節會講到。

7.  擴展關卡組件

surging 外層只能通過網關進行訪問,這樣破壞了組件引擎化思想,後面會考慮擴展關卡組件,以代替網關的路由轉發、鑒權,具體設想會有以下功能

1. 支持AppSecret,能支持第三方調用

2.支持jwt來實現鑒權功能

3. 通過業務模塊生成服務聚合服務提供者,服務聚合無需註冊到註冊中心

4.支持SSL配置

8. 擴展支持Reactive Extensions(Rx)響應式編程

 計劃是surging 能支持響應式編程,擴展支持Reactive Extensions, 具體實現哪些功能,還需要考慮

總結

針對.NET還有很多很多人對於微服務這個概念模擬兩可,很多人分不清微服務的邊界,那麼對於這種情況,你們可以花點時間研究下surging 或者看下其它語言是如何定義這個邊界的,也希望.NET同僚們能分清正確的微服務系統的架設,也希望.NET 在微服務迎頭趕上,能給公司帶來一套穩定高效的解決方案。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Day1 1.電腦基礎 1. 什麼是電腦 輸入輸出設備 CPU(中央處理器):處理各種數據,相當於人的大腦 記憶體:存儲數據,相當於人的臨時記憶 硬碟:存儲數據,相當於人的永久記憶 2. 什麼是操作系統 控制電腦硬體工作的流程 軟體 3. 什麼是應用程式 安裝在操作系統之上的軟體 2.Pytho ...
  • [TOC] 一、源碼下載 Qt庫封裝了很多很控制項,種類也比較多,其中容器控制項包括:表格、樹和列表。 使用過QtDesigner的同學應該都知道,這個工具中有一個屬性編輯器,是一個表格樹控制項,就像vs中控制項屬性面板一樣。 今天我們就來介紹一款使用QTreeWidget封裝的表格樹控制項QtTreePro ...
  • 前言 只有光頭才能變強。 文本已收錄至我的GitHub倉庫,歡迎Star: "https://github.com/ZhongFuCheng3y/3y" 回顧上一篇: "《大型網站系統與Java中間件》讀書筆記(一)" 這周周末讀了第四章,現在過來做做筆記,希望能幫助到大家。 註:在看這篇文章之前, ...
  • 微信公眾號掃一掃功能提示:10003 redirect_uri功能變數名稱與後臺不一致 Senparc.Weixin組件很好用,但一個坑,不知道這和個是否有關。。 先說明下環境,centos+.net core 2.2 .netcore 直接dotnet run ,用nohup運行起來,配置埠為80,Us ...
  • Redis 是一個開源的使用 ANSI C語言編寫的支持網路、可基於記憶體也可持久化的日誌型、Key Value 資料庫。 常用它來存儲緩存數據,能非常輕鬆的實現緩存過期刷新機制。 多種語言都可以連接到 Redis 資料庫伺服器,本文將推薦一個非常簡潔的 C 連接 Redis 資料庫的開源項目。 一般 ...
  • REST & x5E38;& x7528;http& x52A8;& x8BCD; WebApi & x5728; Asp.NetCore & x4E2D;& x7684;& x5B9E;& x73B0; 3.1. & x521B;& x5EFA;WebApi& x9879;& x76EE;. 3. ...
  • 一 概要 二進位序列化是公司內部自研微服務框架的主要的數據傳輸處理方式,但是普通的開發人員對於二進位的學習和瞭解並不深入,容易導致使用過程中出現了問題卻沒有分析解決的思路。本文從一次生產環境的事故引入這個話題,通過對於事故的分析過程,探討了平時沒有關註到的一些技術要點。二進位序列化結果並不像Json ...
  • using System.IO; using System.Drawing; using System.Drawing.Imaging; using System.Threading; using System.Windows.Forms; using System; namespace Conso... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...