文档章节

.net core下简单构建高可用服务集群

泥水佬
 泥水佬
发布于 01/08 17:55
字数 1087
阅读 1868
收藏 57

一说到集群服务相信对普通开发者来说肯定想到很复杂的事情,如zeekeeper ,反向代理服务网关等一系列的搭建和配置等等;总得来说需要有一定经验和规划的团队才能应用起来。在这文章里你能看到在.net core下的另一种集群构建方案,通过Beetlex即可非常便捷地构建高可用的集群服务。

简述

Beetlex的Webapi集群应用并没有依赖于第三方服务,而是由Beetlex自身完成;它主要是通过Client和策略监控服务相结合的方式来实现集群化的服务负载访问。以下是服务结构:

client一旦从配置中心获取了集群的策略,就会脱离配置中心独自进行负载处理;在运行中会定时从配置中心获取更新策略,在这个过程中即使配置中心不可用也不影响整体服务处理。以下是配置中心的策略管理:

 

通过管理中心可以对不同的URL进行负载权重配置,默认可以配置一个*来处理所有负载;当到达一定规模的情况可以针对某些URL规则来进行策略配置.中心除了可以配置策略外还提供了服务资源监控,可以更方便地进行权重调整。

应用

接下来通过一个简单的示例来介绍如何通过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个线程进行压力测试,由于部署服务只是两核,所以一下子就把资源压满了。

接下来需要新的节点服务来支撑并发处理,这个时候只需要新部署一份服务,在配置中心添加节点即可。

有新的服务加入后,并发由原来的1W多变成3W,而这个调整是完全不需要调整任何程序的!由于压测下来两台服务器的资源都比较吃紧,所以再添加一台服务来应对并发,但这一次添加的服务权重只有之前两台的一半。

从测试结果来看最后添的服务,依据权重的设置来承载了相应的并发处理。

通过以上示例,你会发现通过Beetlex构建高可用的webapi集群服务是一件非常简单的事情。

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

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

© 著作权归作者所有

共有 人打赏支持
泥水佬

泥水佬

粉丝 72
博文 86
码字总数 56002
作品 7
广州
架构师
私信 提问
加载中

评论(15)

l
l_1196

引用来自“l_1196”的评论

我客户端调用出现
BeetleX.FastHttpApi.Clients.HttpClientException:“ error request /hello/henry no http nodes are available”

引用来自“l_1196”的评论

你好,有没有能运行的完整示例,包括:配置中心、api服务,客户端。我昨天自己撘了一个报错,按照你文章中配的。

引用来自“泥水佬”的评论

你的错误说明client无法获取负载策略或api服务端服务不可用。
要确保api服务端在中心配置,并显示正常状态,也可以在浏览器访问一下。
可以通过HttpClusterApi.Stats()方法得到集群配置信息

引用来自“l_1196”的评论

你有没有完整示例给我一份

引用来自“泥水佬”的评论

https://github.com/IKende/FastHttpApi/tree/master/samples
下的Cluster.Client,Cluster.Server,配置中心下载编译部署,集群定义`default`
httpClusterApi.Stats();可以获取一个node,但node.hosts.count=0,可能啥问题呀。配置中心服务我也配置了。
泥水佬
泥水佬

引用来自“l_1196”的评论

我客户端调用出现
BeetleX.FastHttpApi.Clients.HttpClientException:“ error request /hello/henry no http nodes are available”

引用来自“l_1196”的评论

你好,有没有能运行的完整示例,包括:配置中心、api服务,客户端。我昨天自己撘了一个报错,按照你文章中配的。

引用来自“泥水佬”的评论

你的错误说明client无法获取负载策略或api服务端服务不可用。
要确保api服务端在中心配置,并显示正常状态,也可以在浏览器访问一下。
可以通过HttpClusterApi.Stats()方法得到集群配置信息

引用来自“l_1196”的评论

你有没有完整示例给我一份
https://github.com/IKende/FastHttpApi/tree/master/samples
下的Cluster.Client,Cluster.Server,配置中心下载编译部署,集群定义`default`
l
l_1196

引用来自“l_1196”的评论

我客户端调用出现
BeetleX.FastHttpApi.Clients.HttpClientException:“ error request /hello/henry no http nodes are available”

引用来自“l_1196”的评论

你好,有没有能运行的完整示例,包括:配置中心、api服务,客户端。我昨天自己撘了一个报错,按照你文章中配的。

引用来自“泥水佬”的评论

