点击上方蓝色“程序猿DD”,选择“设为星标”

回复“资源”获取独家整理的学习资料!

作者:猫大人

来源:转载自公众号「Dromara分布式事务」

Soul发布全新的架构2.2.0版本 让网关变得如此简单

我们还是先来看看新增功能,然后再讲故事。

  • 完全的插件化架构设计,插件热插拔。

  • 完整支持dubbo所有版本,alibaba-dubbo ,apache-dubbo。

  • 支持dubbo泛化调用,多参数,复杂参数接口。

  • 增强monitor插件,移除influxdb支持,新增内存,CPU,QPS,TPS,响应迟延等metrics,支持接入Prometheus。

  • springCloud插件支持eureka与nacos二种注册中心。

  • waf插件增强,支持黑白名单,以及混合模式。

  • 抽离Hystrix熔断功能,独立成插件支持。

  • 修护Zookeeper数据同步方式bug,新增nacos同步数据方式。

  • 多种soul-client支持,提供传统spring,以及springboot等方式接入。

  • 优化 soul-admin后台控制界面。

  • 负载均衡算法bug修护。

  • 修护大文件上传时候的bug。

  • .......太多了不一一列举了。

体验新架构,10分钟搞定一个高可用高性能网关。

启动 soul-admin
  • 下载soul-admin.jar包,并启动.

> wget  https://yu199195.github.io/jar/soul-admin.jar
> java -jar soul-admin.jar --spring.datasource.url="jdbc:mysql://你的url:3306/soul?useUnicode=true&characterEncoding=utf-8&useSSL=false"  --spring.datasource.username='you username'  --spring.datasource.password='you password'
  • 访问 http://localhost:9095/index.html 默认的用户名:admin  密码:123456。

搭建属于你的网关
  • 首先你新建一个空的springboot项目,可以参考 soul-bootstrap. 也可以在spring官网:[https://spring.io/quickstart]

  • 引入如下jar包:

  <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId><version>2.2.2-RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><version>2.2.2-RELEASE</version></dependency><!--soul gateway start--><dependency><groupId>org.dromara</groupId><artifactId>soul-spring-boot-starter-gateway</artifactId><version>2.2.0</version></dependency><!--soul data sync start use websocket--><dependency><groupId>org.dromara</groupId><artifactId>soul-spring-boot-starter-sync-data-websocket</artifactId><version>2.2.0</version></dependency>
  • 在你的 application.yaml 文件中加上如下配置:

spring:main:allow-bean-definition-overriding: truemanagement:health:defaults:enabled: false
soul :sync:websocket :urls: ws://localhost:9095/websocket  //设置成你的soul-admin地址
  • 这样网关的环境就已经搭建完成。

体验新架构下的插件热插拔

  • 问:我想使用熔断功能,应该如何做呢?

  • 答:你可以在pom.xml文件 引入以下依赖,更多的还请看:https://dromara.org/zh-cn/docs/soul/soul.html

  <!-- soul hystrix plugin start--><dependency><groupId>org.dromara</groupId><artifactId>soul-spring-boot-starter-plugin-hystrix</artifactId><version>2.2.0</version></dependency><!-- soul hystrix plugin end-->
  • 问:我怎么接入dubbo服务呢?

  • 答:1)如果你使用的是alibaba-dubbo,那么你应该引入如下:

   <!--soul alibaba dubbo plugin start--><dependency><groupId>org.dromara</groupId><artifactId>soul-spring-boot-starter-plugin-alibaba-dubbo</artifactId><version>2.2.0</version></dependency><!-- soul alibaba dubbo plugin end-->

