Soul
文章平均质量分 63
wicked_wings
这个作者很懒,什么都没留下…
展开
-
Soul 网关源码分析(十四)sentinel 插件
Soul网关中限流熔断的另外一个手段是使用 sentinel 插件,首先我们来粗略了解一下 Sentinel。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等维度上对微服务的稳定性提供保障。Hystrix 通过线程池的方式,来对访问的资源进行了隔离,虽然将资源之间彻底隔离开来,但是却增加了线程切换的成本,线程池大小的分配也是需要针对对应资源做预估计算和设置的。而 Sentinel 针对这个问题提供了两种解决方案:通过并发线程数进行限原创 2021-02-04 01:06:12 · 402 阅读 · 0 评论 -
Soul 网关源码分析(十二)ratelimiter 插件(二)
在上一篇我们熟悉了限流已经 ratelimiter 插件的实现原理,今天我们从源码入手详细地理一下整个流程。源码分析RedisRateLimiter类中:public RedisRateLimiter() { //这里会调用 redisScript函数,读取并设置 this.script this.script = redisScript(); initialized.compareAndSet(false, true);}/** * * @param id原创 2021-01-27 23:23:21 · 142 阅读 · 0 评论 -
Soul 网关源码分析(十一)ratelimiter 插件(一)
Soul 网关提供了限流插件,方便用户控制指定时间段内经过网关的请求数量。什么是“限流”?火锅店一般都有最大的容客量,大桌小桌的席位数是固定的。在就餐高峰期时,大量的食客会蜂拥而至,一般火锅店的员工是根据座位数分配的,如果不限制进入火锅店的人流,员工会忙不过来,食客的体验也会变差。在这里限制座位数就是一种限流的手段。而取到号牌并被叫到号的顾客才能入座就餐,这跟令牌桶后端架构中的限流一般分为两种,对外主要针对 DDOS攻击以及爬虫防范,对内主要控制热点公共服务调用的均匀分配。Soul 是如何做限流的?原创 2021-01-27 01:14:40 · 363 阅读 · 2 评论 -
Soul 网关源码分析(十)使用集群模式部署soul-bootstrap
分析了多种数据同步方式后,我们来试试 Soul 网关的集群模式。首先我们使用 mvn clean intall && mvn clean package 来打出jar包,进入 soul-bootstrap/target,使用以下命令才启动多个 soul-bootstrap 服务:java -jar soul-bootstrap.jar --server.port=8095java -jar soul-bootstrap.jar --server.port=8096java -jar.原创 2021-01-26 21:53:04 · 303 阅读 · 0 评论 -
Soul 网关源码分析(九)使用 Nacos 同步数据到网关
Nacos 是一款发现、配置和微服务管理工具。它提供了一组简单易用的特性集,可以快速实现动态服务发现、服务配置、服务元数据及流量管理。安装启动好 Nacos 后,修改对应的 soul-admin 和 soul-bootstrap 中的配置:soul: file: enabled: true corss: enabled: true dubbo : parameter: multi sync:# websocket :#原创 2021-01-24 16:41:50 · 156 阅读 · 0 评论 -
Soul 网关源码分析(八)使用http长轮询 同步数据到网关
今天我们使用 http长轮询来同步数据到soul-bootstrap,相比websocket方式更为轻量,但同时时效性会略为降低。首先我们来看看什么是http长轮询。短连接:client每向server发起一次http请求,就建立一个tpc连接,任务结束则中断。在http长轮询机制中,client一样向server请求数据。然而,如果server没有可以立即返回给client的数据,则不会立刻返回一个空结果,而是保持这个请求等待数据到来(或者恰当的超时:小于ajax的超时时间),此时client进入之p原创 2021-01-23 06:57:39 · 123 阅读 · 0 评论 -
Soul 网关源码分析(七)使用zookeeper同步数据到网关
与 websocket 数据同步方式类似,采用 zookeeper 的同步也很简单, 由于 zookeeper 的 watch 机制,sou-bootstrap 会监听配置的node,soul-admin 在启动的时候,也会跟websocker一样将数据全量写入 zookeeper。数据发生变更时,会对zookeeper 的节点做增量更新 ,并更新本地缓存。流程演示首先启动zookeeper,笔者使用 docker 启动。推荐使用 ZooInspector 来直观地看到 zookeeper 中节点的数原创 2021-01-22 01:22:40 · 185 阅读 · 0 评论 -
Soul 网关源码分析(六)使用websocket同步数据到网关
Soul 提供了多种数据同步的策略,默认且推荐的方式是使用 websocket。为了追求极致的响应速度,所有的配置没有选择存到redis,MySQL或是其他存储方式中,而是直接在HashMap中缓存,可以达到极低的延迟。下图是三种策略下,Soul 网关与 soul-admin 数据同步的流程:借助websocket的特性,DataChangedEventDispatcher 得以主动向 Soul 网关推送数据变更。当 soul-admin 与 soul-bootstrap 首次建立连接时,会向soul原创 2021-01-21 00:49:06 · 223 阅读 · 2 评论 -
Soul 网关源码分析(五)Spring Cloud 插件(一)
上一篇文章中我们学习了 sign 插件是如何实现请求鉴权的,今天我们来试试 Soul 的Spring Cloud 插件。流程演示先解除soul-bootstrap Spring Cloud 依赖部分的如下注释: <!--soul springCloud plugin start--> <dependency> <groupId>org.dromara</groupId> <原创 2021-01-19 23:54:17 · 181 阅读 · 0 评论 -
Soul 网关源码分析(四)sign 插件
在上一节中,我们尝试dubbo插件将http协议转换成dubbo协议,今天我们来看看 sign 插件是如何实现请求鉴权的。流程演示我们先试试没有添加sign插件时,是否能正常请求接口:➜ ~ curl localhost:9195/dubbo/findAll{"code":200,"message":"Access to success!","data":{"name":"hello world Soul Alibaba Dubbo , findAll","id":"-803129909"}}原创 2021-01-19 01:45:02 · 581 阅读 · 0 评论