你的错误说明client无法获取负载策略或api服务端服务不可用。
要确保api服务端在中心配置,并显示正常状态,也可以在浏览器访问一下。
可以通过HttpClusterApi.Stats()方法得到集群配置信息
你有没有完整示例给我一份
泥水佬
泥水佬

引用来自“l_1196”的评论

我客户端调用出现
BeetleX.FastHttpApi.Clients.HttpClientException:“ error request /hello/henry no http nodes are available”

引用来自“l_1196”的评论

你好,有没有能运行的完整示例,包括:配置中心、api服务,客户端。我昨天自己撘了一个报错,按照你文章中配的。
你的错误说明client无法获取负载策略或api服务端服务不可用。
要确保api服务端在中心配置,并显示正常状态,也可以在浏览器访问一下。
可以通过HttpClusterApi.Stats()方法得到集群配置信息
l
l_1196

引用来自“l_1196”的评论

我客户端调用出现
BeetleX.FastHttpApi.Clients.HttpClientException:“ error request /hello/henry no http nodes are available”
你好,有没有能运行的完整示例,包括:配置中心、api服务,客户端。我昨天自己撘了一个报错,按照你文章中配的。
l
l_1196
我客户端调用出现
BeetleX.FastHttpApi.Clients.HttpClientException:“ error request /hello/henry no http nodes are available”
洛阳码农
牛逼
泥水佬
泥水佬

引用来自“l_1196”的评论

集群中心怎么创建?
https://github.com/IKende/ClusterConfiguration
也是基于Beetlex构建的开源项目,编译运行即可
l
l_1196
集群中心怎么创建?
l
l_1196
mark
linux集群-keepalived介绍-用keepalived配置高可用集群

linux集群介绍: 以功能划分:高可用和负载均衡 高可用集群:通常为两台服务器,一台工作,另外一台作为冗余。实现高可用的开源软件有:heartbeat、keepalived 负载均衡集群:一台服务器作为...

ZHENG-JY
2018/09/05
0
0
Linux集群:搭建高可用集群

一、集群介绍 根据功能划分为两大类:高可用和负载均衡; 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务; 实现高可用的开源软件...

BatmanLinux
2018/10/24
0
0
keepalived的介绍及配置高可用集群

12月19日任务 18.1 集群介绍 18.2 keepalived介绍 18.3/18.4/18.5 用keepalived配置高可用集群 集群介绍 根据功能划分为2类:高可用和负载均衡 高可用集群:通常为两台服务器,一台工作,另外...

robertt15
2018/12/19
0
0
RCS高可用集群软件

RCS系列产品能够实现业务工作的无缝连接。 通过备用服务器连续服务,大大地减少了停机时间。 通过友好的GUI界面可以实现所有的设定、操作,大大地降低了运营成本。 导入简单 利用对话框方式简...

qq59506fe38df5f
2017/06/26
0
0
corosync和pacemaker高可用mariadb和haproxy

高可用的解决方案keepalived只是提供了最简单的高可用功能,真正高级的功能keepalived很难完成。openAIS规范提供完善的解决方案,但是很重量级很多功能考虑的很全面、很细致,了解这些我们才...

Ailu0li
2017/02/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据教程(11.9)hive操作基础知识

上一篇博客分享了hive的简介和初体验,本节博主将继续分享一些hive的操作的基础知识。 DDL操作 (1)创建表 #建表语法CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name ...

em_aaron
今天
0
0
OSChina 周四乱弹 —— 我家猫真会后空翻

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @我没有抓狂 :#今天听这个# 我艇牛逼,百听不厌,太好听辣 分享 Led Zeppelin 的歌曲《Stairway To Heaven》 《Stairway To Heaven》- Led Z...

小小编辑
今天
1
0
node调用dll

先安装python2.7 安装node-gyp cnpm install node-gyp -g 新建一个Electron-vue项目(案例用Electron-vue) vue init simulatedgreg/electron-vue my-project 安装electron-rebuild cnpm ins......

Chason-洪
今天
3
0
scala学习(一)

学习Spark之前需要学习Scala。 参考学习的书籍:快学Scala

柠檬果过
今天
3
0
通俗易懂解释网络工程中的技术,如STP,HSRP等

导读 在面试时,比如被问到HSRP的主备切换时间时多久,STP几个状态的停留时间,自己知道有这些东西,但在工作中不会经常用到,就老是记不住,觉得可能还是自己基础不够牢固,知识掌握不够全面...

问题终结者
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部