In this paper we first describe a general conceptual framework for fault tolerance. This framework is widely adopted in industry and specifies the most common concepts and a defines a standard terminology for describing fault-tolerant systems. We also briefly list some of the most common problems that lead to failures in distributed systems. In the final part of the paper, we describe a practical and efficient pattern for structuring fault-tolerant distributed systems.