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

1、前言

surging 開源地址:https://github.com/dotnetcore/surginghtml

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

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

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

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

  微服務引擎是微服務的容器,是掃描或引用加載業務服務模塊驅動生成服務提供者,針對於行業解決方案,集成相應的service host,而針對於業務須要一些中間件來輔助,好比緩存中間件,eventbus中間件(消息中間件),數據儲存中間件,而各個服務又可 以互相經過rpc進行可靠性通訊。api

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將在下月底進行發佈,敬請期待

相關文章
相關標籤/搜索