[ 
https://issues.apache.org/jira/browse/CASSANDRA-9318?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15382114#comment-15382114
 ] 

Sergio Bossa commented on CASSANDRA-9318:
-----------------------------------------

I've pushed a new update based on the most recent discussions, more 
specifically:
* I've implemented (and locally tested) rate limiting based on either the 
fastest or slowest replica; rate limiting on the average rate required 
computing such rate for all replicas in the whole cluster each RPC timeout 
interval (2 secs by default), which I deemed to be not worth it.
* I've removed the low ratio configuration: if we aim to keep the cluster as 
"responsive" as possible, throwing exceptions or prematurely hinting doesn't 
make sense.
* {{SP.sendToHintedEndpoints}} is largely unchanged: given we only rate limit 
by a single (fastest/slowest) replica, sorting the endpoints by back-pressure 
doesn't make sense either.

Answering to [~Stefania]'s latest comments:

bq. The proposal doesn't address: "The API should provide for reporting load to 
clients so they can do real load balancing across coordinators and not just 
round-robin."

This is misleading: the implemented back-pressure mechanism is cross-replica, 
so load balancing to different coordinators would be useless.

bq. we can add metrics or another mechanism later on in follow up tickets, as 
well as consider implementing the memory-threshold strategy.

Metrics can be added in this ticket once we settle on the core algorithm, but 
then yes any reporting mechanism to clients should be probably dealt with 
separately as it would probably involve changes to the native protocol (and I'm 
not sure what's the usual procedure in such case).

Regarding the memory-threshold strategy, I would like to stress once again the 
fact it's a coordinator-only back-pressure mechanism which wouldn't directly 
benefit replicas; also, [~aweisberg] showed in his tests that such strategy 
isn't even needed given the local hints back-pressure/overflowing mechanisms 
already implemented. So my vote goes against it, but if you/others really want 
it, I'm perfectly fine implementing it, but it will have to be in this ticket, 
as it requires some more changes to the back-pressure API.

> Bound the number of in-flight requests at the coordinator
> ---------------------------------------------------------
>
>                 Key: CASSANDRA-9318
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-9318
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Local Write-Read Paths, Streaming and Messaging
>            Reporter: Ariel Weisberg
>            Assignee: Sergio Bossa
>         Attachments: 9318-3.0-nits-trailing-spaces.patch, backpressure.png, 
> limit.btm, no_backpressure.png
>
>
> It's possible to somewhat bound the amount of load accepted into the cluster 
> by bounding the number of in-flight requests and request bytes.
> An implementation might do something like track the number of outstanding 
> bytes and requests and if it reaches a high watermark disable read on client 
> connections until it goes back below some low watermark.
> Need to make sure that disabling read on the client connection won't 
> introduce other issues.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to