自定义博客皮肤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网关-18-数据同步机制之nacos

关于soul网关的数据同步机制,已经从源码里面大致了解了websocket数据同步、http长轮询数据同步、zookeeper数据同步,今天来看一下soul网关是怎么使用nacos进行数据同步的。先来了解一下nacos,根据nacos官方文档的介绍,可以知道:Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心

2021-02-04 22:40:39 433 1

原创 soul网关-17-sofa插件

之前的笔记里面介绍过soul网关的dubbo插件,它是靠dubbo的泛化调用来实现将http协议转成dubbo协议。这次来看下soul网关的sofa插件,首先把soul-admin、sofa示例项目、soul-bootstrap依次启动起来,看下效果。在soul-admin里面开启sofa插件soul-examples-sofa示例项目启动之后,在soul-admin管理后台就可以看到sofa插件里面已经有了selector和rule。启动soul-bootstrap,启动之前确保pom.xml

2021-02-02 22:32:17 252

原创 soul网关-16-dubbo插件

soul网关有divide插件可以进行http的代理,它还有dubbo插件可以进行dubbo服务的代理。dubbo插件的作用就是将用户的http请求转换成dubbo调用。运行soul网关的dubbo插件我们先来试一下soul网关的dubbo插件。首先启动soul-admin,并在soul-admin管理后台里面开启dubbo插件然后启动soul-examples-apache-dubbo-service示例项目,启动前先确保该示例项目的spring-dubbo.xml配置文件里的注册中心可以连接。该

2021-02-02 22:11:22 327

原创 soul网关-15-divide插件三种负载均衡方式是如何实现的

