Distributed load balancing for heterogeneous fog computing infrastructures in smart cities