详解.net core下如何简单构建高可用服务集群

 更新时间:2019年01月24日 10:01:02   作者:泥水佬  
一说到集群服务相信对普通开发者来说肯定想到很复杂的事情,这篇文章主要介绍了详解.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://github.com/IKende/ClusterConfiguration

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详解IdentityServer4介绍和使用

    详解IdentityServer4介绍和使用

    在.NETCORE中更倾向于使用Identityserver4组件来构建认证授权服务,原因是IdentityServer4 是为ASP.NET Core系列量身打造的一款基于 OpenID Connect 和 OAuth 2.0 认证框架,本文重点介绍IDS4实际使用过程中涉及到的技术点,感兴趣的朋友一起看看吧
    2022-07-07
  • ASP.NET中CKEditor与CKFinder的配置使用

    ASP.NET中CKEditor与CKFinder的配置使用

    这篇文章主要介绍了ASP.NET中CKEditor与CKFinder的配置使用的相关资料,需要的朋友可以参考下
    2015-06-06
  • ASP.NET Core记录日志

    ASP.NET Core记录日志

    这篇文章介绍了ASP.NET Core记录日志的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • ASP.NET 2.0 中的创建母版页

    ASP.NET 2.0 中的创建母版页

    ASP.NET 2.0 中的创建母版页...
    2006-09-09
  • CheckBox为CheckBoxList实现全选或全取消选择(js代码实现)

    CheckBox为CheckBoxList实现全选或全取消选择(js代码实现)

    在管理商品后台是,由于CheckBoxList的选择太多,用户需要一个全选或全取消的功能,这样操作起来会提高效率同时可以减少误点等,本文将教大家如何实现,有需要的朋友可以参考下,望本文对你有所帮助
    2013-01-01
  • ASP.NET中操作数据库的基本步骤分享

    ASP.NET中操作数据库的基本步骤分享

    ASP.NET中操作数据库的基本步骤分享,学习asp.net的朋友可以参考下。
    2011-10-10
  • 几个 ASP.NET 小技巧

    几个 ASP.NET 小技巧

    JavaScript 调用服务器端
    2008-09-09
  • ASP.NET Core MVC学习教程之路由(Routing)

    ASP.NET Core MVC学习教程之路由(Routing)

    这篇文章主要给大家介绍了关于ASP.NET Core MVC学习教程之路由(Routing)的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用ASP.NET Core MVC具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • ASP.NET中UpdatePanel与jQuery同时使用所遇问题解决

    ASP.NET中UpdatePanel与jQuery同时使用所遇问题解决

    在.NET中使用了UpdatePanel,里面的输入框使用了jQuery的日历选择器,接下来介绍下两者同时使用的一些细节及问题的解决方法,感兴趣的各位可以参考下哈
    2013-03-03
  • 详解在.net中读写config文件的各种方法

    详解在.net中读写config文件的各种方法

    本篇文章主要介绍了在.net中读写config文件的各种方法,详细的介绍各种配置文件的读写操作,具有一定的参考价值,有兴趣的可以了解一下。
    2016-12-12

最新评论