Introduction to Reliable and Secure Distributed Programming (2. ed.)