Apache ShenYu 集成 RocketMQ 实时采集海量日志的实践

本文作者:胡泰室, 快手Java开发工程师。

认识Apache ShenYu(神禹)

网关最重要的是流量治理,而流量治理与大禹治水有很多相似的地方,因此,网关的流量治理项目被命名为神禹。

ShenYu是一个高性能、多协议、易扩展、响应式的 API 网关,主要特性包括丰富的协议、插件化、流量治理和高性能。

ShenYu支持 HTTP、Spring Cloud、gRPC、Dubbo、Sofa、Tars、Motan 等协议。为了保证可扩展性,ShenYu采用了插件化的设计,支持热插拔,内置丰富的插件。插件化设计最大的好处为可扩展性强,ShenYu大量的流量治理功能都各自对应了不同的插件。ShenYu支持鉴权、限流、熔断、安全、负载均衡、灰度、动态上游、可观测性等丰富而灵活的流量管理。由于网关对性能要求特别高,ShenYu采用了响应式全链路异步,支持集群部署、蓝绿发布等。

客户端发起请求经过网关,再由网关将请求转换到服务提供者,并将服务提供者的响应发送给客户端。

从发起请求的角度来看架构,它支持多语言,不限操作平台。HTTP 请求首先经过一层代理层,代理层可以是 Nginx、ShenYuNginx、ShenYu代理或 K8s,将请求通过负载均衡路由到ShenYu集群中的节点上。ShenYu网关接收到请求之后,首先对请求进行筛选。网关为了保证性能,将各种元数据都存储在本地内存中,再配合高效的算法来实现高性能。

数据的请求处理离不开元数据,而元数据的获取主要依靠ShenYu网关与ShenYu后台的同步机制,在ShenYu admin 后台进行数据变更后,比如插件变更、选择器变更、规则变更、数据变更等,会通过一定的方式将变更同步到ShenYu网关中。

用户可以根据项目特点选择拉取或推送的同步方式。首先要对流量进行筛选,可以根据请求的 URL 查询参数、请求头、请求参数、host或请求 Body 等进行匹配。匹配的条件可以是 like、match、正则表达、包含或排除等,再通过 SPI 的方式来加载对应的实现。

如果流量匹配,则将流量转发到各个插件。各个插件形成插件链,每一个插件链对于匹配的流量会执行其插件功能。最终请求会经过出口插件转发到服务提供者,然后将服务提供者的响应转交给客户端。

对于网关运行状态的监控是非常重要的模块,可观测性指标loggin的请求量可能非常大,导致日志量也很大,这种情况一般需要集成消息队列。

ShenYu的流量筛选流程如上图所示,每个请求都有一定的元数据,可以根据这些元数据进行匹配来筛选出需要的请求。ShenYu的流量筛选有两个非常重要的组件,分别是选择器和规则。

请求到达后,首先判断插件是否开启,如果未开启,则不予处理;如果已开启,则插件对应的选择器会判断请求是否匹配。如果请求匹配,则将交给规则再进行一次匹配;如果不匹配,则交给下一个插件进行处理,匹配则执行插件。

选择器相当于一级匹配,是一种粗粒度的匹配,而规则相当于二级匹配,是一种细粒度的匹配,这样的设计能够保证更高的灵活性。

插件形成了一条插件链,前一个插件执行完后再决定是否交由下一个插件进行处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值