Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

shotover is a high performance proxy #1507

Open
6 of 10 tasks
rukai opened this issue Feb 27, 2024 · 0 comments
Open
6 of 10 tasks

shotover is a high performance proxy #1507

rukai opened this issue Feb 27, 2024 · 0 comments

Comments

@rukai
Copy link
Member

rukai commented Feb 27, 2024

#1476 kicked off a bunch of work to refactor shotover in order to achieve its full performance potential.
I had a plan for future work but it was mostly in my head, so I really need a high level issue to track the high level goal and keep track of remaining tasks.

The remaining tasks in order:

  • remove old transform invariants
    • Rewrite RedisCache transform to use MessageId
    • Remove deprecated invariants from transform method docs
  • outgoing connection logic returns immediately when any messages are received
    • when an outgoing response receives a message it should trigger a tokio notify that starts the transform chain
  • Move Transform::transform_pushed into Transform::transform. Remove Transform::transform_pushed #1524
  • Remove duplicated pubsub logic from RedisSinkSingle Redis remove pushed messages #1532
  • unify outgoing connection logic
  • batch outgoing messages Improve performance of writing to sink outgoing connections #1471
  • swap single sinks to use SinkConnection::try_recv instead of SinkConnection::recv
  • add backpressure throughout the codebase:
  • Investigate swapping Encoder's to take a single message at once, and have the writer task call feed + flush instead of send on the FramedWrite.
    • Maybe we should have the connections deal with batching instead of the transforms. The transform just sends all the messages it wants to, then calls flush on all the connections it sent to.
  • Investigate TCP_NODELAY

Once this is complete, shotover should:

  • have higher throughput
    • processing requests is no longer blocked on responses
  • have lower latency
    • responses are processed immediately without waiting for ALL responses in a batch to come back.
  • not be blocked by slow cassandra responses
    • cassandra is not transformed into an in order protocol.
  • be resilient by exerting backpressure when large messages or large overall throughput is received.
    • we stop receiving messages from the client or DB when certain criteria is met about the current in flight requests/responses.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant