Soul的SPI以及负载均衡策略研究

Soul的SPI以及负载均衡策略研究

上一节留下的几个问题在之后进行的研究

  • 如何从abstractSoulPlugin执行完之后到WebClientPlugin的相同方法,是责任链模式还是其他的加载过程

各个插件执行的时候实际上是责任链模式。请求分发执行的这个方法主要是SoulWebHandler 继承了Spring webflux的WebHandler的handle方法。handle方法中的参数正好就是请求的相关参数,然后我们就可以在插件的执行逻辑内转发和做操作

  • abstractSoulPlugin是如何加载注册或修改后的选择器等数据

可以看到在数据同步的配置中,是由zkClient.subscribeDataChanges来订阅数据的改变操作,从感觉上来说,可能没有websocket那么明显

  • plugin 中的执行方法是如何获取到ServerWebExchange的相关请求数据

SoulWebHandler 继承了Spring webflux的WebHandler的handle方法,springwebflux内部获取了请求的相关属性放入了ServerWebExchange中

Soul的SPI以及引申出的负载均衡

针对负载均衡的研究,其实我在一开始的使用的文章中就已经提到过了。因此我今天继续尝试了负载均衡的相关代码的查看,首先,在上一节的基础上,我们可以知道,插件是通过责任链模式进行执行的。而我们负载均衡这一部分是使用的 默认的divide插件来执行的。在divide插件的doExecute方法中,首先进行了SPI的类加载,然后根据类加载的情况获取了具体的负载均衡的策略。用来执行了具体的负载均衡策略,通过如下在SPI代码插入的日志语句

可以看到。SPI不仅加载了负载均衡的具体方式。而且在此之前,还加载了多次匹配策略,全局搜索后发现不仅base插件和divide插件会加载SPI类,监控相关的MetricsTrackerFacade中也同样使用了SPI类。同时,在SPI的第一次加载某个SPI实现时,SPI会将相关类实例在缓存中缓存起来。这样不用在后续的代码中继续执行加载资源解析spi文件等具体的耗时操作,另外 负载均衡中内置了hash,轮询roundrobin,随机random三种负载均衡方式,由于对算法还没有进行深入研究,在此不做过多说明,后续进行了一些研究再在此基础上进行说明

下面,想探讨下,当选择器负载均衡和选择器规则负载均衡不相同且选择器规则负载均衡为random时为什么选择的是选择器的负载均衡

通过在插件执行的断点中执行可以看出。插件同时获取了规则和选择器的负载均衡策略。而执行那个负载均衡策略在具体的执行器中进行选择

可以看到在random的负载均衡策略中仍然进行了选择器权重的区分。通过类的继承关系可以看到getWeight方法被定义在模板抽象类中,同时被roundrobin和random使用,从而实现了上述的所说的在选择器规则存在的情况下依然选择了roundrobin负载均衡

(0)

相关推荐

  • (4)ASP.NET Core3.1 Ocelot负载均衡

    (4)ASP.NET Core3.1 Ocelot负载均衡

  • 分布式事务+DDD+负载均衡+服务治理已撸!微服务不就这点事?

    Go语言中文网 今天 最近有看到"微服务,分久必合.合久必分"的言论,我同意,微服务不是架构演变的终点,细说还有Serverless.FaaS等方向.但纠结要不要拆分是没有必要的, ...

  • 老曹眼中的负载均衡

    什么是负载均衡 负载(load)一词起源于典型系统,指连接在电路中消耗电能的装置,负载(用电器)的功能是把电能转变为其他形式能.引申出来,一个是实体,一个转化. 于是,对于实体,有了通信帧或者报文中数 ...

  • 分布式事务 DDD 负载均衡 服务治理,微服务搞懂这些就够了?

    最近有看到"微服务,分久必合.合久必分"的言论,我同意,微服务不是架构演变的终点,细说还有Serverless.FaaS等方向.但纠结要不要拆分是没有必要的,拆往往是随着业务变化不 ...

  • 浅谈大型网站之负载均衡架构

    概念 负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器.企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务. 负载均衡建 ...

  • Linux学习10-CentOS搭建nginx负载均衡环境

    前言 当自己的web网站访问的人越来越多,一台服务器无法满足现有的业务时,此时会想到多加几台服务器来实现负载均衡. 网站的访问量越来越大,服务器的服务模式也得进行相应的升级,怎样将同一个域名的访问分散 ...

  • CentOS下LVS负载均衡的简单实践

    LVS概念介绍可参考转载文章LVS 负载均衡原理及安装配置简明指南 下面结合如下拓扑图,简单实践一下LVS负载均衡的其中一种情形 环境准备如下: WebServer1:192.168.31.211 部 ...

  • 负载均衡基础知识

    一.什么是负载均衡? 互联网早期,业务流量比较小并且业务逻辑比较简单,单台服务器便可以满足基本的需求:但随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台机器的性能问题以及单点问题凸显了 ...

  • 【读书笔记】全局负载均衡工作原理及实现

    [TOC] <CDN技术详解>读书笔记 图片.png 全局负载均衡工作原理及实现 1. 全局负载均衡在 CDN 系统中的作用 CDN 系统总是希望使用距离用户最近的设备为用户提供服务,这样 ...

  • 负载均衡使用SG-6000-AX500 牛叉的多线接入

    这个玩意就是为了18条宽带同时接入时使用的,一般的路由器防火墙也就双线接入,比如仅仅是联通移动,现在可以三个运营商,每个运营商三个固定公网IP地址的接入,场面很宏大,效果不知道怎么样,反正能够实现这个 ...