[reSIProcate] UDP blacklist retry
Problem:
Multiple DNS records are tricky to use under UDP/failures.
<Solution>
0. Application sends UDP request.
1. Request fails after 32; DNS record is blacklisted and 408 is produced to app.
2. Application may retry immediately
2.1. if there is no additional DNS record an immediate 503 with Retry-After:
blacklist duration is returned.
2.2. if there is an additional DNS record, it is tried.
</Solution>
There is the usual question of how long to blacklist. The duration is an
increasing function of the number of remaining alternatives.
The remainder of this email mentions alternatives that were rejected.
An alternative was considered that involved connected UDP. The ICMP message is
not guaranteed when the server is down and may take a while to be delivered. Not
clearly helpful, and lots of development required
An alternative was discussed where another DNS record were tried before the 32
second timeout. This leads to weird forking and request merging and seems like a
rat hole.
An alternative was considered where the application could proceed in parallel
along multiple records. This seems doable but requires additional interface
between the application and the DNS cache, not to mention extensive application
development. Punt until later.
The take home message is that applications that use UDP must be prepared to wait
the full 32 seconds before trying another DNS record.
david
(Derek, Jason)