Skip to content

GIP: RPC fault tolerant algorithm with distributed ACK #9

@prdn

Description

@prdn

Status

[2017-06-22] Work In Progress

Problem

  • A Client c sends a request r0 for a service offered by N different Servers
  • Server s handles r0 but network between c and s becomes unavailable before s is able to send the result of the request back to c.
  • c wants to know if r0 was completed or not by s and decide whether retry (in case r0 failed) with another Server y or get the result in case of success.

Proposal

  • s writes to the DHT (using put feature) the result p (success/payload or error) of r0. The hash of the request-id rid is used as identifier
  • c waits until r0 times out and searches the DHT (using get feature) for rid
  • Case A: c is able to retrieve p. If r was successful then c does nothing. If r was unsuccessful c then may decide to resubmit
  • Case B: c is NOT able to retrieve p. Either s crashed before being able to write p to the DHT or also DHT reachability for s is compromised. c notifies the application to manually inspect r and its result.
  • s may crypto-sign p to prove the authenticity

Advantages

  • Use DHT storage as an asynchronous, fault tolerant and redundant system.

Notes

  • Creating grenache services for ACK storage works too but it's transport-implementation specific

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions