.net core下簡單構建高可用服務集羣

一說到集羣服務相信對普通開發者來講確定想到很複雜的事情,如zeekeeper ,反向代理服務網關等一系列的搭建和配置等等;總得來講須要有必定經驗和規劃的團隊才能應用起來。在這文章裏你能看到在.net core下的另外一種集羣構建方案,經過Beetlex便可很是便捷地構建高可用的集羣服務。git

簡述

Beetlex的Webapi集羣應用並無依賴於第三方服務,而是由Beetlex自身完成;它主要是經過Client和策略監控服務相結合的方式來實現集羣化的服務負載訪問。如下是服務結構:github

 

client一旦從配置中心獲取了集羣的策略,就會脫離配置中心獨自進行負載處理;在運行中會定時從配置中心獲取更新策略,在這個過程當中即便配置中心不可用也不影響總體服務處理。如下是配置中心的策略管理:web

 

 

經過管理中心能夠對不一樣的URL進行負載權重配置,默承認以配置一個*來處理全部負載;當到達必定規模的狀況能夠針對某些URL規則來進行策略配置.中心除了能夠配置策略外還提供了服務資源監控,能夠更方便地進行權重調整。api

應用

接下來經過一個簡單的示例來介紹如何經過Beetlex構建高可用的webapi集羣服務.瀏覽器

 

  • 引用Beetlex.FastHttpApi

 

  • 編寫一個簡單的HelloWorldwebapi服務
    class Program
    {
        private static BeetleX.FastHttpApi.HttpApiServer mApiServer;

        static void Main(string[] args)
        {
            mApiServer = new BeetleX.FastHttpApi.HttpApiServer();
            mApiServer.Debug();
            mApiServer.Register(typeof(Program).Assembly);
            mApiServer.Open();
            Console.Write(mApiServer.BaseServer);
            Console.Read();
        }
    }
    [Controller]
    public class Home
    {
        /// <summary>
        /// Hello Word
        /// </summary>
        /// <param name="name">string:  you name</param>
        /// <returns>string</returns>
        [Get(Route = "{name}")]
        [DefaultJsonResultFilter]
        public object Hello(string name)
        {
            return new { Hello = "hello " + name, Time = DateTime.Now };
        }
    }
  • 運行後瀏覽器訪問一下

 

  • 建立Client調用

一樣是構建一個控制檯程序,而後引用BeetleX.FastHttpApi,定義訪問接口服務器

    public interface IDataService
    {
        [Get(Route = "hello/{name}")]
        string Hello(string name);
    }
  • 建立調用接口代理
HttpClusterApi = new BeetleX.FastHttpApi.Clients.HttpClusterApi();
DataService = HttpClusterApi.Create<IDataService>();
await HttpClusterApi.LoadNodeSource("default", "http://localhost:8080");//加載配置服務中的default節點
  • 調用服務
var result = DataService.Hello("henry");
  • 集羣中心配置

 

這樣一個集羣化的服務就完成,可能有人會問這明明就是單一服務,怎多是高可用的服務集羣呢?接下來咱們作一系的壓測並經過配置中心實現無縫地增長服務來應對測試的處理。併發

配置負載

高可用集羣纔是咱們的目標,但實際應用中也不可能一會兒就有這樣的需求,每每是隨意着業務的增加集羣服務的需求會慢慢顯露出來;接下來就對上面的單服務進行一個壓力測試,開啓了40個線程進行壓力測試,因爲部署服務只是兩核,因此一會兒就把資源壓滿了。app

 

接下來須要新的節點服務來支撐併發處理,這個時候只須要新部署一份服務,在配置中心添加節點便可。測試

有新的服務加入後,併發由原來的1W多變成3W,而這個調整是徹底不須要調整任何程序的!因爲壓測下來兩臺服務器的資源都比較吃緊,因此再添加一臺服務來應對併發,但這一次添加的服務權重只有以前兩臺的一半。spa

從測試結果來看最後添的服務,依據權重的設置來承載了相應的併發處理。

經過以上示例,你會發現經過Beetlex構建高可用的webapi集羣服務是一件很是簡單的事情。

項目地址:https://github.com/IKende/FastHttpApi

集羣策略管理項目地址:https://github.com/IKende/ClusterConfiguration

相關文章
相關標籤/搜索