1. 程式人生 > >基於surging 的stage元件設計,談談我眼中的微服務。

基於surging 的stage元件設計,談談我眼中的微服務。

一、前言

隨著業務的發展,併發量的增多,業務的複雜度越來越大,對於系統架構能力要求越來越高,這時候微服務的設計思想應運而生,但是對於微服務需要引擎進行驅動,這時候基於.NET CORE 的微服務引擎surging 就誕生了。

 1.那麼怎麼樣去理解微服務呢?

    微服務是針對業務的鬆耦合,是對於業務的解耦,也是粒度最小的功能業務模組,對於本地和遠端的抽象化,對於遠端呼叫提供了服務治理保證了可靠性通訊。

2. 那麼什麼是微服務引擎呢?

  微服務引擎是微服務的容器,是掃描或引用載入業務服務模組驅動生成服務提供者,針對於行業解決方案,整合相應的service host,而針對於業務需要一些中介軟體來輔助,比如快取中介軟體,eventbus中介軟體(訊息中介軟體),資料儲存中介軟體,而各個服務又可 以互相通過rpc進行可靠性通訊。

3. 是不是需要有非微服務不可的心態去重構系統?

  微服務是針對於業務的鬆耦合,是針對於呼叫的抽象,所以相關複雜的系統都可以使用微服務的設計思想去重構,但是團隊對於微服務把握不到位的話,我建議還是使用SOA去設計系統,後面可以使用k8s做服務治理。

4.那麼surging 又能做什麼呢?

  • 構建Web應用程式,微服務和api閘道器
  • 微服務可以部署在docker。可以使用k8s、rancher服務編排彈性擴容
  • 提供了多協議支援
  • 支援負載平衡分流壓力
  • 基於.NET Core的跨平臺可以在Windows,macOS和Linux上執行;也可以移植到其他作業系統。
  • 簡化的服務呼叫,通過服務規則的指定,就可以做到服務之間的遠端呼叫,無需其它方式的侵入
  • 服務自動註冊與發現,不需要配置服務提供方地址,註冊中心基於ServiceId 或者RoutePath查詢服務提供者的地址和元資料,並且能夠平滑新增或刪除服務提供者。
  • 軟負載均衡及容錯機制,通過surging內部負載演算法和容錯規則的設定,從而達到內部呼叫的負載和容錯
  • 分散式快取中介軟體:通過雜湊一致性演算法來實現負載,並且有健康檢查能夠平滑的把不健康的服務從列表中刪除
  • 事件匯流排:通過對於事件匯流排的適配可以實現釋出訂閱互動模式
  • 容器化持續整合與持續交付 :通過構建一體化Devops平臺,實現專案的自動化構建、部署、測試和釋出,從而提高生產環境的可靠性、穩定性、彈性和安全性。
  • 業務模組化驅動引擎,通過載入指定業務模組,能夠更加靈活、高效的部署不同版本的業務功能模組

針對於以上描述,我們再來看看surging 2.0 新提供的stage元件,在引擎中又有什麼作用呢?

 

 

 

5. Stage(關卡)元件介紹

stage 從字面翻譯是關卡,階段。而取名設計的目的是通過這個階段關卡就能進行下一個階段的訪問。其作用針對於對外訪問,其功能有路由轉發,鑑權,第三方呼叫,服務聚合閘道器,中轉服務。

 

二、功能使用

 1.swagger與stage同時使用

swagger元件可以通過載入的業務介面線上生成API文件,這樣可以給開發人員進行測試和除錯,那麼配合stage元件使用就可以針對鑑權服務進行測試。

設定jwt 鑑權

       
    [ServiceBundle("api/{Service}/{Method}")]
    //[ServiceBundle("api/{Service}")]
    //[ServiceBundle("api/{Service}/{Method}/test")]
    //[ServiceBundle("api/{Service}/{Method}/test",false)]
    public interface IUserService: IServiceKey
    {
        [Authorization(AuthType = AuthorizationType.JWT)]
        Task<int> GetUserId(string userName);
     }

通過設定HttpPort 或者stage 的HttpsPort和HttpPort,就能通過相關埠訪問,預設是280,然後可以通過http://127.0.0.1:280/swagger/index.html就能訪問

 2.服務聚合和中轉服務

 針對於第三方或者移動端呼叫,需要做服務聚合,以滿足業務結果返回的需要, 這個時候就可以使用stage元件了

  注:

  •    聚合服務、中轉服務沒有服務治理,服務註冊與發現
  •    聚合服務、中轉服務呼叫微服務,可以支援服務治理,服務註冊與發現,服務快取降級

3. 檔案服務

 通過引用stage 元件,然後設定Policy配置就能跨域進行檔案上傳和下載功能,而且檔案服務可以水平擴充套件部署

需要按照以下程式碼進行編碼,最主要是注意引數和返回結果型別

      [ServiceBundle("api/{Service}/{Method}")]
    //[ServiceBundle("api/{Service}")]
    //[ServiceBundle("api/{Service}/{Method}/test")]
    //[ServiceBundle("api/{Service}/{Method}/test",false)]
    public interface IUserService: IServiceKey
    {
      /// <summary>
        /// 測試上傳檔案
        /// </summary>
        /// <param name="form">HttpFormCollection 型別引數</param>
        /// <returns></returns>
        Task<bool> UploadFile(HttpFormCollection form);

        /// <summary>
        /// 測試下載檔案
        /// </summary>
        /// <param name="fileName">檔名</param>
        /// <param name="contentType">Content-Type</param>
        /// <returns></returns>
        [ServiceRoute("{fileName}/{contentType}")]
        Task<IActionResult> DownFile(string fileName, string contentType);
 }

 

 然後可以通過swagger 進行測試

上傳檔案

 下載檔案

4. SSL認證

 可以通過配置HttpsPort、CertificateFileName、CertificateLocation、CertificatePassword來生成ssl認證

5. 閘道器

 stage 可以生成對外訪問閘道器,其作用是路由轉發和鑑權

 

三、效能

 

測試環境

CPU:Intel Core i7-4710MQ

記憶體:16G

硬碟:1T SSD+512G HDD

網路:區域網

版本:.net core 2.2

 

 

四、總結

surging 2.0將在下月底進行釋出,敬請期待