A Guide to Retry Pattern in Distributed Systems