Challenges and Software Architecture for Fog Computing | Synapse