.net core下簡單構建高可用服務集群
一說到集群服務相信對普通開發者來說肯定想到很複雜的事情,如zeekeeper ,反向代理服務網關等一系列的搭建和配置等等;總得來說需要有一定經驗和規劃的團隊才能應用起來。在這文章里你能看到在.net core下的另一種集群構建方案,通過Beetlex即可非常便捷地構建高可用的集群服務。
簡述
Beetlex的Webapi集群應用並沒有依賴於第三方服務,而是由Beetlex自身完成;它主要是通過Client和策略監控服務相結合的方式來實現集群化的服務負載訪問。以下是服務結構:
client一旦從配置中心獲取了集群的策略,就會脫離配置中心獨自進行負載處理;在運行中會定時從配置中心獲取更新策略,在這個過程中即使配置中心不可用也不影響整體服務處理。以下是配置中心的策略管理:
通過管理中心可以對不同的URL進行負載權重配置,默認可以配置一個*來處理所有負載;當到達一定規模的情況可以針對某些URL規則來進行策略配置.中心除了可以配置策略外還提供了服務資源監控,可以更方便地進行權重調整。
應用
接下來通過一個簡單的示例來介紹如何通過Beetlex構建高可用的webapi集群服務.
- 創建一個.net core控制台項目
- 引用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個線程進行壓力測試,由於部署服務只是兩核,所以一下子就把資源壓滿了。
接下來需要新的節點服務來支撐並發處理,這個時候只需要新部署一份服務,在配置中心添加節點即可。
有新的服務加入後,並發由原來的1W多變成3W,而這個調整是完全不需要調整任何程序的!由於壓測下來兩台伺服器的資源都比較吃緊,所以再添加一台服務來應對並發,但這一次添加的服務權重只有之前兩台的一半。
從測試結果來看最後添的服務,依據權重的設置來承載了相應的並發處理。
通過以上示例,你會發現通過Beetlex構建高可用的webapi集群服務是一件非常簡單的事情。
項目地址:https://github.com/IKende/FastHttpApi
作者: 泥水佬
原文:https://my.oschina.net/ikende/blog/2998894
※MongoDB系統CentOS 7.1 crash的排障過程
※Effective Python之編寫高質量Python代碼的59個有效方法
TAG:程序員小新人學習 |