Scenario:
I have implemented GRPC client that translates HTTP JSON requests to Protobuf to connect to a GRPC server.
Two styles of this.
- As a Global gateway filter like
NettyRoutingFilter - As a HTTP service that follows similar code.
If I put it on "ludicruous load" the one without the GRPC and one with GRPC
localhost-direct-ludicrous-load:
target: "http://localhost:28082"
phases:
- name: warmup
duration: 10
arrivalRate: 1
- name: load
duration: 100
arrivalRate: 100
maxVusers: 750
When I run without the GRPC calls I have no issues with the load test (5-node Docker Swarm cluster running t3a.larges). But with the GRPC the gets bogged down by the "refresh" token which is the slowest and load generating part of the system.
Hypothesis:
What I am thinking is that I am probably doing things inefficiently on the client call end even if it was supposed to use Netty.
I tried parallel, boundedElastic, newParallel and newBoundedElastic it seems to be unable to handle the load cleanly.
Though because of Resillience4J the moment I take the load out, it starts functioning normally so at least the limitters are preventing connection timeouts.
If I narrow it down, to the OP question is What scheduler is used for NettyRoutingFilter in Spring Cloud Gateway? as that may be the thing I just need to set the scheduler to in order to get the performance I am expecting.