自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Soul 网关源码分析(十四)sentinel 插件

Soul网关中限流熔断的另外一个手段是使用 sentinel 插件,首先我们来粗略了解一下 Sentinel。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等维度上对微服务的稳定性提供保障。Hystrix 通过线程池的方式,来对访问的资源进行了隔离,虽然将资源之间彻底隔离开来,但是却增加了线程切换的成本,线程池大小的分配也是需要针对对应资源做预估计算和设置的。而 Sentinel 针对这个问题提供了两种解决方案:通过并发线程数进行限

2021-02-04 01:06:12 370

原创 Soul 网关源码分析(十二)ratelimiter 插件(二)

在上一篇我们熟悉了限流已经 ratelimiter 插件的实现原理,今天我们从源码入手详细地理一下整个流程。源码分析RedisRateLimiter类中:public RedisRateLimiter() { //这里会调用 redisScript函数,读取并设置 this.script this.script = redisScript(); initialized.compareAndSet(false, true);}/** * * @param id

2021-01-27 23:23:21 118

原创 Soul 网关源码分析(十一)ratelimiter 插件(一)

Soul 网关提供了限流插件,方便用户控制指定时间段内经过网关的请求数量。什么是“限流”?火锅店一般都有最大的容客量,大桌小桌的席位数是固定的。在就餐高峰期时,大量的食客会蜂拥而至,一般火锅店的员工是根据座位数分配的,如果不限制进入火锅店的人流,员工会忙不过来,食客的体验也会变差。在这里限制座位数就是一种限流的手段。而取到号牌并被叫到号的顾客才能入座就餐,这跟令牌桶后端架构中的限流一般分为两种,对外主要针对 DDOS攻击以及爬虫防范,对内主要控制热点公共服务调用的均匀分配。Soul 是如何做限流的?

2021-01-27 01:14:40 337 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 285

原创 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 139

原创 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 103

原创 Soul 网关源码分析(七)使用zookeeper同步数据到网关

与 websocket 数据同步方式类似,采用 zookeeper 的同步也很简单, 由于 zookeeper 的 watch 机制,sou-bootstrap 会监听配置的node,soul-admin 在启动的时候,也会跟websocker一样将数据全量写入 zookeeper。数据发生变更时,会对zookeeper 的节点做增量更新 ,并更新本地缓存。流程演示首先启动zookeeper,笔者使用 docker 启动。推荐使用 ZooInspector 来直观地看到 zookeeper 中节点的数

2021-01-22 01:22:40 161

原创 Soul 网关源码分析(六)使用websocket同步数据到网关

Soul 提供了多种数据同步的策略,默认且推荐的方式是使用 websocket。为了追求极致的响应速度,所有的配置没有选择存到redis,MySQL或是其他存储方式中,而是直接在HashMap中缓存,可以达到极低的延迟。下图是三种策略下,Soul 网关与 soul-admin 数据同步的流程:借助websocket的特性,DataChangedEventDispatcher 得以主动向 Soul 网关推送数据变更。当 soul-admin 与 soul-bootstrap 首次建立连接时,会向soul

2021-01-21 00:49:06 193 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 163

原创 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 545

原创 Soul 网关源码分析(三)dubbo 插件

在上一节中,我们尝试使用divide插件进行http代理,今天我们来看看Soul是如何将http协议,转换成dubbo协议的。首先在插件管理中开启dubbo配置:打开Soul 源码,编译下图路径的dubbo demo 项目:编译后我们把打包好的 Jar 包run起来,确保dubbo 插件已开启你的soul-bootstrap,soul-admin 在运行状态zookeeper 也在启动状态(默认端口2181),地址在:soul/soul-examples/soul-examples-

2021-01-17 01:26:05 297

原创 Soul 网关源码分析(二)divide, rewrite 插件

在上一节里我们编译好了 Soul 网关的源码,今天我们从rewrite插件开始学习如何对服务进行代理并重写路径。首先我们用Python写一个简单的Flask应用:from flask import Flaskapp = Flask(__name__)@app.route('/foo/bar/')def hello_world(): return 'Hello World!'if __name__ == '__main__': app.run()启动服务后,我们可以看

2021-01-16 01:45:13 653

原创 Mybatis 配置数据库连接properites文件的问题

只需要配置这些就好了, 其他的driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/snailoausername=rootpassword=root其他的在applicationContext.xml中配置. 不然可能会将数字读为字符串<!-- 初始化连接大小 --><property name="initialSize"

2016-08-11 16:14:34 460

空空如也

空空如也

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

TA关注的人

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