溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

.net core下構(gòu)建高可用服務(wù)集群的示例

發(fā)布時(shí)間:2021-02-08 10:15:55 來(lái)源:億速云 閱讀:261 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹了.net core下構(gòu)建高可用服務(wù)集群的示例,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

一說(shuō)到集群服務(wù)相信對(duì)普通開(kāi)發(fā)者來(lái)說(shuō)肯定想到很復(fù)雜的事情,如zeekeeper ,反向代理服務(wù)網(wǎng)關(guān)等一系列的搭建和配置等等;總得來(lái)說(shuō)需要有一定經(jīng)驗(yàn)和規(guī)劃的團(tuán)隊(duì)才能應(yīng)用起來(lái)。在這文章里你能看到在.net core下的另一種集群構(gòu)建方案,通過(guò)Beetlex即可非常便捷地構(gòu)建高可用的集群服務(wù)。

簡(jiǎn)述

Beetlex的Webapi集群應(yīng)用并沒(méi)有依賴于第三方服務(wù),而是由Beetlex自身完成;它主要是通過(guò)Client和策略監(jiān)控服務(wù)相結(jié)合的方式來(lái)實(shí)現(xiàn)集群化的服務(wù)負(fù)載訪問(wèn)。以下是服務(wù)結(jié)構(gòu):

.net core下構(gòu)建高可用服務(wù)集群的示例

client一旦從配置中心獲取了集群的策略,就會(huì)脫離配置中心獨(dú)自進(jìn)行負(fù)載處理;在運(yùn)行中會(huì)定時(shí)從配置中心獲取更新策略,在這個(gè)過(guò)程中即使配置中心不可用也不影響整體服務(wù)處理。以下是配置中心的策略管理:

.net core下構(gòu)建高可用服務(wù)集群的示例

通過(guò)管理中心可以對(duì)不同的URL進(jìn)行負(fù)載權(quán)重配置,默認(rèn)可以配置一個(gè)*來(lái)處理所有負(fù)載;當(dāng)?shù)竭_(dá)一定規(guī)模的情況可以針對(duì)某些URL規(guī)則來(lái)進(jìn)行策略配置.中心除了可以配置策略外還提供了服務(wù)資源監(jiān)控,可以更方便地進(jìn)行權(quán)重調(diào)整。

應(yīng)用

接下來(lái)通過(guò)一個(gè)簡(jiǎn)單的示例來(lái)介紹如何通過(guò)Beetlex構(gòu)建高可用的webapi集群服務(wù).

創(chuàng)建一個(gè).net core控制臺(tái)項(xiàng)目

.net core下構(gòu)建高可用服務(wù)集群的示例

引用Beetlex.FastHttpApi

.net core下構(gòu)建高可用服務(wù)集群的示例

編寫(xiě)一個(gè)簡(jiǎn)單的HelloWorldwebapi服務(wù)

 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 };
    }
  }

運(yùn)行后瀏覽器訪問(wèn)一下

.net core下構(gòu)建高可用服務(wù)集群的示例

創(chuàng)建Client調(diào)用

同樣是構(gòu)建一個(gè)控制臺(tái)程序,然后引用BeetleX.FastHttpApi,定義訪問(wèn)接口

  public interface IDataService
  {
    [Get(Route = "hello/{name}")]
    string Hello(string name);
  }

創(chuàng)建調(diào)用接口代理

HttpClusterApi = new BeetleX.FastHttpApi.Clients.HttpClusterApi();
DataService = HttpClusterApi.Create<IDataService>();
await HttpClusterApi.LoadNodeSource("default", "http://localhost:8080");//加載配置服務(wù)中的default節(jié)點(diǎn)

調(diào)用服務(wù)

var result = DataService.Hello("henry");

集群中心配置

.net core下構(gòu)建高可用服務(wù)集群的示例

這樣一個(gè)集群化的服務(wù)就完成,可能有人會(huì)問(wèn)這明明就是單一服務(wù),怎可能是高可用的服務(wù)集群呢?接下來(lái)我們做一系的壓測(cè)并通過(guò)配置中心實(shí)現(xiàn)無(wú)縫地增加服務(wù)來(lái)應(yīng)對(duì)測(cè)試的處理。

配置負(fù)載

高可用集群才是我們的目標(biāo),但實(shí)際應(yīng)用中也不可能一下子就有這樣的需求,往往是隨意著業(yè)務(wù)的增長(zhǎng)集群服務(wù)的需求會(huì)慢慢顯露出來(lái);接下來(lái)就對(duì)上面的單服務(wù)進(jìn)行一個(gè)壓力測(cè)試,開(kāi)啟了40個(gè)線程進(jìn)行壓力測(cè)試,由于部署服務(wù)只是兩核,所以一下子就把資源壓滿了。

.net core下構(gòu)建高可用服務(wù)集群的示例

接下來(lái)需要新的節(jié)點(diǎn)服務(wù)來(lái)支撐并發(fā)處理,這個(gè)時(shí)候只需要新部署一份服務(wù),在配置中心添加節(jié)點(diǎn)即可。

.net core下構(gòu)建高可用服務(wù)集群的示例

有新的服務(wù)加入后,并發(fā)由原來(lái)的1W多變成3W,而這個(gè)調(diào)整是完全不需要調(diào)整任何程序的!由于壓測(cè)下來(lái)兩臺(tái)服務(wù)器的資源都比較吃緊,所以再添加一臺(tái)服務(wù)來(lái)應(yīng)對(duì)并發(fā),但這一次添加的服務(wù)權(quán)重只有之前兩臺(tái)的一半。

.net core下構(gòu)建高可用服務(wù)集群的示例

從測(cè)試結(jié)果來(lái)看最后添的服務(wù),依據(jù)權(quán)重的設(shè)置來(lái)承載了相應(yīng)的并發(fā)處理。

通過(guò)以上示例,你會(huì)發(fā)現(xiàn)通過(guò)Beetlex構(gòu)建高可用的webapi集群服務(wù)是一件非常簡(jiǎn)單的事情。

項(xiàng)目地址:https://github.com/IKende/FastHttpApi

集群策略管理項(xiàng)目地址:https://github.com/IKende/ClusterConfiguration

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“.net core下構(gòu)建高可用服務(wù)集群的示例”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI