![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Soul网关
文章平均质量分 67
大黄蜂bigwillc
这个作者很懒,什么都没留下…
展开
-
Soul网关的高性能思考
Soul网关能够以极高的性能进行数据转发,它肯定有些比较好的设计;经过这段时间的源码学习,我发现Soul源码里面的代码质量特别好;大量的使用设计模式;我们可以从系统中发现,Soul源码里面大量的使用了设计模式,这些设计模式帮助我们实现了一个高聚合低耦合的应用系统,同时降低了系统的复杂性;我们以soul-plug为例:在插件模块中,soul网关通过使用模板模式完成了选择器和规则匹配的功能,极大的提高了这块的可重复利用性;同时使用了责任链模式屏蔽掉了底层核心逻辑的部分;我们在设计一个新的 插件的时候,原创 2021-02-03 01:00:22 · 628 阅读 · 0 评论 -
Soul源码学习十三 - 微内核架构
我们通过Soul网关插件的执行流程可以发现,soul网关的设计特别像微内核架构中的规则引擎,今天我们就来看看微内核架构,以及Soul里面使用它的影子;什么是微内核架构?微内核架构,也被称为插件化架构,是一种面向功能进行拆分的课拓展性架构,在soul网关里面,我们通过实现不同的插件,实现对流量的各种控制。基本架构微内核架构包含两类组件:核心系统和插件模块。核心系统:负责和具体业务无关的通用功能,例如模块加载,模块间通信等;对标到soul里面,像selector的选择和rule的匹配就是流量的通用功原创 2021-01-29 01:07:27 · 344 阅读 · 2 评论 -
Soul源码学习十二 - divide插件实现原理分析
Divide插件实现原理分析Divide插件实现原理分析divide插件的执行流程ip端口探活负载均衡Divide插件实现原理分析divide插件的执行流程divide插件的调用使用了一个模板模式和责任链模式,在AbstractSoulPlugin抽象方法中实现了模板方法,为所有的插件实现了统一的选择器过滤和规则过滤的算法;每个单独的插件通过继承AbstractSoulPlugin抽象类,并且实现doExecute方法来实现行插件的功能;// 选择器和过滤器的操作 @Override p原创 2021-01-28 02:15:42 · 235 阅读 · 1 评论 -
Soul源码学习十一 -http长轮询中的多线程编程
Soul 网关中的多线程编程我们在阅读Soul网关中http长轮询这块代码的时候,我们发现里面有很多关于多线程编程的东西;本篇就通过Soul网关http长轮询的例子来聊一聊其中的多线程编程。多线程工具包我们可以看到src/main/java/org/dromara/soul/admin/listener/http/HttpLongPollingDataChangedListener.java通过引用java.util.concurrent包来帮助我们简化多线程操作import java.util.c原创 2021-01-27 00:38:42 · 122 阅读 · 0 评论 -
Soul源码学习 - 数据同步的一个问题记录
环境今天讨论的版本是2.2.1 - release版本;soul-admin 和 soul-bootstrap都集群部署分析问题admin在做集群不是的时候,如果用户修改配置,当节点数据只到达其中一个而没有到达其他节点时,其他节点会有一个5分钟的延时。admin节点和节点之间时互不感知的。在HttpLongPollingDataChangedListenner 的afterInitialize方法中会通过一个5分钟的定时任务去拉取数据到admin缓存中。@Override prote原创 2021-01-26 02:41:58 · 83 阅读 · 0 评论 -
Soul源码学习(九) - Nacos数据同步
本文将介绍一下Soul网关中Nacos的数据同步使用;启动步骤修改soul-admin中的配置;修改soul-bootstrap中的配置;启动本地Nacos;启动soul-admin和soul-bootstrap工厂;soul-admin中的配置soul: database: dialect: mysql init_script: "META-INF/schema.sql" sync:# websocket:# enabled: true#原创 2021-01-24 07:46:22 · 81 阅读 · 0 评论 -
Soul源码学习(八) -zookeeper数据同步
zookeeper数据同步zookeeper数据同步Soul网关提供的三种数据同步方式为什么需要数据同步?zookeeper数据同步原理zookeeper 的watch 机制watch监听事件zookeeper数据同步Soul网关提供的三种数据同步方式Soul网关提供了一下三种,可以任意选择基于zookeeper的监听订阅模式;webSocket推送模式;http长轮询;为什么需要数据同步?Soul网关是服务层和控制台分离的,而服务层又是可以集群部署的,存在数据一致性问题;网关是公司原创 2021-01-23 00:37:19 · 80 阅读 · 0 评论 -
记录一个使用zookeeper数据同的一个问题
一个问题记录今天在做zookeeper数据同步的时候,不知道是自己的启动步骤错了还是配置配有配,使用zookeeper做数据同步的时候数据一致无法同步到zookeeper,并且项目中的断点也一直进不去。配置zookeeper作为数据同步方式,修改Admin和bootstrap的配置文件; zookeeper: url: localhost:2181 sessionTimeout: 5000 connectionTimeout: 2000本地启动zookeeper服务;原创 2021-01-22 00:52:19 · 102 阅读 · 0 评论 -
Soul源码解析(六)- webSocket数据同步
webSocket数据同步webSocket数据同步Soul网关提供的三种数据同步方式为什么需要数据同步?数据同步原理webSocket数据同步原理代码结构目录webSocket数据同步Soul网关提供的三种数据同步方式Soul网关提供了一下三种,可以任意选择基于zookeeper的监听订阅模式;webSocket推送模式;http长轮询;为什么需要数据同步?Soul网关是服务层和控制台分离的,而服务层又是可以集群部署的,存在数据一致性问题;网关是公司流量入口,为了提升响应速度,所有原创 2021-01-21 00:41:52 · 145 阅读 · 0 评论 -
Soul 源码解析(五)- 选择器和规则匹配
选择器和规则匹配选择器和规则选择器和规则器的代码位置代码解析选择器和规则Soul网关里的插件使用的是责任链的模式进行处理,所有流进网关的流量都会经过每个插件的处理;但是再插件处理之前,流量还需要经过Selector和rule的处理,过滤调不符合规则的流量数据。话不多说,直接看代码;选择器和规则器的代码位置如图所示,选择器和规则的代码再soul-plugin - soul-plugin-base - AbstractSoulPlugin下;代码解析一个插件对应多个选择器,一个选择器对应多个规原创 2021-01-20 02:01:43 · 517 阅读 · 1 评论 -
Soul源码解析(二)- 发布订阅模式
Soul源码解析-发布订阅模式发布订阅模式(观察者模式)什么是发布订阅模式?发布订阅模式解决了什么问题?示例代码Soul源码解析功能写在最后本篇我们将带大家学习一下发布订阅模式,并且提供一个发布订阅模式的示例,同时我们结合Soul源码来看一下Soul网关是如何运用发布订阅模式的。发布订阅模式(观察者模式)什么是发布订阅模式?在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖对象都会自动收到通知。发布订阅模式解决了什么问题?一个对象状态发生变化的时候会通知多有订阅它的对象,其原创 2021-01-19 00:59:04 · 296 阅读 · 2 评论 -
Soul 源码解析(一):Soul网关里的负载均衡策略
Soul网关如何实现负载均衡负载均衡类结构Soul网关支持的负载均衡策略随机&加权随机随机加权随机负载均衡类结构我们定义了一个LoadBalance接口,接口里面定义了一个select方法,用来选择网关要将请求转发到哪个服务器;我们定义了一个AbstractLoadBalance抽象类,抽象类主要实现了select方法,以及定义了一个doSelect方法(实现类通过重写doSelect完成各种负载均衡策略);定义了三个不同策略的负载均衡策略来实现AbstractLoadBalance抽象原创 2021-01-17 01:58:21 · 323 阅读 · 0 评论 -
Soul网关 - 责任链模式
责任链模式什么是责任链模式责任链模式主要解决了什么问题?责任链模式的使用场景代码示例责任链模式在框架中运用的好处总结Soul网关里面的各个插件都是采用的是责任链模式,今天我们就来聊一聊责任链模式。什么是责任链模式将请求的发送和接受解耦,让多个接受对象都有机会处理这个请求。将这个接受对象串成一条链,并沿着这条链传递这个请求,知道链上的某个对象能够处理它为止。实际上责任链模式还有一种变体,那就是请求会被所有的处理器都处理一边,不存在终止的情况。其实我们可以将责任链模式看成是一个生产汽车的流水线,整条原创 2021-01-16 01:18:17 · 362 阅读 · 1 评论 -
Soul 网关入门示例演示
Soul 网关入门Soul网关入门使用示例Soul 网关入门简介Soul网关简介源码地址环境要求项目结构使用实例Springboot 工程使用示例(divide 插件)写在最后为什么需要数据同步?采用何种数据同步策略?简介Soul网关简介Soul网关是一个基于WebFlux的异步的,高性能的,响应式的API网关;特点支持各种语言(http协议),支持dubbo,springcloud协议;插件化设计思想,插件热插拔,易扩展;灵活的流量筛选,能满足各种流量控制;内置丰富的插件支持,鉴权,原创 2021-01-15 01:06:19 · 526 阅读 · 0 评论