2) 如果你使用apache-dubbo,那么你应该引入如下:

   <!--soul apache dubbo plugin start--><dependency><groupId>org.dromara</groupId><artifactId>soul-spring-boot-starter-plugin-apache-dubbo</artifactId><version>2.2.0</version></dependency><!-- soul apache dubbo plugin end-->
  1. 更多的使用请你参考:https://dromara.org/zh-cn/docs/soul/user-dubbo.html

  • 问:如果我想使用限流功能呢?

  • 答:你可以引入以下依赖,具体的参考:https://dromara.org/zh-cn/docs/soul/plugin-rateLimiter.html

  <!-- soul ratelimiter plugin start--><dependency><groupId>org.dromara</groupId><artifactId>soul-spring-boot-starter-plugin-ratelimiter</artifactId><version>2.2.0</version></dependency><!-- soul ratelimiter plugin end-->
  • 总而言之,你想要使用什么插件,你就新增该插件的依赖。就这?是热插拔么。。

  • 问:那有些插件我不想用了怎么办?

  • 答:在soul-admin后台禁用该插件即可,想用就开启。

Soul网关的特性

  • 我觉得最大的特色是在流量筛选和管控方面。无论多复杂的请求,可以根据各种条件,规则,匹配方式,来进行流量过滤,筛选,处理。这个过程完全是可视化,自定义,即时生效的,程序无需任何更改。

  • 每个配置都在soul-admin 控制台配置,会同步到每个Soul网关节点的JVM内存,这也是Soul集群高性能的关键之一,在soul网关内部,使用了http长轮询,websocket,zookeeper等方式,独立实现了分布式配置中心的功能。

  • Soul网关使用Reactor编程方式来实现,独立了线程调度,低消耗,经过网关的流量,我们在开启10个插件都处理的情况下,延迟是1~2ms。

  • 插件机制,默认提供了限流,熔断,黑白名单,认证等等插件。

  • 支持A/B test,蓝绿发布(因为掌控了所有流量这个很容易做)。

Soul网关有哪些使用场景,又有哪些值得你关注或者学习的?

首先我觉得还是实用主义,需要用到,才会去了解。那么在什么场景下,你需要用到呢?

后台管理web

  • 首先随便微服务的流行,我们的后台都划分成很多的微服务,我相信你们每个公司都有一个后台管理系统吧,如果我没猜错的话,他们大体上是如下架构。

  • 它会有什么问题呢?大家思考一下。

    • 每个微服务项目的开发人员都在这上面进行开发,会越来越笨重。

    • 如何发版的问题?你要发布商品模块的接口,会造成所有其他的模块使用不了。

    • 假如某一个模块接口的请求量很大(需要部署多个),另一个模块而不需要,你又怎么做?

  • 有人又会说,那我把他们拆处理,拆成一个一个web不就行了么?但是这样又会带来一个新的问题,负载均衡在哪里做?统一的认证在哪里做?

  • Soul网关就很好了解决了以上所有问题,只需要把你的微服务注册到Soul网关。你想怎么玩都可以,不重样的.. 比如 order模块有2个应用,你要发布新的版本,你可以在网关里面,把流量先打到其中一个,另一个进行更新,更新完了以后,再把流量放过去。改变了以前运维掌控一切的观念,java程序员,也可以玩的更好,运维都省了,向老板申请加薪指日可待。

  • 需要统一鉴权?你只需要在网关新增一个适合自己业务的鉴权插件就OK。

公司入口网关(开放平台)

  • 如果一个公司要做开放平台或者入口网关,鉴权,限流,监控,熔断肯定少不了。

  • 如果贵公司是dubbo体系,开发人员写了dubbo服务后,还要傻乎乎的新增一个web项目,来提供接口给别人调用吗?

  • 如果一个接口被攻击,你怎么处理呢?如果被大流量攻击,你怎么处理呢?

  • 不巧,soul 在设计之初就是来干这种事情的,我们来看一下整体的架构图。

  • Soul网关是使用响应式编程实现的,响应式编程绝对是未来 java邻域的重要方向,看风向标Spring体系就好了。我在14年的时候,天天写for循环操作集合,溜的一笔。领导对我说,要使用lambda表达式,这是未来的重点,今天来看,如果你是java程序员,你不会lambda函数式编程,你好意思么。

从发布2.2.0,谈谈近几年的开源体会。

