  MicroService Architecture (MSA) is gaining rapid popularity for developing
large-scale IoT applications for deployment within distributed and
resource-constrained Fog computing environments. As a cloud-native application
architecture, the true power of microservices comes from their loosely coupled,
independently deployable and scalable nature, enabling distributed placement
and dynamic composition across federated Fog and Cloud clusters. Thus, it is
necessary to develop novel microservice placement algorithms that utilise these
microservice characteristics to improve the performance of the applications.
However, existing Fog computing frameworks lack support for integrating such
placement policies due to their shortcomings in multiple areas, including MSA
application placement and deployment across multi-fog multi-cloud environments,
dynamic microservice composition across multiple distributed clusters,
scalability of the framework, support for deploying heterogeneous microservice
applications, etc. To this end, we design and implement MicroFog, a Fog
computing framework providing a scalable, easy-to-configure control engine that
executes placement algorithms and deploys applications across federated Fog
environments. Furthermore, MicroFog provides a sufficient abstraction over
container orchestration and dynamic microservice composition. The framework is
evaluated using multiple use cases. The results demonstrate that MicroFog is a
scalable, extensible and easy-to-configure framework that can integrate and
evaluate novel placement policies for deploying microservice-based applications
within multi-fog multi-cloud environments. We integrate multiple microservice
placement policies to demonstrate MicroFog's ability to support horizontally
scaled placement, thus reducing the application service response time up to
54%.
