Fehlertolerante verteilte Systeme durch Design