![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Soul
文章平均质量分 64
Soul 网关源码阅读
斯普特尼克L
这个作者很懒,什么都没留下…
展开
-
Soul 网关源码阅读系列之权重轮询的负载均衡策略
之前在讲divide插件时,只讲了HashLoadBalance,RandomLoadBalance两种负载均衡方式,这次我们一起来看一下RoundRobinLoadBalance,轮询。事实上,soul 提供的负载均衡方式是可设置权重的,所以代码比普通的负载均衡负载一点。RoundRobinLoadBalance 维护了一个 methodWeightMap 作为各个upstream的缓存,同时维护了AtomicBoolean类型变量updateLock作为轻量级锁来保证一致性。接下来看代码:原创 2021-02-06 07:43:51 · 206 阅读 · 0 评论 -
Soul 源码阅读系列之限流器、RewritePlugin、ContextPathPlugin
ratelimitersoul 网关使用 redis 实现了一个限流器。RateLimiterPluginDataHandler当插件配置被修改时(位于 admin 系统->系统管理->插件管理),数据将流向此类的 handlerPlugin 方法,soul 使用这些信息组装 redis 连接:public void handlerPlugin(final PluginData pluginData) { if (Objects.nonNull(pluginData) &原创 2021-02-04 22:18:00 · 183 阅读 · 2 评论 -
Soul 源码阅读之熔断器
这篇文章开始,我们来探究 soul 对熔断的支持。Soul 一共支持了三款主流的熔断实现,分别是 hystrix,sentinel,resilience4j 三种。本篇从 hystrix 开始。熔断器分布式系统中常见的一个组件,类似于物理层面的熔断器,当电流超过规定值一定时间后,自身断开,起到保护用电器的作用。放回到分布式系统中,当流量达到一定程度后,采取快速失败等策略,从而提升整体服务的可用性。hystrixhystrix 是 netflix 开源的熔断工具,提供了两种实现方式,线程池和信号量,原创 2021-02-04 08:07:52 · 119 阅读 · 0 评论 -
Soul 源码阅读之 tars 插件
Soul 同样支持腾讯的 tars RPC 框架。插件主流程不复杂: protected Mono<Void> doExecute(final ServerWebExchange exchange, final SoulPluginChain chain, final SelectorData selector, final RuleData rule) { String body = exchange.getAttribute(Constants.TARS_PARAMS原创 2021-01-31 08:07:49 · 131 阅读 · 0 评论 -
Soul 网关源码阅读之 apache dubbo plugin
Soul 提供了 apache 和 alibaba 两种 dubbo 的支持。本篇先来看 apache dubbo 插件的源码。ApacheDubboPlugin插件类本身的代码非常简单,只是判断一些上下文需要的对象是否可以正常使用,又原创 2021-01-30 07:57:17 · 134 阅读 · 1 评论 -
Soul 网关源码阅读之 selector data 及 ip 探活机制
今天,我们继续研究 SelectorData 的数据流向,并以 divide 插件为例,看看数据最终的应用场景,比如ip 探活。DividePluginDataHandler有了上篇文章的基础,我们直接打开 CommonPluginDataSubscriber.subscribeDataHandler 方法: private <T> void subscribeDataHandler(final T classData, final DataEventTypeEnum dataTyp原创 2021-01-26 23:14:47 · 335 阅读 · 0 评论 -
Soul 网关源码阅读之 plugin data 的数据流向
在过去的几篇文章中,我们阅读了 soul 几种数据同步方式的源码,也知道同步的目的是将 admin 的信息同步到 bootstrap 的 jvm 内存中,那么,具体来说,这些数据最终流向了哪里?这次,我们来看一下 plugin data 的目的地。PluginDataSubscriber有了之前的基础,我们从 zookeeper 模块入手可以很轻松的找到处理 plugin data 的代码: private void watcherPlugin(final String pluginName) {原创 2021-01-25 23:45:08 · 442 阅读 · 2 评论 -
Soul 网关源码阅读之 http 长轮询同步方式
除去引入中间件的方式,Soul 网关还提供了 http 长轮询的方式进行数据的同步。和其他方式一样,需要在 bootstrap 的 pom.xml 文件中引入如下依赖:<!--soul data sync start use http--> <dependency> <groupId>org.dromara</groupId> <artifactId>soul-spring-boot-sta原创 2021-01-23 23:33:10 · 124 阅读 · 0 评论 -
Soul 网关源码阅读之 Nacos 数据同步方式
Nacos 是阿里推出的分布式注册中心,提供诸如服务注册发现,动态配置等功能,Soul 支持使用这些特性进行数据同步。开启 Nocos 同步功能和 zookeeper 相同,先在 bootstrap 的 pom 文件中加入如下配置: <dependency> <groupId>org.dromara</groupId> <artifactId>soul-spring-boot-starter-sync-data原创 2021-01-22 23:32:32 · 254 阅读 · 0 评论 -
Soul 网关源码阅读之 zookeeper 方式进行数据同步
本次文章我们来探讨 Soul 中使用 zookeeper 的数据同步方式。安装 zookeeper首先准备安装包:https://zookeeper.apache.org/releases.html,下载的结果是 apache-zookeeper-3.6.2-bin.tar.gz,解压。打开 conf 目录,在其中创建 zoo.cfg 文件,官方提供了一个示例文件 zoo_sample.cfg,可以仿照书写。主要需要修改的地方就是数据文件目录这一行,改成我们自己需要的就行。接下来打开 bin 目原创 2021-01-21 23:44:44 · 109 阅读 · 0 评论 -
Soul 网关源码阅读之 Websocket 同步机制
这篇文章开始,将介绍 Soul 网关的同步机制。根据网关的角色定位,用户会在运行期间不断的修改配置比如流量策略,或者防火墙等等。这时,就需要实时的同步机制,将原创 2021-01-20 23:48:43 · 183 阅读 · 0 评论 -
Soul 源码阅读之 divide 插件源码
divide 的入口逻辑(省略了非本次文章重点)如下: protected Mono<Void> doExecute(final ServerWebExchange exchange, final SoulPluginChain chain, final SelectorData selector, final RuleData rule) { final SoulContext soulContext = exchange.getAttribute(Constants.CON原创 2021-01-20 00:08:17 · 118 阅读 · 0 评论 -
Soul 源码阅读之选择器
org.dromara.soul.plugin.base.AbstractSoulPlugin所有的插件入口类都继承了此抽象类,此类实现了 SoulPlugin 接口的 execute 方法并为其子类定义了 doExecute 方法来提供接入入口。而 execute 方法中包含了选择器和选择器规则的重要代码。事实上,我们可以看到 soul 的每一款插件都有相应的选择器和规则的配置,以此来提供每一个插件的入口筛选,所以,soul 就把选择器前置到抽象类中,组装到整个插件调用链的上下文中。execute原创 2021-01-18 23:57:59 · 166 阅读 · 0 评论 -
Soul 网关插件初始化过程
上次我们体验了 divide 插件的各种功能,其他插件比如 dubbo 等也都可以对照着官方文档去体验。那么,这些插件是如何初始化又是何时使用的呢,接下来我们来看一下源码。初始化在启动 soul-bootstrap 模块时,我们可以看到 load plugin 的输出:这时就是在进行各个插件模块的加载。事实上,在 soul-bootstrap 的 pom 文件中可以看到如下 starter :<!--soul gateway start--><dependency>原创 2021-01-18 20:24:08 · 371 阅读 · 3 评论 -
试用 Soul divide 插件
本次的文章我们将继续讨论 soul 的 divide 插件,也就是 http 服务的代理在自己的 Spring Boot 项目中引入 soul首先在 pom.xml 文件中引入如下依赖<dependency> <groupId>org.dromara</groupId> <artifactId>soul-spring-boot-starter-client-springmvc</artifactId> <vers原创 2021-01-18 20:19:57 · 130 阅读 · 0 评论 -
开始使用 Soul 网关
分布式 API 网关一般来说,API 网关应用于微服务场景,是其中的一个组件,针对整个应用宏观来看,处于客户端和服务端中间。引入 API 网关有一系列的好处:聚合服务端接口,为客户端提供相对统一的 API 和入口;由于入口统一,能够提供安全,限流,缓存,日志,监控,重试,熔断等功能;控制流量,比如负载均衡、蓝绿发布等功能放在这一层也是可以的。Soulgithub 地址:https://github.com/dromara/soul官网:https://dromara.org/zh-cn/do原创 2021-01-18 20:07:35 · 582 阅读 · 0 评论