An active replication scheme that tolerates failures in distributed embedded real-time systems