我是17年左右的时候,开始写开源项目的,最开始我和王亮一起讨论设计了LCN分布式事务,后面自己又陆续写了Hmily,Raincat,Myth等分布式事务中间件,再后来写了Soul网关,这一路走来,遇到很多很有意思的事,也遭受很多小白用户的摧残。总的感觉,一个好的开源项目,高扩展,可插拔的设计实在太重要了。

  • 案例一 : Soul网关刚开始数据同步只支持Zookeeper方式,有些用户反馈,我们没有zk,那怎么办?

  • 案例二 :Soul网关是支持Dubbo的,但是有些用户是alibaba-dubbo,有些用户apache-dubbo,你又怎么说?

  • 案例三 :soul刚开始提供的客户端都是基于Springboot的,有些用户是传统的Spring,你又怎么说?

所以插件化设计,SPI可插拔设计势在必行。

SPI VS 可插拔

诚然SPI扩展方式,是可插拔的基石,但是他们又不完全等同。举个列子:假如我们先存储一条数据,你定好了SPI接口,也有Mysql,mongodb,elasticseach,zookeeper等等多种方式实现,现在你要考虑的是把它组合在一起项目里面,还是放在不同的项目,按需打包和加载呢?这些都是要考虑的,所以不能一股脑的SPI方式。

checkStyle
  • 严格的代码规范,是对源码学习中,框架使用者的尊重,更是一种开源的态度。

  • 严格的代码规范,让人看起来舒服,也更容易让人理解整个代码。

  • 也希望各位小伙伴提交PR的时候,至少本地要Install成功,之前有些PR,为了不打击他们的积极性,合并之后流着泪修改。

参与开源
  • 目前我主要专注于Apache ShardingSphere,这是中国人在apache组织的第一个关于数据库分库分表的顶级项目,欢迎大家参与进来。https://github.com/apache/shardingsphere

  • 参与 soul网关 :https://github.com/Dromara/soul

  • 国人在开源方面,技术方面大到芯片,小到MATLAB ,都落后挺多的,也希望大家拥有开源的心态,多参与开源,学习技术,宣传思想,为往圣继绝学!

往期推荐

Spring Boot 2.x基础教程:JdbcTemplate的多数据源配置

面试:你知道Java中的回调机制吗?

两种写法的效果一样,那么到底哪一种更好呢?

StackOverflow 上面最流行的 7 个 Java 问题!

MySQL百万级、千万级数据多表关联SQL语句调优

以为是行废代码,原来有这作用!

欢迎加入我的知识星球,聊聊技术、说说职场、扯扯社会。

头发很多的中年程序员DD在这里期待你的到来!

加入方式:长按下方二维码噢

最近更新

【技术圈】关于Consul作为注册中心的四种形态演变

【技术圈】配置中心除了存储应用配置之外,适合做其他配置的存储吗?

【社会人】老实工作没有其他收入,为什么还要补缴个税?

【社会人】除了年终汇算清缴之外,今年的另一件大事:LPR

【聊职场】过来人说说银行科技怎么样?值得进去吗?

我的星球是否适合你?

点击阅读原文看看我们都在聊啥

