FLARe: a Fault-tolerant Lightweight Adaptive Real-time middleware for distributed real-time and embedded systems