一说到集群服务相信对普通开发者来说肯定想到很复杂的事情,如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

.net core下简单构建高可用服务集群的更多相关文章

  1. Dubbo+zookeeper构建高可用分布式集群(二)-集群部署

    在Dubbo+zookeeper构建高可用分布式集群(一)-单机部署中我们讲了如何单机部署.但没有将如何配置微服务.下面分别介绍单机与集群微服务如何配置注册中心. Zookeeper单机配置:方式一. ...

  2. 构建高可用ZooKeeper集群

    ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...

  3. 构建高可用ZooKeeper集群(转载)

    ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...

  4. Java集群优化——dubbo+zookeeper构建高可用分布式集群

    不久前,我们讨论过Nginx+tomcat组成的集群,这已经是非常灵活的集群技术,但是当我们的系统遇到更大的瓶颈,全部应用的单点服务器已经不能满足我们的需求,这时,我们要考虑另外一种,我们熟悉的内容, ...

  5. Dubbo+zookeeper构建高可用分布式集群(一)-单机部署

    不久前,我们讨论过Nginx+tomcat组成的集群,这已经是非常灵活的集群技术,但是当我们的系统遇到更大的瓶颈,全部应用的单点服务器已经不能满足我们的需求,这时,我们要考虑另外一种,我们熟悉的内容, ...

  6. 一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_185 2021年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像 ...

  7. 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...

  8. [转]搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

  9. 搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

随机推荐

  1. dqname_widnows.go

    package nsqd // On Windows, file names cannot contain colons. func getBackendName(topicName, channel ...

  2. BZOJ_3477_[Usaco2014 Mar]Sabotage_二分答案

    BZOJ_3477_[Usaco2014 Mar]Sabotage_二分答案 题意: 约翰的牧场里有 N 台机器,第 i 台机器的工作能力为 Ai.保罗阴谋破坏一些机器,使得约翰的工作效率变低.保罗可 ...

  3. Java基础-递归调用

    意义: 递归算法是一种直接或间接地调用自身的算法.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 所以在工作中我们经常用递归 来进行一些算法操作 比如 ...

  4. DCGAN 代码简单解读

    之前在DCGAN文章简单解读里说明了DCGAN的原理.本次来实现一个DCGAN,并在数据集上实际测试它的效果.本次的代码来自github开源代码DCGAN-tensorflow,感谢carpedm20 ...

  5. GIL(全局解释器锁)

    GIL(全局解释器锁)     每个线程在执行的过程都需要先获取GIL     作用:在单核的情况下实现多任务(多线程),保证同一时刻只有一个线程可以执行代码,因此造成了我们使用多线程的时候无法实现并 ...

  6. 从壹开始微服务 [ DDD ] 之九 ║从军事故事中,明白领域命令验证(上)

    烽烟 哈喽大家周二好呀,咱们又见面了,上周末掐指一算,距离 圣诞节 只有 5 周的时间了(如果你还不知道为啥我要提圣诞节这个时间点,可以看看我的第二系列开篇<之一 ║ D3模式设计初探 与 我的 ...

  7. 【机器学习基础】熵、KL散度、交叉熵

    熵(entropy).KL 散度(Kullback-Leibler (KL) divergence)和交叉熵(cross-entropy)在机器学习的很多地方会用到.比如在决策树模型使用信息增益来选择 ...

  8. [小技巧]ASP.NET Core中如何预压缩静态文件

    原文地址:Pre-compressed static files with ASP.NET Core 作者:Gunnar Peipman 译者:Lamond Lu 译文:https://www.cnb ...

  9. 带你由浅入深探索webpack4(一)

    相信你或多或少也听说过webpack.gulp等这些前端构建工具.近年来webpack越来越火,可以说成为了前端开发者必备的工具.如果你有接触过vue或者react项目,我想你应该对它有所了解. 这几 ...

  10. 如何使用vs将asp.net core项目添加容器支持并发布docker镜像到私有dockerhub和添加k8s/helm管理

    这篇文章介绍一下,如何使用VS2017给asp.net core添加容器支持,并发布镜像到私有docker hub,然后用chart管理容器镜像的操作流程. 话不多说,just do it. 新建项目 ...