Aeraki 不错匡助你在就业网格中科罚任何七层合同。当今 Aeraki 仍是扶持了 Dubbo、Thrit、Redis 等开源合同。你还不错使用 Aeraki 的 MetaProtocol 合同扩张框架来科罚零碎合同的七层流量。 本系列教程将先容若何通过 Aeraki 来在就业网格中为 Dubbo、Thrift 等合同的就业提供七层流量路由、腹地限流、全局限流,以及若何基于 Aeraki Protocol 快速拓荒一个自界说合同,并在 Istio 就业网格中对遴选自界说合同的就业进行科罚。 本篇教程先容若何运用 Areaki 提供的 MetaRouter CRD 资源对基于 MetaProtocol 拓荒的应用合同诞生腹地限流法律讲解注解。 装配示例门径要是你还莫得装配示例门径,请参照 快速驱动(https://www.aeraki.net/zh/docs/v1.0/quickstart/) 装配 Aeraki,Istio 及示例门径。 装配完成后,不错看到集群中增多了底下两个 NS,两个 NS 平离别装配了基于 MetaProtocol 杀青的 Dubbo 和 Thrift 合同的示例门径。你不错选用任何一个门径进行测试。 ➜ ~ kubectl get ns|grep meta meta-dubbo Active 16m meta-thrift Active 16m Aeraki 的限流法律讲解注解野心直觉而机动,既扶持对一个就业的所有这个词入向央求进行限流,也扶持按照不同的条目对一个就业器的央求进行细粒度的限流末端。 对就业的所有这个词入向央求进行限流kubectl apply -f- <<EOF apiVersion: metaprotocol.aeraki.io/v1alpha1 kind: MetaRouter metadata: name: test-metaprotocol-thrift-route namespace: meta-thrift spec: hosts: - thrift-sample-server.meta-thrift.svc.cluster.local localRateLimit: tokenBucket: fillInterval: 60s maxTokens: 2 tokensPerFill: 2 EOF
备注:因为腹地限流是在一个服求实例上进行处理的,因此当就业有多个实例,骨子的限流成果为限流数目乘以实例数目。 使用 aerakictl 号令来搜检客户端的应用日记,不错看到客户端每分钟只可得手实践 4 次央求(有两个服求实例,每个服求实例限流为每分钟 2 次): ➜ ~ aerakictl_app_log client meta-thrift -f --tail 10 Hello Aeraki, response from thrift-sample-server-v1-5c8476684-842l6/172.17.0.40 Hello Aeraki, response from thrift-sample-server-v2-6d5bcc885-hpx7n/172.17.0.41 Hello Aeraki,久久久久波多野结衣高潮 response from thrift-sample-server-v1-5c8476684-842l6/172.17.0.40 Hello Aeraki, response from thrift-sample-server-v2-6d5bcc885-hpx7n/172.17.0.41 org.apache.thrift.TApplicationException: meta protocol local rate limit: request '5' has been rate limited at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:79) at org.aeraki.HelloService$Client.recv_sayHello(HelloService.java:61) at org.aeraki.HelloService$Client.sayHello(HelloService.java:48) at org.aeraki.HelloClient.main(HelloClient.java:44) Connected to thrift-sample-server org.apache.thrift.TApplicationException: meta protocol local rate limit: request '1' has been rate limited ...按条目对就业的入向央求进限流 Aeraki 扶持按照条目为就业诞生多个限流法律讲解注解,以逍遥细粒度的限流要求。举例按照用户简略对接口对央求进行分组,并对每个分组诞生不同的限流法律讲解注解。 分组限流的匹配条目和路由匹配条目疏通,任何不错从央求数据包中索要出来的属性都不错用于限流法律讲解注解的匹配条目。 举例底下的法律讲解注解为 sayHello 和 ping 两个接口离别诞生了不同的限流条目: apiVersion: metaprotocol.aeraki.io/v1alpha1 kind: MetaRouter metadata: name: test-metaprotocol-thrift-route namespace: meta-thrift spec: hosts: - thrift-sample-server.meta-thrift.svc.cluster.local localRateLimit: conditions: - match: attributes: method: exact: sayHello tokenBucket: fillInterval: 60s maxTokens: 10 tokensPerFill: 10 - match: attributes: method: exact: ping tokenBucket: fillInterval: 60s maxTokens: 100 tokensPerFill: 100同期诞生按就业和按条目的限流法律讲解注解 不错同期诞生就业粒度的限流法律讲解注解和按照条目的限流法律讲解注解,这适用于需要对一个就业的所有这个词央求诞生一个举座的限流法律讲解注解,同期又需要对某一组简略几组央求诞生例外的情况。 举例底下的限流法律讲解注解为就业诞生了一个 1000 条/分钟的举座限流法律讲解注解,同期单独为 ping 接口诞生了 100 条/分钟的限流条目。 apiVersion: metaprotocol.aeraki.io/v1alpha1 kind: MetaRouter metadata: name: test-metaprotocol-thrift-route namespace: meta-thrift spec: hosts: - thrift-sample-server.meta-thrift.svc.cluster.local localRateLimit: tokenBucket: fillInterval: 60s maxTokens: 1000 tokensPerFill: 1000 conditions: - match: attributes: method: exact: ping tokenBucket: fillInterval: 60s maxTokens: 100 tokensPerFill: 100交融旨趣 Aeraki 向 Sidecar Proxy 下发的建树中为就业对应的 Listener 诞生了 MetaProtocol Proxy,建树中诞生了 local rate limit filter。 Aeraki 会将 MetaRouter 中建树的限流法律讲解注解翻译为local rate limit filter 的限流建树,通过 Aeraki 下发给 MetaProtocol Proxy。 不错通过底下的号令搜检就业的 sidecar proxy 的建树: aerakictl_sidecar_config server-v1 meta-thrift |fx 其中 Thrift 就业的 Inbound Listener 中的 MetaProtocol Proxy 建树如下所示: { "name": "envoy.filters.network.meta_protocol_proxy", "typed_config": { "@type": "type.googleapis.com/udpa.type.v1.TypedStruct", "type_url": "type.googleapis.com/aeraki.meta_protocol_proxy.v1alpha.MetaProtocolProxy", "value": { "stat_prefix": "inbound|9090 |