浅谈高性能网关Apache ShenYu

立春一段时间了,依然还是穿着厚厚的棉袄,西南的腹地偶尔一两个清晨,会有娇羞的阳光洒在阳台上,不过也是瞬息,这情景总会想起儿时清晨的家门口,阳光穿过雾,穿过杉树,形成一道道美丽的丁达尔效应,至今记忆犹新!

介绍

Apache ShenYu是一个异步的,高性能的,跨语言的,响应式的 API 网关,ShenYu谐音为神禹,相信大禹治水的故事作为华夏子孙都耳濡目染,它的设计是以插件为核心,扩展功能只需要以插件的方式加入便可,真正实现了热插拔,ShenYu本身提供了丰富的插件给我们使用,包括协议转换,比如http/https协议转SpringCloud协议,Dubbo协议,Tars协议等,安全插件,如jwt,sign等,还有限流等插件,总之,ShenYu对于API治理是非常的强大。

浅谈高性能网关Apache ShenYu

设计之美

我们从shenyu的插件,多协议,热插拔,规则这几个方面去聊一下,当然,不止这些,后面再继续聊其他的。

插件

ShenYu里面插件是最核心的,使用插件的好处是,和代码不耦合,如果需要开发新的插件,那么只需要实现相应的接口即可,它抽象出了一个ShenyuPlugin接口,只需要实现它,定义自己的逻辑便可,然后如果需要使用这个插件的时候,就将其开启便可,不需要使用时,关闭便可。

多协议

使用过SpringCloud的话,我们知道SpringCloud提供了一个网关SpringCloud GateWay,它提供了路由,断言,过滤器等功能,我们可以通过编写代码或者配置yml等文件进行配置,但是它和SpringCloud捆绑在了一起,我们使用SpringCloud才能使用它,而且通过配置文件去编写路由相关信息回比较麻烦,当服务很多,API管理就变得麻烦,并且不能对API进行精细化的管理,虽然它提供了动态路由,但是动态路由配置起来比较专业,需要专业的人进行配置,成本比较搞,而ShenYu提供了可视化的页面,可以更加方便的管理API,在ShenYu里面,SpringCloud也只是一个插件,我们还可以对Dubbo等框架进行管理。

热插拔

前面说了插件,但是是从代码层面去说,这里的热插拔是从使用层面去说,我们举一个例子,如果对API进行限流,我们可能会在接口层面编写限流的逻辑,可能使用Java并发类,或者Guava的RateLimiter类,或者Redis等方案进行限流,所以就需要编写代码,这已经和代码耦合在了一起,当然,如果设计合理,也可以将他们分离,但是,在一定程度上还是会业务代码有一定的挂钩,而ShenYu是面向API的,只要API被ShenYu代理了,那么就可以对API“为所欲为”了,如果现在系统的流量比较大,那么就可以动态调整限流,缓存等,待到洪峰过去后,可以进行调整或者直接关闭插件,这样就能够对系统进行最大程度的保护。

总而言之,它的热插拔就是,“该上的时候随时上,该撤离就随时撤离”。浅谈高性能网关Apache ShenYu

规则

规则是ShenYu里面很核心的点,如果我们使用过规则引擎,那么里面会定义很多条件,符合什么样的条件就执行什么样的逻辑,在代码中,if/else也是规则的判断,ShenYu的规则也是定义条件,当条件符合时,就执行对应的逻辑,它的规则隶属于选择器。

ShenYu会按照规则进行匹配,举个栗子,如果我们需要对某个API的结果进行缓存,那么只需要在缓存插件里面添加对应API的uri即可,但是现实可能变化莫测,需要从不同的维度进行缓存,那么就可以添加规则,比如根据查询参数缓存,根据ip地址进行缓存,或者根据域名缓存等,那么就可以添加多重条件,ShenYu提供了了多维度的规则,比如请求头,参数,uri,ip,cookie等,在实际使用中可以根据自己的需求进行设置,以减轻服务器的负担。浅谈高性能网关Apache ShenYu

总结

以上简单的聊了一下ShenYu的一些特性,并没有过多从代码层面去聊,只是从功能性层面去聊了一下,后续再从它的原理和代码去聊,相信会被它惊艳到,如果我们需要对API进行很好的治理,相信ShenYu是一个很不错的选择。

今天的分享就到这里,感谢你的观看,我们下期见!

原文始发于微信公众号(刘牌):浅谈高性能网关Apache ShenYu

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/150749.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!