Software and Hardware Redundancy Approaches to Improve Performance and Service Availability in Fog Computing