Skip to content

Some Suggestions #4

Description

@CMCDragonkai

Cool project, do you know of Netflix's Hystrix and Facebook's Haxl?

Some patterns that are useful (some that I've used before):

  • Request Coalescing (similar to batching, but instead of just batching all requests as a multi-request, it eliminates redundant requests, this was used in the case each request is asking for the same thing, then only send 1 request for all the multi-requests, and copy the response to each requester, instead of a time window, I did this with locks, because I needed low latency responses)
  • Circuit Pattern (as seen in: https://github.com/jlouis/fuse)
  • Workflow Monad (https://hackage.haskell.org/package/Workflow) - Useful for dropped connections and resumable connections/downloads (see http://oboejs.com/why)
  • Idempotence Monad (as seen in Stripe and https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/popl38-ramalingam.pdf) - this would enhance the retry pattern
  • All the stuff TCP did: ARQ, Forward Error Correction (useful for high bandwidth - high latency/low reliability connections or connections with only a forward link and no return link), Checksumming (I saw you mentioned that HTTP isn't the only thing you're focused on)
  • Dealing with Streams and not just Request Response, and handling exceptions (one may want to use on top of something like conduit (distributed conduits))

Also I'm thinking about how this would integrate with RPC frameworks like Cap'n Proto and promise pipelining feature.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions