自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 Soul网关源码探秘《十九》 - RateLimiter 插件源码分析

前文探讨的 Hystrix 插件可以用来实现熔断降级。今天来研究可以实现限流的 RateLimiter 插件。准备工作启动soul-admin项目,并在后台页面开启divide和RateLimiter插件。开启RateLimiter插件时需要配置redis信息。在本地起一个redis服务。2. 在soul-admin中配置RateLimiter插件的选择器和规则。选择器:规则:选择器的配置跟之前探讨过的插件都类似。规则配置中有两个差异化的参数。capacity:是允许用户在一秒钟

2021-02-06 02:45:19 359 1

原创 Soul网关源码探秘《十八》 - Hystrix插件源码分析

前文探讨了如何开启 Hystrix 插件,以及如何配置及使用该插件。今天来研究一下 Hystrix 插件在插件链中的执行逻辑,以及看它是如何实现熔断降级等功能的。准备工作启动soul-admin项目,并在后台页面开启divide和hystrix插件。启动soul-bootstrap项目以及soul-examples-http项目。源码分析在前文分析插件链时知道了,每一个插件都各自实现自己的 doExecute 方法。我们直接找到 Hystrix 插件中的该方法。并在该方法上打上断点。然后在终端执

2021-02-05 01:05:21 130

原创 Soul网关源码探秘《十七》 - 熔断/降级/限流

今天主要研究一下熔断/降级/限流这三个概念各自要解决的问题以及适用的场景。服务熔断和服务降级是解决服务雪崩的手段,所以先来了解一下什么是服务雪崩。服务雪崩假设在一个电商系统中,评论服务出现故障,那么所有依赖于评论服务的其他服务(例如商品详情服务)都将不可用。即一个服务失败,导致整条链路的服务都失败,这就是服务雪崩。熔断当评论服务不可用或响应过慢时,常理来说,应该等到评论服务恢复可用再来调用。可事实上是,后续每个评论服务请求,还是会等待评论服务响应,这可能会消耗商品详情服务的宝贵资源,导致资源耗尽,

2021-02-04 01:18:09 375

原创 Soul网关源码探秘《十六》 - Hystrix插件初探

今天尝试配置使用 Hystrix 插件,并体验它的功能。配置插件在 soul-bootstrap 的 pom.xml 文件中启用 Hystrix 的依赖。 <dependency> <groupId>org.dromara</groupId> <artifactId>soul-spring-boot-starter-plugin-hystrix</artifactId>

2021-02-02 02:17:19 138

原创 Soul网关源码探秘《十五》 - WebSocket同步

前面三篇文章探讨了以下几个问题:soul-admin后台在服务启动时如何注册服务的探活机制是如何实现的如何同步给soul-bootstrap网关soul-bootstrap网关接收到后台传来的配置信息后是如何处理流转的探活机制是如何实现的今天主要来探究soul-admin后台和soul-bootstrap网关是如何通过websocket通信的。准备工作在soul-admin项目的 application.yml 中配置使用 websocket 的同步方式。soul:

2021-01-31 02:11:51 136

原创 Soul网关源码探秘《十四》 - 数据同步(后台接收与同步篇二)

前文探索了soul-admin后台对配置服务项自动探活以及同步给网关的机制。今天主要来探究在服务启动时,是如何注册服务到soul-admin的。准备工作启动后台(soul-admin)和网关(soul-bootstrap)两个项目。源码探秘服务注册服务启动注册时,也是通过websocket机制同步到soul-admin后台的。猜测也会经过前文所述WebsocketDataChangedListener类中有onSelectorChanged方法。所以先在这个方法上打上断点。然后启动一个soul-e

2021-01-30 01:41:19 267

原创 Soul网关源码探秘《十二》 - 数据同步(后台接收篇)

前文探索了网关中服务自动检查探活的机制。同时也了解到当在后台调整选择器时,后台会通过 websocket 的方式将数据同步到网关。今天就接着探究后台是如何接收后台同步过来的配置的。准备工作启动后台(soul-admin)和网关(soul-bootstrap)两个项目。源码探秘网关接收配置同前文一样,在类UpstreamCacheManager的 sumbit 方法打上断点,然后在后台项目中编辑一条选择器规则。成功后,立即进入了断点位置。从调用栈可以看到,同步消息时到网关时,先到了SoulWeb

2021-01-28 00:37:33 246

原创 Soul网关源码探秘《十一》 - 服务探活

前文在分析DividePlugin插件执行插件逻辑的过程中,有看到是从缓存中取出可用服务列表,然后经过负载均衡算法选定最终的服务,之后转发到真实服务。那么缓存中的服务列表是如何维护的?何时新增?通过什么方式新增?当服务不可用时,又是如何同步的?接下来就研究一下这一块的逻辑。准备工作启动后台(soul-admin)和网关(soul-bootstrap)两个项目。不再启动HTTP测试服务。源码解析再次进行HTTP请求http://localhost:9195/http/order/findById?i

2021-01-27 01:08:53 224

原创 Soul网关源码探秘《十》 - 负载均衡 - Hash/RoundRobin

前文分析了DividePlugin插件中负载均衡的总体结构以及Random的具体实现。今天来探索剩下两种负载均衡是如何实现的。准备工作见Soul网关源码探秘《八》 - 负载均衡初探Hash找到具体实现类HashLoadBalance直接查看public DivideUpstream doSelect(final List<DivideUpstream> upstreamList, final String ip) { // 1. 遍历服务列表,为每个服务在生成 VIRT

2021-01-26 00:02:11 151

原创 Soul网关源码探秘《九》 - 请求处理流程

Soul 网关之前的处理流程前文探索插件链时提到,当有接收到一个请求的时候,会到达SoulWebHandler的handle。本文会探索使用DividePlugin插件接收一个请求到最终返回的全过程。在handle打上断点,发起请求。可以通过左侧调用栈来一点一点往前推处理的逻辑。首先是进入到DefaultWebFilterChain中的filter方法。public Mono<Void> filter(ServerWebExchange exchange) { retur

2021-01-23 23:05:46 110

原创 Soul网关源码探秘《八》 - 负载均衡初探

前文分析 DividePlugin 插件时发现 Soul 网关的负载均衡策略有三种,分别为 Random、Hash、RoundRobin。今天做一个初步研究。准备工作依次运行soul-admin、soul-bootstrap项目。之后分别以 8188,8189,8190 启动三个soul-examples-http项目。在soul-admin的配置中将三个项目的权重进行设置。源码分析负载均衡的类图比较清晰:其中 LoadBalance 是 SPI 接口。AbstractLoadBalan

2021-01-23 03:25:49 112

原创 Soul网关源码探秘《七》 - 插件链初始化分析

Soul网关源码探秘《七》 - 插件链初始化分析soul-bootstrap 与插件链之间的关系前文中我们发现soul-web项目启动时,在初始化SoulWebHandler的过程中会使用传入的参数plugins来形成插件链。那么问题来了,网关项目soul-bootstrap启动的时候,又是怎么形成插件链的呢?在初始化SoulWebHandler Bean的位置打一个断点,然后重启网关项目soul-bootstrap,验证是否会经过初始化SoulWebHandler Bean的逻辑。结果果然不出所料

2021-01-22 01:07:20 139

原创 Soul网关源码探秘《六》 - 插件链

Soul网关源码探秘《六》 - 插件链插件抽象类模版方法今天主要探究某一个插件的处理流程。首先来看一下AbstractPlugin提供的模版方法execute中做了什么。public Mono<Void> execute(final ServerWebExchange exchange, final SoulPluginChain chain) { /** 1. 获取插件名称 */ String pluginName = named(); /

2021-01-21 01:14:16 101

原创 Soul网关源码探秘《五》 - 插件链初探

Soul网关源码探秘《五》 - 插件链初探Soul 网关的一大特点是使用了插件化设计思想,插件热插拔,易扩展。这其中使用了责任链的设计模式实现了 Soul 中的插件链。若要研究插件链是如何实现的,我们先来研究一下责任链模式是什么责任链模式(Chain of Responsibility)维基百科中是这么定义责任链模式的:In object-oriented design, the chain-of-responsibility pattern is a design pattern consis

2021-01-20 00:50:21 187

原创 Soul网关源码探秘《四》 - Sofa/SpringCloud插件配置

Soul网关源码探秘《四》 - Sofa/SpringCloud插件配置配置 Sofa 插件在 soul-admin 中开启 sofa 插件在网关 soul-bootstrap 项目的 pom 文件中添加官方文档中指出的相关依赖。 <!-- soul sofa plugin start--> <dependency> <groupId>com.alipay.sofa</groupId>

2021-01-19 02:21:42 324

原创 Soul网关源码探秘《三》 - Dubbo插件配置

Soul网关源码探秘《三》 - Dubbo插件配置运行 soul-examples-alibaba–dubbo-service使用 brew 启动一个 zookeeper 服务,然后直接启动 soul-examples-alibaba–dubbo-service 项目。之后需要在 soul-admin 中开启 dubbo 插件。测试 dubbo 插件在 postman 中发送请求 http://127.0.0.1:9195/dubbo/order/findById?id=5,结果返回报错信息此

2021-01-17 04:53:20 116

原创 Soul网关源码探秘系列《二》 - 初体验

Soul网关源码探秘《二》 - 初体验运行 soul-example-http启动 soul-example-http 项目作为业务后端服务,默认在 application.yml 中已经配置好了 soul 网关。此时通过 Postman 使用 Get 方法请求 http://127.0.0.1:9195/http/order/findById?id=5通过 9095 端口访问到 soul 网关,网关再访问 8088 端口的实际后端服务,返回 id 和 name 代表网关已生效。负载均衡在 IDE

2021-01-16 00:56:12 247 1

原创 Soul网关源码探秘《一》 - 环境准备

Soul源码探秘系列1 - 环境准备本期配置 Soul 网关的环境,对功能进行初体验。工程构建下载工程# 先去 github fork 项目到自己的 repo,然后克隆到本地git clone git@github.com:zhangwei1989/soul.git下载速度堪比蜗牛,退而求其次克隆时加上参数--depth=1,只克隆下载包含最近一次 commit 的一个分支。编译运行cd soulmvn clean package install -Dmaven.test.skip=tr

2021-01-15 00:53:49 103

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除