Soul网关发布2.2.0:让高性能网关变得如此简单!相关推荐

  1. Soul网关发布2.2.0 | 让高性能网关变得如此简单!

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入新技术 本文来自:猫大人的Dromara分布式事务 Soul发布全新的架构 ...

  2. 天玥运维安全网关默认密码_Soul网关发布全新架构V2.2.0,让高性能网关变得如此简单

    我们还是先来看看新增功能,然后再讲故事. 完全的插件化架构设计,插件热插拔. 完整支持dubbo所有版本,alibaba-dubbo ,apache-dubbo. 支持dubbo泛化调用,多参数,复杂 ...

  3. Soul网关发布2.1.X之后,它到底有多方便?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 Soul 网关自从去年10月我开源以来,经历了一年的事情, ...

  4. [转载]芋道 Soul 极简入门(国产微服务网关)

    摘要: 原创出处 http://www.iocoder.cn/Soul/install/ 「芋道源码」欢迎转载,保留摘要,谢谢! 由于原著写作时间时间有点久了:有部分类容需要更新,后去个人会再发布文章 ...

  5. mysql数据库行业应用_腾讯云发布MySQL 8.0数据库 可应用至更多行业场景

    原标题:腾讯云发布MySQL 8.0数据库 可应用至更多行业场景 来源:21财经 目前,腾讯云数据库已有20多种数据库服务,包括云数据库MySQL.云原生数据库CynosDB.数据库智能管家DBbra ...

  6. 9月11号华为发布鸿蒙2.0和EMUI 11,来看看鸿蒙最牛逼的地方

    2019年发布了鸿蒙1.0 鸿蒙os 2020年9月11号将发布鸿蒙2.0 链接:https://developer.huawei.com/consumer/cn/events/hdc2020/ 什么 ...

  7. android5.0模拟器pc版,逍遥安卓独家发布支持5.0安卓系统电脑模拟器

    原标题:逍遥安卓独家发布支持5.0安卓系统电脑模拟器 逍遥安卓是目前国内极少数全自研的安卓模拟器,自2015年6月发布后便深受用户追捧,速度快.省资源.无限开.响应快及高性能已经成为逍遥安卓在安卓模拟 ...

  8. Soul新发布录音有电流 杂音 m4a文件夹 解决方法

    原创文|Space9 Soul新版发布长录音之后会出现空录音,听着有电流 滋滋响 的杂音 自新版Soul3.0.26更新之后,就出现了这个问题 导致之前替换录音文件的方法失效 下面这篇文章中进行了更新 ...

  9. 支持百万并发高性能网关设计实现系列:什么是网关?

    网关是个什么东东?为什么需要网关? 随着微服务架构不断兴起,以前的一个大的单体应用根据不同的业务域拆分为不同的微服务系统进行维护和部署.因此各个微服务对外提供的服务接口API会呈现出爆发式的增长,如何 ...

最新文章

  1. JS魔法堂:属性、特性,傻傻分不清楚
  2. 陈老师Linux内核内存寻址导学
  3. 小汤学编程之JAVA基础day01——JAVA基本概念、第一个JAVA程序
  4. java中int和Integer对比的一些坑
  5. 如何制作高效率的数据可视化大屏
  6. python灰度处理_python 简单图像处理(14) 灰度图腐蚀和膨胀,开运算、闭运算...
  7. 提高局域网速度的21招
  8. android studio2.3.6,Android Studio 2.3 问题汇总 - 解决一切障碍,为了更好的时代
  9. msxml6_x86.msi和msxml6_ia64.msi和msxml6_x64.msi的选择
  10. matlab 拉普拉斯金字塔,图像拉普拉斯金字塔(laplacian pyramid)并从金字塔重建原图 matlab程序实现...
  11. 腾讯云联手腾讯安全玄武实验室,提供「应用克隆」漏洞免费检测服务
  12. 2018213969 冉雨晨 对cookie与session的了解
  13. Linux文档结构和常用命令
  14. 男生晚上做什么兼职好?有什么好兼职推荐吗?
  15. 姊妹篇:我是一块声卡
  16. ElasticJob‐Lite:HTTP作业
  17. 【Springboot】整合wxjava实现 微信小程序:模板消息
  18. 融云发送图片消息_融云IM SDK集成,Server API 发送图片消息时,缩略图生成逻辑说...
  19. 《蜀汉天下》地图制作之一:英雄制作
  20. 2021-4-25日语学习

热门文章

  1. Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart
  2. golang 系统调用 syscall 简介
  3. linux 创建 虚拟文件系统设备 文件节点 使用 proc_create 实例 简介
  4. routersploit 路由器漏洞检测及利用框架
  5. linux 五种IO模型 简介
  6. mysql -p与密码之间不能有空格
  7. golang []byte和string相互转换
  8. sqlite3.OperationalError: database is locked
  9. Error response from daemon: Conflict. The container name /mysql is already in use by container
  10. 数据结构 -- 单链表