目录
初衷
最近公司在做项目重构,将现有的单体应用要转变为微服务架构,那大家知道的微服务架构前置网关是非常重要的,所以此栏目会就网关进行展开介绍。
为什么要使用网关
在现代应用程序架构中,微服务和云计算的兴起导致了应用程序的复杂性增加,服务之间的通信变得更加复杂。因此,需要一种工具来处理流量路由、身份验证、授权、限流、负载均衡等任务,同时提供安全性和可扩展性。这就是网关的作用,它是一个中间层,位于客户端和后端服务之间,用于管理和控制请求和响应。
网关选型,为什么是ShenYu
首先我们在市面上见到的网关很多,最常见的使用最多的应该是Spring Cloud GateWay
,还有kong
、zuul
等等网关。网上现在有很多网关之间对比介绍,我这里就不赘述了。下面我列举一下为什么要选择ShenYu。
性能
根据众多大佬的测试,Shenyu
和SpringcloudGateWay
的性能差距很小,甚至可能ShenYu
的性能更优,这个是听说,本人没有实际测试哈。
插件化
这个也是ShenYu
的一个特色,ShenYu
有很多插件化组件,而且是插拔式的,即插即用。而且还可以自己拓展插件,自定义插件。
二次开发
因为是完全开源项目,所以二次开发起来很容易,代码写的非常清晰,而且注释也是非常好的,加上我们团队也是java开发。
可视化界面
ShenYu
有一个独立的admin
后台,对于维护来说可是非常的友好的。当然这个有利也有弊,需要单独部署服务。
支持dubbo
由于我们的微服务架构是ShenYu
+ dubbo3
,ShenYu
是支持dubbo
的。
安全性和认证
ShenYu提供了强大的安全性功能,包括身份验证和授权机制,您可以使用它来确保只有授权用户可以访问您的服务。这对于保护敏感数据和应用程序至关重要。
社区支持
ShenYu拥有一个活跃的社区,这意味着您可以获得及时的支持、问题解答和更新。这对于确保您的网关保持最新和安全非常重要。
与市面其他网关进行对比
ShenYu vs. Spring Cloud Gateway
ShenYu优势
-
多协议支持: ShenYu支持多种协议,包括HTTP、gRPC等,使其适用于不同类型的应用程序。
-
开源性质: ShenYu是一个开源项目,没有许可费用,可以根据需要自由定制。
-
流量管理: ShenYu提供了广泛的流量管理功能,包括请求路由、限流、负载均衡等,以提高性能和可伸缩性。
-
安全性和认证: ShenYu提供了强大的安全性功能,有助于保护应用程序和数据。
-
活跃的社区支持: ShenYu拥有活跃的社区,提供及时的支持和更新。
Spring Cloud Gateway优势
- Spring生态系统: Spring Cloud Gateway是Spring生态系统的一部分,与其他Spring组件(如Spring Boot和Spring Cloud)紧密集成,使其在Spring项目中易于使用。
- 过滤器链: 它采用了过滤器链的概念,允许开发人员编写自定义过滤器以处理请求和响应。
- 集成性: 与Spring Cloud一起使用时,可以轻松集成服务发现、负载均衡等功能。
对比
- ShenYu和Spring Cloud Gateway都是开源项目,但ShenYu更专注于微服务架构。
- Spring Cloud Gateway在Spring生态系统中更容易集成,对于已经使用Spring的团队可能更具吸引力。
- ShenYu的多协议支持可能对某些项目更有吸引力,尤其是涉及到gRPC等非HTTP协议的情况。
ShenYu vs. Apache APISIX
ShenYu优势
- 多协议支持: ShenYu支持多种协议,适用于不同类型的应用程序。
- 开源性质: ShenYu是一个开源项目,没有许可费用,可以根据需要自由定制。
- 流量管理: ShenYu提供了广泛的流量管理功能,包括请求路由、限流、负载均衡等,以提高性能和可伸缩性。
- 安全性和认证: ShenYu提供了强大的安全性功能,有助于保护应用程序和数据。
- 活跃的社区支持: ShenYu拥有活跃的社区,提供及时的支持和更新。
Apache APISIX优势
- 高性能: APISIX以高性能著称,特别适用于需要处理大量请求的场景。
- 可扩展性: 它具有灵活的插件系统,允许用户自定义功能和行为。
- 实时监控: APISIX提供了实时监控和仪表板,帮助管理员了解网关的性能和运行状况。
对比
- ShenYu和Apache APISIX都是开源的高性能API网关。
- APISIX在处理大量请求时具有出色的性能和低延迟。
- ShenYu更注重多协议支持和微服务架构,适用于不同的使用情境。
分享
下面会分享我们实际项目中使用到的网关的相关功能,以及会分享一些对于ShenYu
的一些改造,以及对于ShenYu
的一些源码分析和使用到的每个插件的一些源码分析,如果有分析的不对的,或者大家有更好的见解,欢迎大家指导。