It is challenging to apply existing fault tolerance strategies for developing dependable Service Oriented systems, due to the lack of capabilities to adapt themselves at runtime to cope with dynamic changes of (a) user requirements and (b) the level of quality of services (QoS). In order to support such dynamic changes, we propose to adopt Software Product Line techniques. In particular, we adopt a feature model and product line architecture to capture the variability among software fault tolerance strategies based on design diversity. We propose an infrastructure that supports the strategy changes at runtime through dynamic management of variability and is responsible for the dependable mediation logic between service clients and redundant services. The infrastructure has an autonomous controller (i.e. managing a loop of collection, analysis, planning and execution), which is responsible for monitoring the changes of (i) QoS level and (ii) user requirements and decides, in accordance with high-level policies, an appropriate fault tolerance strategy to be executed. Also, our solution allows the dynamic provision of redundant services by describing them in terms of semantics. Finally, we performed a proof of concept which indicates the feasibility of the proposed solution.