**5.7 Networking, and storage enhancement**

This is another big challenge for fog computing, especially after the emergence of software-defined environments such as SDN (Software-Defined Networking), SDHI (Software-Defined Hardware Infrastructures), VNF (Virtual Network Function),

virtualization, SDC (Software-Defined Computing), SDI (Software-Defined Infrastructures), SDS (Software-Defined Storage), and others. Implementation of such techniques in fog networking requires a radical change in fog computing infrastructure design. It is not simple as it looks, but once it is done, all the other benefits especially latency minimization are achieved.

#### **5.8 Energy consumption**

By definition, the IoT objects collect and transmit data using wireless connections; fog computing also supports wireless D2D (Device to Device) connectivity, whereby the networks of devices can decrease significantly their energy consumption since a big amount of requests are executed in fog nodes. From another perspective, fog computing contributes to decrease cloud computing energy consumption because most of the IoT requests are onloaded to the border of the network.

#### **5.9 Scalability**

This feature is widely required in fog computing infrastructure. The fog data centers need to support the load balancing, agility, and elasticity of runtime, these variables contribute to efficiently control the variation in fog computing workload. This challenge is strongly linked to geo-distribution, since it has been often required for the fog data center to be efficiently geo-distributed, in that way each fog datacenter serves IoT devices existing in its coverage area. The need for scalability is triggered by the instant and high demand for the workload that can be created by IoT devices.

#### **5.10 Complexity**

It is obvious that IoT devices are limited in resources point of view, so onloading tasks to the fog layers reduce the computational complexity of IoT devices [66]. From another perspective, the fog/edge computing approach reduces network architecture complexity, as well as decreases the number of points of failures in IoT systems. Integrating ML capability in the fog layer minimizes the complexity of the decisionmaking process.

#### **5.11 Heterogeneity**

IoT architecture is becoming more heterogeneous day after day. A relevant definition of fog computing given by Yi et al. [67] mentioned that "*Fog Computing is a geographically distributed computing architecture with a resource pool which consists of one or more ubiquitously connected heterogeneous devices (including edge devices) …*," this definition confirms that fog computing is supposed to manage data and devices coming from varied manufacturers. These devices have different physical characteristics and require a variety of deployment methods.
