重磅消息:Dromara团队正式开源高性能异步API网关-Soul
微服务为什么需要网关?
-
微服务的流行,服务之间的调用,需要统一的请求标准。
-
微服务接口,需要监控,限流,熔断,等等。
-
微服务接口需要统一的鉴权。
-
接口问题定位 A/B test等等。太多功能了,就不一一列举了。
Soul是什么? soul 是一款高性能,响应式的网关。我在参考Kong 的插件设计思想,高性能的webflux后,开发而来。
-
官网 : https://dromara.org 如果打不开,改成http即可.
-
github地址 :https://github.com/Dromara/soul
-
gitee地址: https://gitee.com/shuaiqiyu/soul
Soul架构设计
执行流程图
Soul功能:
-
支持各种语言,无缝集成Dubbo,SpringCloud,以及http服务。
-
丰富的插件支持,监控,鉴权,限流,熔断,代理,防火墙等等。
-
网关多种规则动态配置,支持各种策略配置。
-
插件热插拔,易扩展。
-
支持集群部署,支持A/B Test。
-
当然也有很多其他的功能,就不一一说了。
Soul 最大的亮点? 插件的热插拔,规则的动态配置。举个列子,比如一个接口你限流是1秒50次,但是你想调小点,像Springcloud-gateway 或者zuul 是不是还得改动配置 然后重启。 soul则不需要,直接在soul-admin找到对应的接口修改即可.
-
soul提供了比较丰富的插件功能,插件与插件规则,选择器,用户可以自由定义 不想用就停用或者删除就行。想用就开启或者新增。
-
soul 是基于webflux的, 依赖rxJava ,其实高性能的,响应式的网关。
-
soul 提供了dubbo ,springcloud rpc框架的支持。
Soul适合人群 是适合所有的微服务系统。
-
后端是java,使用了一些rpc框架(dubbo,springcloud), 然后前端或者其他系统是 .net php 然后需要对接? 然后你问java 后端开发者,dubbo接口怎么调用? java 狗肯定不愿意给你提供http接口,或者直接回一句,你去找领导吧? 这个时候,你只需要告诉它,使用soul,你后端代码一句都不要动,只需要告诉我你zookeeper的地址就好!
-
当然也适合一些其他语言的系统,或者是老系统。 只要你是http服务就行,soul会进行代理请求调用。
Soul性能
- soul 天然支持集群部署,底层采用webflux。
- soul 所有的配置走的都是本地缓存。
- 双11,我们的高峰单台QPS 1W左右。
Soul VS java体系的Zuul,springcloud-gateway
- 性能上来说,soul和sc-gateway 都采用webflux,性能相当
- sc-gateway 或者zuul 基于配置的,接口很多很难集成,而且配置规则不是动态化的。
- soul是插件化的思想,插件热插拔,配置灵活并且是动态化的。
- soul还可以用来排除问题,A/B test。
- soul提供了监控插件来统计qps等等信息。
- soul提供了waf,sign插件,来阻止外来攻击
soul vs kong
- kong 也是非常优秀的框架,但是其实lua语言,开发维护成本高,但是soul完全是java,所以javaer你懂的。
篇幅原因,此文只是一个简单介绍,Soul有很大的价值,喜欢的朋友可以去官网详细介绍。也欢迎大家进行star 和fork
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
JavaScript面向对象程序设计创建对象的方法分析
面向对象的语言具有一个共同的标志,那就是具有“类”的概念,但是在javascript中没有类的概念,在js中将对象定义为“无序属性的集合,其属性可以包含基本值,对象或者函数”,即其将对象看作是一组名值对的散列表。这样问题就来了,如何创建对象呢? 在最开始时使用object构造函数和对象字面量来创建单个对象,下面简要介绍这两种方法。 object构造函数:创建自定义对象的最简单方式就是创建一个object的实例,然后为这个实例添加属性和方法: var person=new object(); person.name="haha"; person.age=20; person.job="搞笑工作者"; person.sayName=function(){ alert(this.name); }; //前端全栈学习交流圈:866109386 //面向1-3经验年前端开发人员 //帮助突破技术瓶颈,提升思维能力 在上面的代码中,定义了一个person对象,并且添加了三个属性和一个方法,其中方法采用的时函数表达式的方式实现,这是用object构造函数的方式创建一个对象。 对象字面量: var p...
- 下一篇
ES6关于Promise的用法详解
Node的产生,大大推动了Javascript这门语言在服务端的发展,使得前端人员可以以很低的门槛转向后端开发。 当然,这并不代表迸发成了全栈。全栈的技能很集中,绝不仅仅是前端会写一些HTML和一些交互,后台熟悉数据库的增删查改。 想必接触过Node的人都知道,Node是以异步(Async)回调著称的,其异步性提高了程序的执行效率,但同时也减少了程序的可读性。如果我们有几个异步操作,并且后一个操作需要前一个操作返回的数据才能执行,这样按照Node的一般执行规律,要实现有序的异步操作,通常是一层加一层嵌套下去。 为了解决这个问题,ES6提出了Promise的实现。 含义 Promise 对象用于一个异步操作的最终完成(或失败)及其结果值的表示。简单点说,它就是用于处理异步操作的,异步处理成功了就执行成功的操作,异步处理失败了就捕获错误或者停止后续操作。 它的一般表示形式为: new Promise( /* executor */ function(resolve, reject) { if (/* success */) { // ...执行代码 resolve(); } else { ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS关闭SELinux安全模块
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS6,7,8上安装Nginx,支持https2.0的开启