soul网关里面支持三种负载均衡方法:分别是随机、轮询、哈希。在divide插件里面根据负载均衡策略选定upstream的时候,是调用了LoadBalanceUtils的selector方法,如下所示。public class LoadBalanceUtils { /** * Selector divide upstream. * * @param upstreamList the upstream list * @param algorithm t

2021-01-31 10:03:16 202

原创 soul网关-14-context-path插件和rewrite插件

之前已经分析过soul网关divide插件如何进行请求代理,就像nginx支持rewrite一样,soul网关也支持对请求路径进行rewirte,实现这个需求的就是rewriter插件和context-path插件。我们先来看一下context-path插件,先来回顾一下context-path的概念,在分析普通springboot项目如何接入soul网关的那篇笔记中我们提到,普通的springboot项目需要在application.yml里面加入一些配置信息,这些配置信息里面就有contextPath

2021-01-31 07:12:15 321

原创 soul网关-13-数据同步机制之zookeeper

soul网关的数据同步支持多种方式,如websocket、http长轮询、zookeeper、nacos等。本文就来学习一下soul网关是如何使用zookeeper进行数据同步的。在分析soul网关源码之前,先来快速了解一下zookeeper相关知识。zookeeperzookeeper是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。docker安装zooke

2021-01-29 00:24:09 613

原创 soul网关-12-dubbo用户接入soul网关的原理

普通springboot项目如何接入soul网关,已经在之前的笔记里面学习过了。这次来学习一下dubbo用户如何接入soul网关。我们看一下soul-example/soul-example-dubbo/soul-example-apache-dubbo-service里面的apache dubbo示例项目,在里面对应的接口上面加上@SoulDubboClient注解就可以将接口自动注册到soul-admin后台。因为之前学习过普通springboot项目是通过@SoulSpringMvcClient注

2021-01-28 00:11:08 411

原创 soul网关-11-monitor插件

前几篇笔记学习了soul网关的一些插件,今天来学习一下soul网关的monitor插件,它可以监控自身运行状态(JVM相关),请求的响应迟延,QPS、TPS等相关metrics。首先看一下关于monitor插件的架构图在架构图中出现了一些不太熟悉的东西,比如Prometheus、Metrics。先来学习一下这两个概念。使用Aspect记录日志在日常的项目中,如果想在日志里面记录一下请求的具体参数、请求的耗时等,一般使用的方式是Aspect。我们就以soul-example-http为例,看下怎么

2021-01-27 01:28:28 937

原创 soul网关-10-divide插件的upstream探活

之前的笔记里面学习过普通springboot项目接入soul网关的时候,只要有@SoulSpringMvcClient注解的接口,就会被注册到soul-admin的divide插件的selector和rule里面去。soul网关不仅通过divide插件进行请求代理,还可以对业务的机器进行探活。假如说网关没有探活功能,那么当用户的请求过来之后,会直接转发给相关业务方。这个时候假如业务方的机器因为请求压力太大挂掉了,但是网关还是把大量的请求直接传过来了,业务方的机器还是会因为有大量的请求一直起不来。或者是业务

2021-01-25 23:50:22 208

原创 soul网关-9-数据同步机制之http长轮询(2)

上一篇笔记里面学习了soul网关数据同步机制之http长轮询在网关那侧的相关逻辑,这次来学习一下soul-admin里面关于http长轮询的实现逻辑。上一篇笔记里面提到过,soul网关会调用admin的/configs/fetch接口获取group的具体配置信息,会调用/configs/listener接口获取数据有变更的group的名字。这两个接口都在ConfigController里面,这个controller里面有一个HttpLongPollingDataChangedListener属性。Htt

2021-01-24 00:41:23 132

原创 soul网关-8-数据同步机制之http长轮询(1)

之前的笔记里面学习了soul网关数据同步机制之websocket,soul网关还支持其他的数据同步方式,例如zookeeper、http长轮询。大家熟知的http长轮询是由ajax发起的,当服务器收到客户端发来的请求后,服务器端不会直接进行响应,而是先将这个请求挂起,然后判断服务器端数据是否有更新。如果有更新,则进行响应,如果一直没有数据,则到达一定的时间限制(服务器端设置)才返回。soul网关里面的长轮询是不是传统的长轮询,本次就来学习一下soul网关是如何使用http长轮询来进行数据同步的。在第一

2021-01-23 23:13:28 165

原创 soul网关-7-waf插件

之前的一篇学习Divide插件的笔记里面分析过插件链,waf插件是插件链上排在sign插件后面的第二个插件。WafPlugin也继承自AbstractSoulPlugin,但在AbstractSoulPlugin的execute方法里面对waf插件与其他插件如divide插件稍有不同。divide插件在AbstractSoulPlugin的execute方法里面的处理过程是:判断内存缓存中是否有插件数据,没有则执行下一个插件判断插件数据中是否启用的标志位是否为true,否则执行下一个插件插件数据

2021-01-22 00:35:27 433

原创 soul网关-6-rateLimiter插件限流

前几篇学习笔记,从普通springboot项目接入soul网关的原理 -> 数据同步机制之websocket -> sign插件签名认证 -> divide插件请求代理,将soul网关的大致流程捋了一遍。今天学习一下soul网关的rateLimiter插件,看下它是如何实现限流的。看soul网关关于rateLimiter插件的介绍,它是采用redis令牌桶算法进行限流的。我们先来看下源码里面的相关实现。我们在第二篇笔记里面分析过插件链,知道了大部分插件是继承自AbstractSou

2021-01-21 00:55:56 560

原创 soul网关-5-普通springboot项目接入soul网关的原理

如果有多个产品线售卖API,那么他们都会有一些共性的需求,例如签名认证、限速等,为了避免每个产品线重复开发,那么可以实现一个网关系统来统一提供这些功能。那么大致的流程是这样的:1.产品线将自己要售卖的API注册到网关管理后台2.网关管理后台将数据同步到网关系统3.用户购买了某产品线的API之后,调用API。请求是统一发往网关的。4.网关对用户请求进行代理,转发给相应的产品线前几篇笔记里面,学习了soul网关divide插件如何进行请求代理和数据同步机制之websocket,对上述步骤里面的2

2021-01-18 22:10:13 908

原创 soul网关-4-sign插件签名认证

一个网关的下游是多个业务线,如果这些业务线都有鉴权的需求,那么可以使用网关的鉴权功能,没必要每个业务线都自己实现一套鉴权的代码。除非是与业务强相关的鉴权,是那种不具有普适性的需求。soul网关的鉴权功能是在sign插件模块,作为一个插件,是可以启用或者不启用的。我们来看下soul网关sign模块的大致功能。1.首先将环境启动一下,启动soul-admin管理后台、启动网关soul-bootstrap、启动示例的springboot项目soul-example-http2.在admin管理后台的sign

2021-01-18 22:08:58 1402

原创 soul网关-3-数据同步机制之websocket

大概一年前,我接到了一个网管系统的API管理后台的维护工作,当时那个系统的架构是这样子的:1.管理员在管理后台上更新数据2.数据都存储到DB里面3.crontab定时任务从DB里面读取表数据,组成某种格式,写入配置文件,存到磁盘4.网关系统发现磁盘上的配置文件的更新时间有变化,则重新载入配置文件到内存这个老系统使用crontab的方式定时从数据库里读取数据,肯定是不够实时的。而且还和管理后台读了同一个数据库,有一定的耦合。今天继续来进行soul网关源码的学习,看下soul网关的数据同步机制

2021-01-17 04:22:54 515 1

原创 soul网关-2-divide插件

先来设想一下,网关如果收到了一个请求http://xxx.com/openapi/appname/order/findById?id=3,那么怎么将请求转发给对应的业务?可以想象一下大概是这几个步骤:1.解析url2.查看配置文件,看这个url是对应于哪个业务线3.读配置文件,获取该业务线在网关注册的所有api列表4.判断该用户的这个api请求在不在业务的api列表里面5.进行相关的鉴权操作(用户AK/SK鉴权、用户Quota/QPS有没有超)6.如果网关有负载均衡功能,那么需要获取业务具体

2021-01-15 23:18:03 454

原创 soul网关-1

以前接手过一个网关系统里面一个子系统的维护工作,后来没多久就移交出去给别人了,也没太细看里面的源码。本次学习一下soul网关源码的机会,补足一下自己在网关方面的知识欠缺。一个网关应该具有以下基本功能:路由转发限流熔断日志监控安全认证首先,看一下soul官网的介绍,soul网关除了以上基本功能之外,还有一些其他的特性:支持各种语言(http协议),支持 dubbo,springcloud协议插件化设计思想以及丰富的插件支持流量配置动态化支持A/B Test后面几篇笔记将针对网关的

2021-01-15 02:36:48 495

空空如也

空空如也

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

TA关注的人

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