Applications of Integrated IoT-Fog-Cloud Systems to Smart Cities: A Survey

: Several cities have recently moved towards becoming smart cities for better services and quality of life for residents and visitors, with: optimized resource utilization; increased environmental protection; enhanced infrastructure operations and maintenance; and strong safety and security measures. Smart cities depend on deploying current and new technologies and different optimization methods to enhance services and performance in their different sectors. Some of the technologies assisting smart city applications are the Internet of Things (IoT), fog computing, and cloud computing. Integrating these three to serve one system (we will refer to it as integrated IoT-fog-cloud system (iIFC)) creates an advanced platform to develop and operate various types of smart city applications. This platform will allow applications to use the best features from the IoT devices, fog nodes, and cloud services to deliver best capabilities and performance. Utilizing this powerful platform will provide many opportunities for enhancing and optimizing applications in energy, transportation, healthcare, and other areas. In this paper we survey various applications of iIFCs for smart cities. We identify different common issues associated with utilizing iIFCs for smart city applications. These issues arise due to the characteristics of iIFCs on the one side and the requirements of different smart city applications on the other. In addition, we outline the main requirements to effectively utilize iIFCs for smart city applications. These requirements are related to optimization, networking, and security.


Introduction
In 1950, 746 million people lived in urban areas worldwide.This number has increased more than five times to 4.22 billion, as of 2018 [1].Moreover, this number is estimated to rise to around 6.68 billion by 2050.Subsequently, several cities are speedily increasing in numbers of residents.For example, the number of big cities with a population higher than 10 million will grow from 10 cities in 1990 to 43 cities in 2030.Furthermore, we will have 66 large cities with a population between 5 and 10 million in 2030 compared to 21 in 1990 and 48 in 2018.Consequently, the governments of these big cities will face many issues in providing good quality of life for their populations.One potential resolution for such issues is transforming these cities to smart cities.
Progress in communication technologies, IoT, cloud and fog computing, and software technologies strongly contributed to the evolving concept of smart cities.Many unique opportunities can be offered by these technologies to create a wide array of applications that optimize smart cities' services.IoT enables the interaction of different physical objects, including sensors and actuators, and integrates them with a smart city network.Cloud opment, insufficient resources, enhanced awareness of energy efficiency, environmental sustainability, and economic developments.
The IBM Global Business Services Executive Report [7] recognizes four high-effect points of intelligent cities:

•
Decrease overcrowding in transport systems; • Increase community safety by dropping crime levels and reducing emergency reaction time; • Modernize and adapt services for residents, involving a high weight on education; and • Empower suitable access to healthcare information to improve quality of healthcare and timely disease discovery and avoidance.
A smart city vision includes advanced interactive observing and management of the situations of all the city's important systems and structures, like energy systems, communication systems, water systems, streets, highways, vehicles, airports, hospitals, bridges, tunnels, and subways to improve the operation and utilization of resource consumption while delivering excellent services to the residents [8,9].This can be achieved by utilizing Information and Communication Technology (ICT) to enhance those provided services.It is regularly declared that the main objective of utilizing ICT is to progress current services and applications by making them more efficient, cost-effective, and user-friendly or citizencentric.With the new developments in ICT, all important systems and structures can be integrated, monitored, and managed for the advantage of residents.

iIFCs for Smart Cities
Some of the evolving technologies that can successfully be utilized for smart cities are IoT, fog computing, and cloud computing.An example of an iIFC is shown in Figure 1 illustrating how different IoT components in some smart city applications connect to different fog nodes, which in turn connect to the cloud.Integrating these technologies into one system provides a powerful platform that can be used to develop and operate different smart city applications.iIFCs help link, observe, and facilitate improvements in all parts of the cities using the IoT, fog computing services, and cloud computing services.
Electronics 2021, 10, x FOR PEER REVIEW 3 of 35 A number of cities in different countries have determined to transfer to smart cities for several motives.These motives include rapidly expanding populations, limited unused areas for development, insufficient resources, enhanced awareness of energy efficiency, environmental sustainability, and economic developments.
The IBM Global Business Services Executive Report [7] recognizes four high-effect points of intelligent cities:


Decrease overcrowding in transport systems;  Increase community safety by dropping crime levels and reducing emergency reaction time;  Modernize and adapt services for residents, involving a high weight on education; and  Empower suitable access to healthcare information to improve quality of healthcare and timely disease discovery and avoidance.
A smart city vision includes advanced interactive observing and management of the situations of all the city's important systems and structures, like energy systems, communication systems, water systems, streets, highways, vehicles, airports, hospitals, bridges, tunnels, and subways to improve the operation and utilization of resource consumption while delivering excellent services to the residents [8,9].This can be achieved by utilizing Information and Communication Technology (ICT) to enhance those provided services.It is regularly declared that the main objective of utilizing ICT is to progress current services and applications by making them more efficient, cost-effective, and user-friendly or citizen-centric.With the new developments in ICT, all important systems and structures can be integrated, monitored, and managed for the advantage of residents.

iIFCs for Smart Cities
Some of the evolving technologies that can successfully be utilized for smart cities are IoT, fog computing, and cloud computing.An example of an iIFC is shown in Figure 1 illustrating how different IoT components in some smart city applications connect to different fog nodes, which in turn connect to the cloud.Integrating these technologies into one system provides a powerful platform that can be used to develop and operate different smart city applications.iIFCs help link, observe, and facilitate improvements in all parts of the cities using the IoT, fog computing services, and cloud computing services.In this model, cloud computing delivers an elastic virtual processing environment and on-demand software and hardware services for several applications [10].It can analyze and store huge data sets (e.g., it is estimated that collected healthcare data in 2020 is more than 2000 exabytes [11]) and deliver computing powers that can easily be scaled in or out according to the changing needs of the smart city's applications.The IoT integrates countless physical entities in a city network [12].These physical objects can be small-or In this model, cloud computing delivers an elastic virtual processing environment and on-demand software and hardware services for several applications [10].It can analyze and store huge data sets (e.g., it is estimated that collected healthcare data in 2020 is more than 2000 exabytes [11]) and deliver computing powers that can easily be scaled in or out according to the changing needs of the smart city's applications.The IoT integrates countless physical entities in a city network [12].These physical objects can be small-or medium-sized devices, such as sensors, actuators, robots, and unmanned aerial vehicles (UAV), or they can be large integrated components, such as smart traffic lights and smart buildings.
Many smart city applications require real-time control methods and access to services obtainable near the areas where IoT devices are available.Nevertheless, the cloud cannot always provide these necessities, generally because of the lengthy distances between the cloud computing location and the connected IoT devices.Consequently, fog computing was created to offer localized to services [2].Fog platforms can improve the IoT-cloud integration model by offering small platforms placed at the edges of smart cities networks.Fog nodes can execute cloud-like services to provision numerous IoT operations.These services can be computation, data storage, management and control, integration, valueadded communications services which enable some IoT based applications in smart cities.The fog platform will enable the execution of services physically close to the IoT devices.Thus, fog computing can provide more localized real-time monitoring and management for smart city services and applications, while the cloud is more capable of providing largescale and advanced monitoring, management, optimization, and planning mechanisms for smart city services and applications.The integration of different fog and cloud services to build smart applications helps to effectively realize the concept of smart cities.
There are two fog computing architectures for smart city applications: flat fog computing architecture and hierarchical fog computing architecture.In a flat architecture, as shown in Figure 1, all of the fog nodes have similar functionalities, they all connect IoT devices, and networks are on one side while the cloud is on the other side of the fog layer.The hierarchical architecture, as shown in Figure 2, allows for the creation of different levels of fog computing nodes with varying capabilities.This is used for more efficient communication and operations to support different applications in smart cities [13,14].In this architecture fog nodes can be structured in multiple levels and n-tier fog computing between IoT devices and cloud computing can be used.Thus, there will be multiple intermediate fog level layers.Each fog level mostly communicates and enables services to and from its upper level and lower level [15].In smart cities, diverse infrastructure components, such as smart buildings, smart traffic light systems, and smart structure management need to be monitored and controlled.It is more efficient and effective to use hierarchical fog computing architectures for these applications [13].In this architecture fog nodes have diverse characteristics at various levels in terms of latency and capability.Consequently, they can have different functionalities to support smart cities.For example, each fog node in the lower level of a two-level fog computing architecture in a smart city can offer some functions to support a single smart building or a single smart traffic light.However, each fog node in the upper level can offer some functions to support all smart buildings or all smart traffic lights in a neighborhood.medium-sized devices, such as sensors, actuators, robots, and unmanned aerial vehicles (UAV), or they can be large integrated components, such as smart traffic lights and smart buildings.
Many smart city applications require real-time control methods and access to services obtainable near the areas where IoT devices are available.Nevertheless, the cloud cannot always provide these necessities, generally because of the lengthy distances between the cloud computing location and the connected IoT devices.Consequently, fog computing was created to offer localized to services [2].Fog platforms can improve the IoT-cloud integration model by offering small platforms placed at the edges of smart cities networks.Fog nodes can execute cloud-like services to provision numerous IoT operations.These services can be computation, data storage, management and control, integration, valueadded communications services which enable some IoT based applications in smart cities.The fog platform will enable the execution of services physically close to the IoT devices.Thus, fog computing can provide more localized real-time monitoring and management for smart city services and applications, while the cloud is more capable of providing large-scale and advanced monitoring, management, optimization, and planning mechanisms for smart city services and applications.The integration of different fog and cloud services to build smart applications helps to effectively realize the concept of smart cities.
There are two fog computing architectures for smart city applications: flat fog computing architecture and hierarchical fog computing architecture.In a flat architecture, as shown in Figure 1, all of the fog nodes have similar functionalities, they all connect IoT devices, and networks are on one side while the cloud is on the other side of the fog layer.The hierarchical architecture, as shown in Figure 2, allows for the creation of different levels of fog computing nodes with varying capabilities.This is used for more efficient communication and operations to support different applications in smart cities [13,14].In this architecture fog nodes can be structured in multiple levels and n-tier fog computing between IoT devices and cloud computing can be used.Thus, there will be multiple intermediate fog level layers.Each fog level mostly communicates and enables services to and from its upper level and lower level [15].In smart cities, diverse infrastructure components, such as smart buildings, smart traffic light systems, and smart structure management need to be monitored and controlled.It is more efficient and effective to use hierarchical fog computing architectures for these applications [13].In this architecture fog nodes have diverse characteristics at various levels in terms of latency and capability.Consequently, they can have different functionalities to support smart cities.For example, each fog node in the lower level of a two-level fog computing architecture in a smart city can offer some functions to support a single smart building or a single smart traffic light.However, each fog node in the upper level can offer some functions to support all smart buildings or all smart traffic lights in a neighborhood.The fog nodes are typically stationary nodes offered via dedicated computers or network routers.Yet, fog nodes can also be mobile.One instance of the use of mobile fog nodes is UAV-based fog computing (UAVFog) [16], as shown in Figure 3. UAVFog provides fog computing abilities onboard one or more UAVs that can dynamically support IoT services and applications at various locations.UAVFog is an exceptionally mobile and flexible fog node that can be rapidly relocated to different zones in a smart city to supply certain fog services as required.
Electronics 2021, 10, x FOR PEER REVIEW 5 of 35 The fog nodes are typically stationary nodes offered via dedicated computers or network routers.Yet, fog nodes can also be mobile.One instance of the use of mobile fog nodes is UAV-based fog computing (UAVFog) [16], as shown in Figure 3. UAVFog provides fog computing abilities onboard one or more UAVs that can dynamically support IoT services and applications at various locations.UAVFog is an exceptionally mobile and flexible fog node that can be rapidly relocated to different zones in a smart city to supply certain fog services as required.The architectural layers of iIFCs for smart cities is illustrated in Figure 4.In this architecture smart city applications are implemented using services provided by the iIFCs.These services can be provided by the cloud, fog nodes, or IoT components.One example of cloud computing is the use of Software-as-a-Service (SaaS), where smart city application developers utilize cloud application software (services) running on the cloud infrastructure.These software services usually need powerful resources and offer many features like data mining, machine learning (ML), decision support, and optimization.Cloud computing also provides Platform-as-a-Service (PaaS), where developers implement and deploy their own applications within the cloud platform.In addition, there is Infrastructure-as-a-Service (IaaS), where developers benefit directly from the computing and storage resources (virtual machines) offered and managed by cloud service providers.Examples of fog services include localized and highly responsive services like device control, streaming, data caching, location-based support, and other similar services.IoT services include Sensing-as-a-Service and Configuration-as-a-Service.Developers can mix, match, and make use of needed services across all platforms to implement different smart city applications.This makes iIFCs the perfect platform for developing and operating smart city applications.The architectural layers of iIFCs for smart cities is illustrated in Figure 4.In this architecture smart city applications are implemented using services provided by the iIFCs.These services can be provided by the cloud, fog nodes, or IoT components.One example of cloud computing is the use of Software-as-a-Service (SaaS), where smart city application developers utilize cloud application software (services) running on the cloud infrastructure.These software services usually need powerful resources and offer many features like data mining, machine learning (ML), decision support, and optimization.Cloud computing also provides Platform-as-a-Service (PaaS), where developers implement and deploy their own applications within the cloud platform.In addition, there is Infrastructure-as-a-Service (IaaS), where developers benefit directly from the computing and storage resources (virtual machines) offered and managed by cloud service providers.Examples of fog services include localized and highly responsive services like device control, streaming, data caching, location-based support, and other similar services.IoT services include Sensing-as-a-Service and Configuration-as-a-Service.Developers can mix, match, and make use of needed services across all platforms to implement different smart city applications.This makes iIFCs the perfect platform for developing and operating smart city applications.

Related Work
There have been many research efforts in investigating and surveying different applications and technological issues related to smart cities and urban areas.Rashid and Rehmani [17] surveyed the urban area applications of wireless sensor networks.In their survey they covered both monitoring applications and networking issues, yet they did not include issues related to fog and cloud computing.Al Nuaimi et al. [9] surveyed applications of big data to smart cities, and Mohamed at al. [18] surveyed UAV applications to smart cities. Gharaibeh et al. [19] surveyed different smart city technologies, data management, and security issues, while Jawhar et al. [20] discussed networking architectures and protocols for smart city systems.
Other issues facing IoT-based smart cities have also been investigated and surveyed [21][22][23][24].However, these investigations either did not include fog computing issues or did not include both fog and cloud computing issues.In addition, the use of fog computing for smart cities was investigated in different research papers like Tang et al. [13,25] as well as He et al. [26], who proposed multi-level hierarchical fog computing architectures for big data analytics in smart cities. Perera et al. [27] investigated the use of fog computing for sustainable smart cities and covered case studies pertaining to various smart cities. Zahmatkesh and Al-Turjman [28] reviewed the enabling technologies and caching techniques for utilizing fog computing for smart cities. SmartCityWare [3] was proposed as a service-oriented middleware for enabling the development and operations of cloud and fog integrated smart city services.Furthermore, Giordano et al. [29] developed a platform that executes multi-agent systems to support smart city applications.Javadzadeh and Rahmani [30] provided a systematic review of utilizing fog computing for smart cities.The authors mainly focused on fog computing utilizations without covering the issues related to integration with IoT and cloud computing.

Related Work
There have been many research efforts in investigating and surveying different applications and technological issues related to smart cities and urban areas.Rashid and Rehmani [17] surveyed the urban area applications of wireless sensor networks.In their survey they covered both monitoring applications and networking issues, yet they did not include issues related to fog and cloud computing.Al Nuaimi et al. [9] surveyed applications of big data to smart cities, and Mohamed at al. [18] surveyed UAV applications to smart cities. Gharaibeh et al. [19] surveyed different smart city technologies, data management, and security issues, while Jawhar et al. [20] discussed networking architectures and protocols for smart city systems.
Other issues facing IoT-based smart cities have also been investigated and surveyed [21][22][23][24].However, these investigations either did not include fog computing issues or did not include both fog and cloud computing issues.In addition, the use of fog computing for smart cities was investigated in different research papers like Tang et al. [13,25] as well as He et al. [26], who proposed multi-level hierarchical fog computing architectures for big data analytics in smart cities. Perera et al. [27] investigated the use of fog computing for sustainable smart cities and covered case studies pertaining to various smart cities. Zahmatkesh and Al-Turjman [28] reviewed the enabling technologies and caching techniques for utilizing fog computing for smart cities. SmartCityWare [3] was proposed as a service-oriented middleware for enabling the development and operations of cloud and fog integrated smart city services.Furthermore, Giordano et al. [29] developed a platform that executes multi-agent systems to support smart city applications.Javadzadeh and Rahmani [30] provided a systematic review of utilizing fog computing for smart cities.The authors mainly focused on fog computing utilizations without covering the issues related to integration with IoT and cloud computing.
Mahmud et al.
[31] provided a taxonomy, review, and future direction potentials for application management in fog computing environments.These were reviewed in terms

Mahmud et al.
[31] provided a taxonomy, review, and future direction potentials for application management in fog computing environments.These were reviewed in terms of architecture, placement, and maintenance.Furthermore, there are some surveys that mainly focused on fog computing issues such as architectures, security, and research challenges and directions without discussing smart city situations and applications [32][33][34][35][36][37][38][39][40][41].Unlike these surveys, we focus on applications of iIFCs for smart cities and discuss the integration issues.
The closest related work to this paper can be seen in resources [42,43].Both studies, like this paper, focus more on the integration issues of iIFCs environments.Dizdarević et al. [42] surveyed the communications protocols for IoT and the integration issues with fog and cloud computing.However, this survey is set within the general IoT context and does not directly link to smart city applications.Bittencourt et al. [43] studied the technical benefits and challenges of the IoT, fog computing, and cloud computing continuum.However, they did not cover application benefits in smart city scenarios.The focus of this paper is on applications of iIFC environments for smart cities, their benefits, requirements, and associated issues.

Applications
Recently many new smart city applications have emerged.Here, we specifically discuss several IoT-based smart city applications.These applications are effectively and efficiently implemented and operated using integrated services provided by the IoT, fog computing, and cloud computing.We categorized these applications based on their application domains as illustrated in Figure 5. Needless to say, IoT-based applications require computing power.Traditionally this is offered on premise computing facilities, then some were migrated to the cloud.However, each model has its advantages and disadvantages.When we integrate IoT-based systems with both cloud and fog computing, we can use the best of each to create more effective and efficient applications.
requirements, and associated issues.

Applications
Recently many new smart city applications have emerged.Here, we specifically discuss several IoT-based smart city applications.These applications are effectively and efficiently implemented and operated using integrated services provided by the IoT, fog computing, and cloud computing.We categorized these applications based on their application domains as illustrated in Figure 5. Needless to say, IoT-based applications require computing power.Traditionally this is offered on premise computing facilities, then some were migrated to the cloud.However, each model has its advantages and disadvantages.When we integrate IoT-based systems with both cloud and fog computing, we can use the best of each to create more effective and efficient applications.

Smart Energy Applications
iIFCs can be utilized to offer better monitoring, management, decisions services, flexibility, and agility for smart grids [44,45].These features may help improve reliability and save on cost and energy.Smart grids are improved electrical grid systems that employ different technologies to offer some improvements such as cost-effectiveness, reliability, efficiency, and sustainability of the generation and distribution of electric energy.These improvements are accomplished by gathering and controlling the collected information, such as information about the production activities of providers and the consuming behaviors of clients in an automated manner.iIFCs can provide many capabilities to enable communication and control between energy producers and customers to improve overall grid efficiency, cost-effectiveness, and robustness by using system self-examining and self-acting through closed-loop feedback controls.This involves placing and controlling IoT devices, such as smart sensors and meters, through power production, transmission,

Smart Energy Applications
iIFCs can be utilized to offer better monitoring, management, decisions services, flexibility, and agility for smart grids [44,45].These features may help improve reliability and save on cost and energy.Smart grids are improved electrical grid systems that employ different technologies to offer some improvements such as cost-effectiveness, reliability, efficiency, and sustainability of the generation and distribution of electric energy.These improvements are accomplished by gathering and controlling the collected information, such as information about the production activities of providers and the consuming behaviors of clients in an automated manner.iIFCs can provide many capabilities to enable communication and control between energy producers and customers to improve overall grid efficiency, cost-effectiveness, and robustness by using system self-examining and selfacting through closed-loop feedback controls.This involves placing and controlling IoT devices, such as smart sensors and meters, through power production, transmission, and distribution facilities to consumer facilities to obtain granular live information concerning the current statuses of electricity energy generation, utilization, and problems.Smart grids need to gather and analyze huge amounts of data, collected from millions of connected smart meters and other smart grid data sources, and instantaneously process the gathered data to send back the necessary control signals and maintain the improved operations, reliability, and cost-effectiveness of the complete electric power system.Fog computing can be utilized as a distributed platform to execute the control models for managing different components of smart grids [46].
Deploying local computing and processing services on fog nodes at the edge of the network offers location-awareness, low latency, and real-time data analysis for smart grid applications.These features can be used to build more controllable, and reliable smart grid infrastructures that offer energy efficiency and cost reductions [45].In addition, fog computing can help in maintaining the balance between electricity consumption and distribution [47].Furthermore, cloud services can be deployed for critical management and planning applications in smart grids such as power load prediction, power utilization assessment, and failure discovery [48].Moreover, incorporating renewable energy resources to smart grids requires having some real-time capabilities for integration management to enable the reliability, efficiency, and cost-effectiveness of integration [49].These management services can be implemented and offered by iIFCs.Generally, all smart grid functionality can be satisfied through cloud services.However, taking into consideration the size of a smart grid (covering large cities and, possibly, the whole country), the load on these cloud services will be very high and costly.Adding fog nodes to handle local events, aggregate data, respond to small scale processing needs at specific locations, will reduce network traffic, shorten response time, and reduce the demand on the cloud nodes.
Another important energy application of iIFCs is managing microgrids.A microgrid is a localized set of electric power sources and loads integrated and managed with the objective of enhancing energy production and consumption efficiencies and reliabilities [50].The electric power sources can be distributed power generators, renewable energy stations, and energy storage components in facilities created and owned by different organizations or energy providers.One of the main advantages of microgrid technology is that it not only allows residents and other electric power consumers, such as factories, to have access to the needed energy, it also allows them to produce and sell excess energy to the grid.In this regard fog computing can be used to facilitate the operations of microgrids [51] locally instead of shipping all data to the cloud for processing.This will save time and reduce the load on the cloud nodes, thus saving their resources for the more compute-and storage-intensive operations.In addition, local fog nodes will be more customizable to each microgrid and can respond to localized events quickly without the need for external support from the cloud.One possibly extreme scenario is if an accident happens in one microgrid, possible starting a fire or other problem that requires immediate action.A local fog node can discover and initiate mitigation actions almost immediately.In such case, waiting for processing and feedback from the cloud could have catastrophic results.Fog computing services can support interoperability, scalability, ease of deployment, and cost effectiveness of services managing microgrids.
The integration of fog computing and microgrids can be utilized to reduce the energy consumption of some types of IoT applications [52].Fog computing can facilitate better controls for realizing an energy efficient IoT and optimizing the usage of energy resources, such as local renewable energy.In addition, fog computing can be utilized to track load changes in microgrids and compensate in real-time.Load changes can be captured and managed in a distributed manner using multi-level fog computing.This helps avoid centralized management and enhances the realization of an optimal dispatch of microgrids [53].In such a model issues like high communication traffic, massive computational burdens in large-scale systems, and the increased complexity of real-time monitoring of microgrids can be avoided.
Cloud computing can also provide additional planning services to improve the operations of microgrids and enable the construction of smart microgrids.Examples of such services include resource optimization, power flow analysis, resource allocation, and economic analysis [54].In addition, some smart services can be used to reduce the power demand issue [55].Moreover, integrating fog computing with smart services on the cloud will better support power demands and production management by reducing the high volume of information being transferred to the cloud while also assuming some analysis and processing responsibilities to improve response times [56].
iIFCs can also offer services to manage energy usage in smart buildings.Energy consumption in commercial, industrial, and residential buildings is accountable for a substantial ratio of total power usage.For instance, power usage in buildings is estimated to be about 40% of their total energy consumption in Europe.A significant methodology to this high consumption energy issue is to consider the idea of smart buildings which employ various technologies to offer intelligent functions for the management of a building's equipment, for examples its heating, ventilation, and air-conditioning (HVAC) systems, lighting systems, and different appliances.Building Energy Management Systems (BEMS) are employed for such management.Cloud facilitated BEMS [57] can be utilized to improve the automation features of smart buildings by offering configuration and analytics services to decrease power use.These include services for advanced power diagnostics [58] and advanced data analytics for several equivalent buildings [59].Moreover, iIFCs can be utilized as a platform for the creation of an energy knowledge system pertaining to smart building consumption in smart cities and the execution of big data analytics to improve energy-efficiency decisions and management in these buildings [60].
Another smart city application that offers energy savings is smart lighting [61,62].Cities light their streets, parks, and other indoor and outdoor facilities for the convenience and safety of their residents.Smart lighting systems can help by adjusting based on daylight availability and occupancy levels.For example, the lighting on long stretches of roads can be automated to turn on and off depending on the street usage.Lights in parks and other facilities can be dimmed significantly after working hours.Some can be programmed to turn on if they detect movement.Fog computing can be used to provide localized and adaptive management to control smart lighting systems that can quickly respond to changes, while collected data over time can be off-loaded to the cloud for more in-depth analysis.

Smart Water Network Applications
Smart water networks resemble smart grids in terms of structure and operational needs.A lot of the work in the applications can be done remotely on the cloud.However, there are areas where local computing capabilities are necessary for enhance operations.For example, locally monitoring and controlling water pipelines to avoid major water losses by quickly detecting and reacting to leaks in addition to dynamically adjusting supply levels based on real-time consumption information.iIFCs can be utilized to develop, deploy, and operate different services to manage smart water networks.These services can enable them to be more efficient, reliable, and sustainable.IoT devices such as sensors and actuators can be attached to water networks to provide some management and monitoring mechanisms and add smart features for water networks [63].An example of these features is an early warning mechanism to detect possible issues in water networks.For instance, issues like leaks and pipe bursts can be noticed quickly [64].This permits for the employment of short-term initial resolutions to prevent water waste and decrease the risk of major damages.Additionally, iIFCs can deliver a set of services to screen the water quality in a water network and deliver live data on the potential occurrence of pollutants in the water being supplied.This capability could prove beneficial in detecting both the places of origin for such defects as well as their causes.
While both IoT and fog computing can offer local observing and control for smart water networks, the cloud will offer smart services for evaluating and managing the diverse issues of such water networks.Furthermore, on the cloud, it is possible to include a knowledge-based system developed according to collected data and used to facilitate and inform future planning and enhancement decisions.For example, the knowledgebased system can be used to build more accurate models of a water network and its operations.This will help to improve the sustainability and resilience of the water network's infrastructure [65].IoT and fog computing can also provide other applications for smart water networks like enabling precision irrigation [66].Fog computing-based solutions can alleviate the scalability challenge of large-scale IoT-based smart water networks [67].Furthermore, fog computing can help reduce network traffic between a network's IoT devices and the cloud.For example, fog nodes can decrease the amount of data being transferred by optimizing the local analysis and aggregation of collected data from the smart meters in a large smart city's infrastructure before sending it to the cloud [68].

Smart Transportation Applications
As obtained from an investigation directed by Seattle-based INRIX and the Centre for Economics and Business Research, congestions in road traffic cost around $124 billion in the United States in 2013 alone.This includes $78 billion of direct losses because of fuel consumed in traffic congestions and $45 billion indirect losses in businesses.This already large number is projected to rise to $186 billion in 2030 [69].A significant contribution to this high cost is because of congestions in metropolitan areas.Los Angeles, for instance, contributes around 20 percent of the whole of the United States' traffic congestion expenditures.Luckily, traffic congestion and its associated expenditures can be meaningfully decreased by utilizing iIFCs to support smart transportation management services that aid in traffic management, smart route planning, as well as smart car parking.
iIFCs can be utilized to deploy smart traffic-light managements, which include observing devices across many places to correctly forecast traffic models and regulate traffic lights to improve flow.Furthermore, this application can utilize vehicles' location information, which can be obtained from global positioning systems as well as vehicle-to-vehicle and vehicle-to-infrastructure communication systems to create a more comprehensive assessment of traffic conditions.To achieve high performance and real-time responses, localized fog nodes can be deployed to handle local traffic analysis and adjustments needs, while collaborating with other local fog nodes in different areas to coordinate controls across multiple locations.Collecting, correlating, and processing data coming from hundreds of traffic lights on the cloud will be a lot slower and will take longer to arrive at satisfactory controls for each area.In addition, most of the data and analysis is localized and does not require similar data from other areas, therefore passing it to the cloud for processing is not necessary.This supplementary information can also be applied to improve overall urban traffic management through cloud services.This kind of smart city application can cut traffic delays, lessen vehicle travel times, enhance the average velocity of vehicles on the road, and improve conditions for emergency vehicles' movements in urban areas.Smart and efficient learning and adaptation software algorithms are typically employed in such applications to improve urban traffic management.Examples of such algorithms have been proposed [70,71].Furthermore, in these types of applications, fog computing services can be used to provide local traffic monitoring and management [72], while cloud computing services can be used to offer global city monitoring and management [3].
Another important application, which is related to the transportation sector and can be enabled by iIFCs, is a smart parking service [73].Identifying the suitable parking spots for drivers going to particular destinations or events in crowded zones with several parking sections and buildings, such as the center of a city, can take a considerable amount of time.However, a smart parking service can quickly offer information regarding the existing parking lots in any given section of a smart city.Moreover, other functions can be included to improve the smart parking services, for example, discovering and booking the best suitable parking spot for each specific driver according to factors like walking distance, parking fees, access to main roads upon exit, etc. Smart parking services can be developed and executed by an IoT and fog computing platforms to observe and report untaken parking lots/spots, while some of cloud services can gather and process this data to search and assign the most suitable parking lot/spot for individual drivers, and a smartphone app can be employed to provide access to such services.This innovated parking service will not only enable each person to obtain an ideal parking spot quickly, but it will additionally decrease the traffic in a crowded zone, since the car owners will no longer spend lengthy amounts of time driving on the roads searching for parking.
Other smart transportation applications in which iIFCs can play an important role are the applications for self-driving cars [74] and UAV taxis [75].Traffic monitoring sensors, fog services, and cloud services can be used in conjunction to provide safe transportation services for such applications.Cloud computing can be used to run ML tools, simulation environments, and observation and evaluation tools to provide a safe journey for both self-driving cars and UAV taxis.

Smart Health and Wellness Applications
iIFCs can be used to provide ubiquitous healthcare and wellness services.Cloud computing can be utilized in healthcare applications to offer a powerful and scalable infrastructure to store and manage patients' Electronic Health Records (EHRs).In addition, the cloud can offer various healthcare information services that enhance support for patients' health needs as well as healthcare quality, financial operations, strategic planning processes, research capabilities, public safety support, and clinical trials processes [76,77].Cloud computing can also be used for archiving and processing medical images [78] and as an enabler for physician collaboration [79,80].In addition, cloud computing can provide different services for IoT-based healthcare systems [81], which utilize wearable, environmental, and implanted sensors to monitor patient health and provide health assistance remotely.The connected cloud computing infrastructure and its services can store and analyze the data collected from these sensors and serve as an emergency health detector [82].In addition, the cloud can provide some services to enable doctors to provide remote healthcare services for patients and share medical resources with other doctors and healthcare professionals.
Ubiquitous healthcare can then be enhanced using fog computing on a more localized basis.Fog nodes can be installed in smart homes, smart healthcare clinics, or hospitals, giving them close proximity to the different IoT-based healthcare systems in these locations.This way, fog nodes can solve many issues facing these systems, such as scalability, mobility, energy efficiency, reliability, and interoperability [83].Fog computing can be used to provide services supporting real-time patient monitoring for different illnesses, particularly acute illnesses.Such services could include an electrocardiogram feature to aid in the diagnosis of many cardiac diseases [84].Fog computing can also be utilized to filter any unnecessary flow of information and provide better privacy and protection mechanisms for personal data [85].In addition, other diseases such as autism and COVID-19 can be monitored in cities utilizing cloud-fog-IoT architecture [86,87].

Smart Structural Health Management Applications
It is essential for cities to preserve their infrastructures, such as their highway networks, tunnels, bridges, subway and train rails, and pipeline networks, and extend their life and utilization.Intelligent and live examining for these important infrastructures can be accomplished using iIFCs.Diverse sensor devices and other IoT components can be installed to monitor the integrity of these infrastructures and communicate any possibility for potential or imminent defects within the infrastructures [88,89].Some cloud services can compile and analyze the possibility of such issues and assist in identifying the most suitable maintenance needs.In addition, a set of fog services can be used to provide local, real-time, adaptive, and smart monitoring for different cities' infrastructures.This aids in recognizing and fixing any issues at their initial phases as well as taking action to avoid such issues in the future.This can significantly reduce the time and costs needed to repair them.Furthermore, this improves the actual use of the infrastructure, as no considerable time will be required to conduct lengthy maintenance.
Recently, different approaches and applications for monitoring structural health using smart sensing technology have been proposed.Examples include smartphones, UAVs, cameras, and robotic sensors.These smart sensing technologies can acquire structural data in a more cost-effective manner [90].They can provide effective vision-based structural health monitoring [91].For example, UAVs can be employed as flexible, speedy, and economical tools for inspecting some city structures [92].UAVs can be directed quickly at any time to verify reported issues in these structures.They can also deliver photos or videos of possible problem areas.These can be examined with internal fog services or remote cloud services to identify any issues in the structures.Many ideas have been suggested for the application of UAVs in structural examinations for bridges [93], power lines [94], and water, gas, and oil pipelines [95].Different data-driven and ML techniques have also been proposed to aid in recognizing different structural health conditions and symptoms [96][97][98].These can be employed through the cloud to provide effective mechanisms with which to monitor these structures and discover problems early.Considering the use of fog nodes as part of such applications will help enhance the capabilities of the UAVs by allowing the onboard fog nodes to perform localized processing, filter data, and handle immediate needs before shipping everything to the cloud.This will reduce UAV-cloud communication and reduce energy consumption in the UAVs and take some of the load to the cloud resources.In addition, fog nodes can be useful when facing emergency situations such as natural disasters or large-scale accidents involving city infrastructures.If every building/area has local fog nodes, these can be equipped with monitoring and control capabilities that can quickly respond to local emergencies, while still capable of passing all information to the cloud for large-scale responses.For example, if a fire starts inside a building, the IoT devices will detect it and trigger specific applications in local fog nodes that in turn will evaluate the situation, dispatch fire engines, and initiate evacuation procedures in real-time, while also calculating possible risks to nearby structures to issue the necessary warnings.

Smart Security and Public Safety Applications
Smart cities should provide smart security services to protect their infrastructures and residents.Some new technologies, in addition to cloud computing and fog computing, can enable the implementation and operation of smart security services.One common approach to use remote cameras for monitoring.A set of cameras can be installed and used to provide remote monitoring for critical places, such as airports, train and subway stations, important street intersections, power plants, etc.In addition, they are installed to monitor abnormal human behaviors in some areas, such as sports facilities, workplaces, busy streets, and malls.These cameras are usually connected to monitoring stations where security officers can observe the activities in these areas using multiple screens.The recorded videos are usually stored in circular storage due to storage limitations.One of the main issues with this approach is the question of how a limited number of officers can efficiently and effectively monitor large facilities equipped with hundreds or maybe thousands of cameras.Another issue is that with so many cameras installed, there is a need for very large storage space even with the use of circular storage.
One attractive solution for the officers/screens problem is to have video-based abnormal motion detection [99] and video-based abnormal human behavior recognition [100].Several smart algorithms have been developed that can provide automation for detecting abnormal situations.These algorithms usually need high and scalable processing power to provide real-time alerts.iIFCs can be utilized to implement these algorithms and support those smart video monitoring applications that can help protect city infrastructures and residents.In addition, the scalable storage in the cloud can be used for circular buffering of captured videos and make them available when needed.Fog nodes can be used to optimize the communication and operations of installed cameras and the cloud [101].For example, fog nodes will locally analyze and store videos and selectively forward videos to the cloud or to a security control center if they detected abnormal situations.
iIFCs can be used to provide physical security for smart city residents.This is especially important in protecting children, women, people with disabilities, and other vulnerable groups, as concerns for their wellbeing and safety are rising [102,103].In addition, this can be an important part of the protection details for public figures and extraordinary people, who are generally in the spotlight and monitoring them can cause major problems in terms of protecting their private lives or putting them at risk by exposing their routines, movements, and interactions.By using wearable, mobile, and fixed IoT devices as well as fog and cloud computing to uninterruptedly monitor residents and make timely decisions and actions, it is possible to prevent undesirable events or accidents from taking place [104].Instead of making all the decisions either locally, using local and wearable IoT devices, or globally, using the cloud, the multilevel approach of processing information among the IoT devices, fog, and cloud can provide more accurate monitoring and information within a shorter response time [104].In this approach, devices at the IoT level collect information about a situation and make initial security decisions.Some decisions may require processes beyond the capabilities of the IoT devices, thus fog nodes nearby can provide these needs locally and quickly.Furthermore, the fog and cloud levels can further process the data and make more advanced decisions based on predefined requirements.This way, the fog and cloud are utilized to execute smarter more sophisticated algorithms requiring more resources to evaluate the situation.
iIFCs can also be employed to offer crowd-management services for big special events like festivals, carnivals, important sports games, or any outdoor events [105].During such events it is critical to enforce organization and law to be able screen and estimate crowd movements and conduct fast analyses, decisions, actions regarding some public security and safety concerns, like improving police attendance in around some zones, closing down some streets to smooth ordinary movement, and opening additional parking areas.Crowd monitoring could be accomplished via road cameras, smartphone positions examination, traffic sensor systems, and other systems used to track vehicle movements.UAVs can also be used for crowd monitoring [18].UAVs can be used as flexible and moveable fog computing nodes [16] that provide services to improve the monitoring of specific crowds or areas.Such advanced technologies allow for tracing and understanding crowds' locations, concentration levels, and potential movement directions.A UAV can typically have good onboard computing and storage facilities to handle local monitoring and processing needs for these applications.Vehicles, smart phones, and other small devices, can support the process, but, generally, cannot provide the same levels of power.In addition, the issues of ownership and privacy become a concern if trying to deploy personal compute facilities for public use.
Different approaches and algorithms have been developed to provide advanced analysis to detect abnormal behaviors in crowded areas [106].These algorithms pertain to video analytics, cognitive dynamic systems, interaction modeling, crowd emotion sensing, and crowd-behavior modeling.These algorithms rely on high processing power to provide timely and accurate analysis of various situations.These algorithms can be implemented via fog and cloud services to collect and evaluate accumulated data to provide a clear and live status regarding a given condition, potential risks, and feasible solutions.Furthermore, these services can be beneficial in the case of an emergency situation within a crowd by providing real time information about the situation and allowing specialized algorithms to help make critical decisions for the city's emergency response teams.An additional security application example that can be supported by iIFCs in smart cities is wide-range emergency response applications [107].In disasters like earthquakes, floods, large-scale terrorist attacks, and volcanoes, fast observations and appropriate acts are required.In these situations, observation data will be communicated to disaster response centers from a large number of officials and private citizens continuously.Additional data will be collected and transmitted from UAVs, robots, sensors, and satellites and there will be data obtained from cars and smartphones movements.Altogether, the volume of collected data will be very large and advanced cloud services can be used to aid the emergency center in examining this communicated data to plan for most suitable utilizations of existing human resources like emergency teams, doctors, and police officers, as well as physical resources, such as emergency automobiles and hospitals to execute relief activities as rapidly and effectively as possible.

Smart Waste Management Applications
Sewage and waste management is an important aspect of any city, smart or otherwise.As is the case with other important sectors in smart cities like the smart grid and smart water networks, smart mechanisms and automation can be applied to sewage and waste management to enhance operations and reliability and reduce costs.Sewage networks can be monitored and managed by IoT devices.These devices can provide continuous, detailed information about the status of the sewage networks and their operations.This information can be analyzed using specialized cloud and fog services for both interactive monitoring and future maintenance and upgrade operations.These services can be used to detect leaks or failures and initiate the appropriate actions needed to mitigate the negative impacts of these leaks and failures.In addition, fog and cloud services can be used to manage autonomous clearing and waste collection vehicles in smart cities.Using autonomous clearing and waste collection vehicles can provide cost-effective and high-quality solutions for smart cities.However, such service could be better managed and developed using cloud and fog services.For instance, a fog node with fog services can be installed onboard an autonomous clearing and waste collection vehicle to ensure coordination, safety, and communication with the cloud.
Cloud platforms can be utilized to support better waste management and control.It can provide a dashboard to monitor waste collection, disposal, and recycling in a city.In addition, as waste management directly impacts lifestyle, healthcare, the environment, and the recycling and disposal industries, the cloud can offer services to help these industries get more real-time and accurate information about waste status to optimize their operations.Cloud computing can provide waste management as a service for the different entities involved [108].Waste bins for different categories like organic material, paper, metal, and plastic can have sensors to measure the remaining space in the bins and trigger requests for collection before they get full.Fog nodes can be utilized to detect disposal violations in real-time and offer an interface for services to examine disposal behavior [109].The collected information is transferred to the cloud continuously for further analysis and to optimize collection and processing plans [110].
For example, when the level of trash in a bin reaches a certain level, this information is efficiently transferred to a nearby fog node that in turn can use it locally and/or send it to a smart waste-management system on the cloud [111].The almost-full bins can be grouped into location clusters based on proximity, and the shortest path for collection is calculated.Furthermore, waste-collection trucks of different sizes can be used to provide more optimized waste collection and transportation [112].In dense cities, it is difficult to use large-size trucks during peak hours.However, other truck sizes can be used based on the traffic situation as well as the amount and type of waste in need of disposal.Further analysis of the information on the cloud will help identify trends and patterns about waste collection frequency, routes, amounts, and other characteristics.This information can offer more insight to improve city planning for collection schedules, disposal locations, fleet capabilities, etc.

Smart Environmental Monitoring Applications
iIFCs can offer smart services for environmental monitoring, like air quality, river, coastal, and noise monitoring [113,114].Wireless Sensor Networks (WSN) can be installed and organized to observe and communicate the present conditions of environment to deployed fog and cloud services for data collection and examination [115][116][117][118]. Advanced services, like alert services to actual values to predefined thresholds and communicate undesirable environmental situations, can be integrated in the cloud.Furthermore, there are many advantages of utilizing fog computing for environmental monitoring applications in smart cities.These advantages include decreasing communication traffic between the used WSN and the cloud, reducing energy spending of the IoT and WSN, and extending the life of these devices [115].In addition, fog computing can improve the reliability and efficiency of environmental monitoring processes [116].Fog computing can also support and/or localize several of the decision-making activities to improve response times and offer fast controls.An interesting application was developed to monitor air quality in Antwerp City, Belgium, and alert residents of ambient pollution using a fast notification system [119].Fog computing was used for to enable fast service provisioning decisions.Using fog computing allows for a significant drop in communication bandwidth use as well as latency compared to cloud only solutions.UAVs can also be used as fast deployment tools to monitor specific areas in a city [18].They can also be used as fog nodes to provide local services for more adaptive smart environmental monitoring.

iIFCs Utilization Issues
Although iIFCs can provide several benefits for smart city applications, their effective utilization involves several issues such as heterogeneity, integration, reliability, effectiveness, etc., which need to be addressed.

Heterogeneity
Different smart city applications use heterogeneous IoT devices.These devices can be stationary like surveillance cameras, sensors, and actuators; or mobile such as mobile robots, personal smart devices, wearable sensors, and UAVs.These have varying performance given the differences in processing, communication, and storage capabilities.Some IoT devices are also energy constrained, thus requiring the use of efficient or energy-aware communication and processing techniques.Additionally, fog nodes may be heterogeneous in terms of capabilities and services.These nodes may also be in different locations and have different communication capabilities.Therefore, the development and operations of systems that use heterogeneous IoT components and integrate them with such fog nodes for smart city applications are difficult.However, the utilization of abstraction and modular concepts can, however, assist in relaxing the difficulties of dealing with heterogeneity.Hiding technical details behind well-defined services and interfaces will create a more flexible and easier ways to integrate the components.Moreover, the careful design of interfaces across different IoT devices, their capabilities, and the software modules used will further enhance the situation.

Integration Effectiveness
Achieving the effective integration of IoT devices, and fog and cloud computing nodes/services for use in smart city applications is another important concern.In this context different types of IoT devices, fog nodes, and cloud services are used, all of which have different types of interfaces and constraints in connectivity.This will also impede the collection and exchange of data across all elements.Integration will require additional services or adaptors to work correctly.Unfortunately, these additions will reduce the effectiveness of the integration and possibly the overall performance of the applications.Fog nodes can be used to provide local services to support IoT devices and connect with cloud services for smart city applications.Thus, creating and managing successful integration models that are also efficient becomes a complex process.A possible solution to the integration of IoT devices and fog nodes is using the Haystack standard [120].This standard is an open-source initiative that provides standard semantic data models with the goal of simplifying the extraction of added value from the data generated by different IoT devices.These include IoT devices used in homes, buildings, and cities.In addition, the inclusion of fog nodes in these systems can help hide or mitigate some of the issues in performance due to the integration services.

Reliability
Many IoT-based smart city applications are considered critical and therefore must be available at all times and be able to deliver correct and reliable functions.Consequently, the iIFCs used for these applications must be reliable and fault-tolerant to avoid service interruptions or errors.In addition, the integration mechanisms and network infrastructure used to connect all the distributed components of the iIFCs must also be reliable.Reliability and fault-tolerance techniques and management services for cloud computing have been thoroughly investigated, and several solutions have been suggested [121][122][123][124][125][126].These solutions rely on the availability of large-scale computing and storage resources to implement such capabilities.In addition, some solutions for enabling network reliability and faulttolerance between IoT and fog nodes have been proposed [127,128].Furthermore, some initial work in fault-tolerance for fog computing has been conducted [129][130][131][132].However, there are more issues to be addressed with regard to achieving fault-tolerant fog computing for large IoT-based environments such as smart cities [133].These include issues related to effective resource management and fault-tolerance mechanisms for advanced and more complex fog computing architectures, such as multi-layer architectures.

Security and Privacy
Moving from a model where we have all computation, data storage, and software services on one system, such as an on-premise server or a single cloud node, to another model that distributes these services among multiple edge, fog, and cloud platforms is extremely challenging.Add to the mix the vulnerabilities of IoT devices and networks in such systems and you will have extremely difficult security and privacy issues [134].In particular, compliance and the ability to confirm the security and privacy of these systems are considered extremely important challenges.When distributing services on different platforms and increasing data transfers on the connecting networks, smart city information becomes more vulnerable to a wide range of security threats and attacks.To utilize iIFCs for smart city applications, it is important to include effective and efficient security and privacy mechanisms to protect the integration components and the services provided through them.We will further discuss security requirements in Section 7.

Scalability
In iIFCs, cloud computing offers scalable and on-demand computing and data storage infrastructures for smart city applications.Furthermore, fog computing enables the establishment of large-scale and scalable IoT networks to support these applications [68,[135][136][137].A single-level (linear) or multi-level (hierarchical) fog architecture can be employed to provide scalable support for smart city applications.A linear architecture is relatively simple and can be adequately managed.However, a hierarchical architecture poses many issues like determining the optimal number of levels, the required services in each level, and the resource capacities of the fog nodes in each level.As a result, the architecture provides bigger opportunities for scalability, but at the same time complicates the support for smart city applications and may affect their performance or effectiveness.Careful selection of service types and resource capacities is needed for each level.Placing services in the wrong levels could generate unnecessary network traffic and system loads that negatively impact the overall performance of the application.Services must be strategically placed on the most suitable levels to reduce network traffic and system load, enable scalability, and efficiently satisfy all of the functional and nonfunctional requirements of smart city applications.In addition, the resource capacities of the fog nodes in each level should be chosen to support the needs of fog services and meet future scalability needs.

Real-Time Support
One of the major advantages of fog nodes is their closeness to the IoT components and ability to provide real-time support.Using fog nodes can provide localized system resources to support the real-time capabilities of IoT-based applications, in a smart city [2].Fog nodes in a smart city can be close to different IoT devices where data is generated and where most actions are needed.However, fog nodes may have limited resources and with increasing load, they will not be able to provide the necessary real-time support, thus lowering the value of using them.One approach to address this is to enable active collaboration among multiple fog nodes.Collaboration between fog nodes in close proximity to each other will enable better utilization of their resources and an enhanced ability to achieve real-time performance.With fog node collaboration, better load balancing across these nodes is achieved and situations where some nodes become overloaded while there are other nodes with low loads can be eliminated [137,138].However, adding features to enable fog nodes collaboration is also a complex task, as several issues must be addressed.These include allowing fog nodes to monitor each other's loads, creating efficient replication and migration techniques, managing collective resources, and optimizing services and resources allocation to achieve load balancing which will satisfy the real-time requirements.

Mobility
Some smart city applications, particularly vehicular applications, involve mobility.Therefore, incorporating fog nodes in these applications can help support mobility and keep mobile components connected.Fog nodes will be capable of maintaining mobile components connectivity with IoT devices, between IoT devices and fog or cloud nodes, among fog nodes, and/or between fog nodes and the cloud.There are different issues involved when supporting mobility, such as keeping mobile components like vehicles or drones continuously connected with some fog services.To successfully implement such solutions, it is important to have real-time connectivity monitoring and efficient handover mechanisms [139].Mobile components may experience repeated communication interruptions that can substantially affect data processing and decision-making, leading to incorrect operations or loss of functionality.In addition, supporting mobility requires supporting service migration among fog nodes while maintaining some other requirements, like reliability and end-to-end delay [140].
Furthermore, it is important to utilize different advanced approaches, such as softwaredefined-networking [141] and mobility-aware application scheduling [142], to effectively support mobility.These issues will further complicate the necessary integration requirements and increase the overall complexity of developing these features for smart city applications with mobile components.

Communication
It is impossible to use one type of communication technology to link all components within iIFCs.The communication links that connect fog nodes and the cloud are usually different from those between IoT devices and fog nodes and among IoT devices.IoT devices are usually limited in resources, while fog nodes and the cloud are less constrained.In addition, some applications involve communication among IoT devices with different capabilities, thus requiring different communication protocols and technologies better suited for their varying capabilities.Using heterogeneous communication technologies for iIFC applications imposes more constraints on the design and implementation of these applications.It is important that smart city applications are designed and developed with communication diversity in mind.In Section 6 we will further discuss networking architectures and communication requirements for iIFCs.

Network Monitoring and Management
iIFCs smart city applications require the deployment of large-scale heterogeneous networks capable of supporting the connectivity and effective operations of thousands to millions of IoT devices, hundreds of fog nodes, and multiple cloud systems.The networks must provide different functions for supporting and enabling the operations of such applications.These networks need monitoring and management to maintain effective and efficient communication.It is practically impossible to operate reliable, highly available, and efficient smart city applications without reliable, highly available, and efficient networks.It is important to include advanced tools for monitoring and controlling these large-scale networks.The scale of these networks dictates the use of advanced and efficient tools and dashboards to monitor, configure, and manage all of these components.These tools can monitor the integrity of all the components in the network and provide easier ways to reconfigure different components and identify any performance bottlenecks in the networks.

Development and Test Environments
Developing smart city applications that run on iIFCs and ensuring that they meet several functional and nonfunctional requirements is challenging.There are some development environments designed to enable the development and operations of smart city applications on iIFCs.Examples are SmartCityWare [3] and FogFlow [4].These development environments provide a base upon which to build services for such applications.
However, these environments are limited and do not provide comprehensive solutions for developing, operating, and testing smart city applications and services.There is still a need for more innovative development environments that can deal with both functional and non-functional requirements for iIFCs for smart city applications.
Traditional distributed applications, even at a very large scale, are implemented and tested on a development infrastructure that resembles the production infrastructure, thus allowing for more accurate coding, testing, and eventually porting to the production infrastructure.A smart city application's production infrastructure is really a very large portion of the city's infrastructure and systems.It is extremely difficult to create a development infrastructure that can resemble a smart city.Therefore, it becomes difficult to build and test any application components and guarantee a close match to the operational infrastructure.Many development activities are done using simulation environments and testbeds (representing some relevant smart system components).Many of these were either initially designed for other purposes, such as ns2 [143], which was designed for network simulations, or have focused features like the City of Things testbed [144], which is mainly designed for performing large-scale wireless network and big data experiments.Therefore, successful porting of a developed application on simulation environments and testing on modeled testbeds does not guarantee easy and successful deployment on the production infrastructure.More work is needed to create development environments that closely resemble the real world, create testbeds that accurately simulate smart city components, and add more features to existing simulation platforms and testbeds.

Cost Effectiveness
As several smart city services will be supported by iIFCs, these systems should be designed, implemented, and operated efficiently and economically.The development costs can be reduced by creating and using more iIFCs for several applications in multiple smart cities (economy of scale).Furthermore, using modularity and suitable software architectures will increase software reuse and reduce software development costs.With modular design, common functions and components can be created and extensively tested, then made available for reuse in various applications that need them.For example, common modules to support communication handover, simple data aggregation, and basic security capabilities are needed by a large number of smart city applications.Every application development project reusing these modules will cut development costs in proportion to the size and number of reused modules.In addition, using advanced autonomous operational tools and controls for managing iIFCs can reduce the need for manual monitoring, controls, and human involvement, thus the operations costs can be substantially reduced.Moreover, reducing human involvement in controlling such systems will also reduce the possibility of human error, which can increase the cost of operating and maintaining these systems.Another way is to add smartness using artificial intelligence (AI), data analytics, and ML to allow functions to adapt to changes in the environment and intelligently manage the system.For example, using collective intelligence can offer more cost-effectiveness for iIFCs [145].

Optimization with iIFCs
Many real-world problems in smart cities are considered optimization problems.Examples include finding the optimal traffic-light configuration or creating optimal process schedules to improve some predefined performance metrics.Therefore, the use of optimization methods can provide advantageous features to applications for smart cities. Optimization methods can benefit significantly from the availability of iIFCs, which enables the collection and analysis of relevant data.The final outcome of these optimization methods can be decision support or even fully automated actions.As thousands (possibly millions) of IoT devices collect smart city data, fog nodes can become the organization and filtering point before shipping data to the cloud.Integrated fog nodes can also do some of the local processing and monitoring using the collected data from the IoT devices directly connected to them.They can in real-time make the necessary decisions and take the appropriate actions.All data eventually will reach the cloud for more in-depth analysis and optimizations on a larger scale.The challenge for the use of such optimization methods is defining performance measures and objectives using formal specification, analysis, and measurement models.Typically, smart city problems are multidimensional, yielding multi-objective optimization problems.This implies that different performance measures target different areas, and all of them need to be quantified and weighted with respect to their importance.With the support of iIFCs that can accurately provide the necessary data and measurements, the use of optimization methods will result in more efficient operations and better utilization of smart city resources.
Using iIFCs for smart city applications requires the efficient use of its capabilities and features to provide the most effective optimizations.Optimizations could involve different tasks, including situation learning, situation modeling, simulation, and application tuning.Cloud computing is traditionally used to perform these processes; however, these tasks can be better optimized using the capabilities of other components of the iIFCs.Some applications may require fast, context-sensitive or location-sensitive processing to optimize certain tasks.For example, the aforementioned air monitor application in Antwerp City, Belgium, utilizes the iIFCs infrastructure to perform different optimizations to satisfy the requirements of detecting pollutants in the air and alerting the city residents in near real time [119].In this example, the authors used fully integrated and autonomous fog computing controls with distributed data analysis and decision making in conjunction with optimized routing protocols to support this application.This approach is suitable since pollutants detection is generally a localized activity.One area could make use of knowledge of other areas, but that can be handled by cloud-based optimization techniques over the long run.However, the initial actions and alerts can be done locally and faster through the fog nodes.This improved the process and eliminated a high volume of data transfer to the cloud and allowed for better use of cloud resources for long-term optimizations.
Different intelligent algorithms and ML techniques can be used to support optimizations for iIFCs based on the smart city applications.Alli and Alam [146] developed a ML-based approach to secure computation offloading schemes in iIFCs for smart city applications.This approach supports employing the fog nodes for processing large amounts of data generated by many IoT devices, accelerates processing of large tasks, and conserves energy in the IoT devices.The authors used the Neuro-Fuzzy model and Particle Swarm Optimization (PSO) via the smart gateway to select an optimal fog node for computation offloading.If the fog node does not have enough resources for the workload, it sends it to the cloud.
Tajalli et al. [53] developed a distributed multi-agent-based model structured on a three-layer fog computing structure for the optimal economic dispatch of microgrids.This model actively monitors load changes and the availability of renewable energy to determine the need for dispatching microgrids to supplement the energy efficiently.A fast consensus-based algorithm updated by a fuzzy adaptive leader technique that utilizes the three layers of fog computing is used.Some current ML methods can be customized to fit better within the iIFCs environment.For example, Ghosh and Grolinger [147] developed a technique which utilizes both fog computing and the cloud to perform more optimized deep ML, instead of using only the cloud.Here, they placed the encoder part of the trained autoencoder on the edge while the cloud had the decoder part.This technique was evaluated using human activity recognition, which is one of the important methods used to enable smart security and public safety applications in smart cities.The authors found that data can be cut down on the edge up to 80% while maintaining the same level of accuracy.Another example is Edgelens [148], which is a deep ML-based object detection technique in iIFCs.The main advantage of EdgeLens is its ability to adapt to different service requirements, such as those related to the accuracy and latency of object detection processes.
Efficient optimization is also needed for effective service placement in the fog environment to support smart city applications that run on iIFCs.To achieve good support for these applications, it is important to manage and optimize service placement methods [149].Canali and Lancellotti [150] proposed a heuristic solution based on genetic algorithms for placing smart city services on fog nodes.Both the communication delay and the processing time on the fog nodes are considered in this optimization.Choi and Ahn [151] proposed another service placement approach based on the logical fog network and the pre-obtained service demand as defined by previous usage.This approach considers the nature of such large-scale smart city applications and the need for a scalable service placement approach.The authors found that service placement based on pre-obtained demand can improve the utilization of the resources available to fog nodes; however, a service migration capability is needed for this approach.Zhu et al. [152] proposed an optimization technique for service allocations on vehicular fog computing.In this model, a trade-off is preserved between the service delay and quality level.
Generally, a simulation approach can be used to understand different performance metrics to support iIFCs smart city applications optimizations.Byrne et al. [153] developed RECAP, a simulation for cloud/edge/fog computing scenarios.This simulator enables the evaluation and analysis of the effects on resources, workloads, and quality of service (QoS) metrics in different cloud and fog computing scenarios.It also helps understand and weigh the trade-offs for energy efficiency and cost in such environments.
Data collection is at the core of the emergence of smart services, since efforts to optimize services, learn patterns, and predict trends that are mainly based on how systems behave and behaved historically.The ease of collection and availability of data is the key to enabling and enhancing most of these smart city applications.Optimization techniques, in particular, require extensive knowledge of past processes and their performance.In addition, they require detailed information on the resources, capabilities, availability, and overall conditions of the running systems.The data must also be accessible to various processes at different levels, whether in IoT locations, on the edge, or in the cloud.The iIFCs provide a suitable architecture to support data collection and analysis at all levels.The inherent characteristic of IoT devices is that they collect data.Fog nodes can, to some extent, store, and process that data, while the cloud offers flexible and large-scale resources for storage and processing, making it possible to use high-performance methods for optimization.Collectively, and with the correct allocation of necessary tasks, the iIFC is an ideal infrastructure for the optimization processes of smart city applications.

Smart City Networking Architectures and Communication Requirements
This section investigates networking and communication requirements for iIFC smart city applications.It also discusses some protocols that can be used to enable communication among the systems and components employed to assist such applications.
Various wireless communication protocols can be utilized to create connectivity between the various IoT devices and the local fog platforms.Such protocols include short-, medium-, and long-range protocols, which may be chosen depending on the application involved.In some cases, where power usage must remain very low due to the energy limitations of smaller IoT devices, a multi-hop approach can be used to achieve connectivity among IoT components.Then, data messages can be collected by cluster heads within each IoT cluster, which can also play the role of gateway nodes.If multiple clusters exist in a certain small area (e.g., several floors in a building, where each floor constitutes a cluster), then the cluster heads relay their collected information to a sink node, which then forwards the data further up the hierarchy to the fog nodes and the cloud.Figure 6 presents an illustration of this architecture.limitations of smaller IoT devices, a multi-hop approach can be used to achieve connectivity among IoT components.Then, data messages can be collected by cluster heads within each IoT cluster, which can also play the role of gateway nodes.If multiple clusters exist in a certain small area (e.g., several floors in a building, where each floor constitutes a cluster), then the cluster heads relay their collected information to a sink node, which then forwards the data further up the hierarchy to the fog nodes and the cloud.Figure 6 presents an illustration of this architecture.

Fog
Fog Fog Figure 6.Illustration of multi-hop networks connected to fog nodes through gateway and sink nodes.
On the other hand, connectivity between the fog and cloud computing platforms can be established using appropriate protocols and networking technologies with higher data rates to support inter-domain IP traffic.Generally, broadband links, fiber optic networks, and dedicated links over the internet are used to connect fog nodes with the cloud infrastructure.The decision on the types of connections depend heavily on how much communication is expected between the fog nodes and the cloud.For example, continuous video streams sent from fog nodes connected to surveillance cameras will require high bandwidth and it may be necessary to use dedicated links; however, applications sending small amounts of data to the cloud will be able to work well over a regular Internet connection.On the other hand, connectivity between the fog and cloud computing platforms can be established using appropriate protocols and networking technologies with higher data rates to support inter-domain IP traffic.Generally, broadband links, fiber optic networks, and dedicated links over the internet are used to connect fog nodes with the cloud infrastructure.The decision on the types of connections depend heavily on how much communication is expected between the fog nodes and the cloud.For example, continuous video streams sent from fog nodes connected to surveillance cameras will require high bandwidth and it may be necessary to use dedicated links; however, applications sending small amounts of data to the cloud will be able to work well over a regular Internet connection.In addition, different layers of fog nodes can exist between the IoT and cloud layers.Connectivity between these layers can be wired or wireless.Fog nodes can also consist of different types of networking devices including routers, switches, and wireless access points [43].Wireless protocols can be employed for fog-to-fog and fog-to-cloud connectivity depending on the existing networking infrastructure.Typically, cloud-to-fog connectivity is established by internet service providers using optical links to ensure high bandwidth.Fog-to-fog connections can be established using networking technologies, which include fiber optics, point-to-point microwave links, free space optics, IEEE 802.16 (WiMAX) [154], cellular and wireless LAN protocols such as IEEE 802.11 (WiFi), to name a few.Moreover, cellular technologies, such as 3G, 4G, and 5G, can be good candidates to ensure fast, reliable, long-range connections and might be the only available technologies in some areas.
In the following discussion, we focus on the link between the IoT smart city devices and fog platforms.Applications with short-range communication, such as smart buildings and smart water networks, can utilize protocols from the personal area network (PAN) classes, such as IEEE 802.15.4 (Zigbee) and 801.15.1 (Bluetooth) [154,155].These protocols are usually distinguished by lower bandwidth, low energy consumption, and short-range communication.Applications and services demanding longer ranges, like intelligent transportation and manufacturing and control, can use protocols in the local area network (LAN) class, such as IEEE 802.11 [156].Applications involving wide-range communication, such as UAVs and smart grids, can use wide area network (WAN) protocols, such as IEEE 802.16 [157], cellular, and satellite communication.All of these protocols can support asynchronous and synchronous data connections.Asynchronous data connections can be used for smart city applications with best-effort traffic, which can tolerate delay.These applications include structure monitoring and data-gathering services.Such services can be a part of smart city applications such as smart structural health management, smart water networks, smart sewage and waste management, smart environmental monitoring, and smart energy.Synchronous data connections can be used for smart city applications with data traffic requiring more stringent QoS requirements, such as bandwidth and delay [158] such as real-time and multimedia communications.Services that generate such traffic can be a part of smart city applications, such as smart transportation, smart public safety and security, and smart healthcare and wellness.These applications may be using cameras to monitor and transfer captured videos of different situations to determine the appropriate actions, which must be done in real-time.Additionally, these networking protocols provide security and reliability functions.Though, majority of these security functions need extra processing and can create additional delay and consume a significant energy amount.Consequently, these considerations should be considered before enabling these features.
Some smart city applications require low bandwidth needs, such as environmental monitoring, while other applications need high bandwidth, such as interactive vision-based UAV applications.Nevertheless, even for an individual application, different functions need different bandwidth levels.This is based on the type of data being collected and exchanged with other systems.For instance, some basic UAV-base sensing applications will only need a low bandwidth, while UAV-based applications performing scans, recording videos, and directly communicating that data to a ground control center will need higher bandwidth.
Additionally, some smart city applications require very low end-to-end communication delays.Examples of such smart city applications are smart transportation and smart grids.Delays are not tolerated, since the control information being communicated needs to reach its destination within a few micro-or milli-seconds to support reliable control systems and quick response times so as to avoid the possibility of physical damages or collisions.In contrast, other applications have a higher tolerance for communication delay, such as UAV applications that collect sensor data for future analysis.
Energy efficiency is also a critical necessity for smart city applications, though various applications that have in-house power sources, like smart grid systems, can work with high energy consumption protocols [158].Other smart city applications have very limited energy sources and require protocols that consume less power.Some examples include UAV-based smart city applications and applications for remote pipeline monitoring [159].It is also imperative to consider that some applications such UAV-based smart city applications and remote pipeline monitoring use wireless communication [160].Others, such as smart grids and smart buildings, use both wired and wireless communication networks.In addition, some applications need mobility support while others do not.These are important requirements that need to be considered in connecting with other systems such as fog and cloud computing.
There are some research efforts to provide solutions for networking and communications issues for iIFCs.In a study by Naranjo et al. [161], the authors developed a fog-based network architecture named FOCAN to support the Internet of Everything based smart city applications.With this network architecture, different network resources are utilized to jointly compute, route, and communicate to reduce latency and minimize energy consumption.This includes intra-fog communication and wired/wireless communication through thing-aware TCP/IP links.Another example is provided by Peng et al. [162], who propose a reconfigurable architecture named iCloudFog to enable agile integration of fog and cloud networks.This architecture is designed to fit the needs for provisioning different IoT devices and Fog nodes.Fog nodes, including wireless, wired, or hybrid fog nodes, can be integrated in this architecture.Furthermore, Desikan et al. [163] proposed a solution of topology control methods for making and handling a large-scale smart city IoT network.This solution consists of two phases: Construction Phase and Maintenance Phase.During the Construction Phase, a cost-effective IoT network including fog nodes are built while during the Maintenance Phase, the resource utilization in the network is optimized.Maswood et al. [164] developed an optimization for minimizing the bandwidth cost in an integrated three-layer cloud-fog system.

Smart City Security Requirements
Like any other application, applications based on iIFCs will face security threats.These threats may be natural threats or human threats.Natural threats can be floods, fire, power outages, or earthquakes.These disasters have direct safety implications; however, they also lead to various security threats by exposing systems and data sources.Human threats can be external intruders, who may spy on the city's iIFCs network traffic, interfere with operations, or directly attack systems and try to steal valuable information or compromise assets and/or people in the smart city.There are also internal intruders who spy on their organizations, find ways to profit from their positions inside these organizations, or cause other damages.Internal threats also come unintentionally when users and operators do not follow security procedures or create unintentional problems in the systems.Therefore, there is a strong need for different types of security measures and controls to protect iIFCs smart city applications.
These security controls are divided into three types: administrative controls, technical controls, and physical controls.All these security controls are important to protect smart city applications.Administrative controls are more managerial controls that include defining security policies, security standards, privacy requirements, guidelines, awareness, procedures, and documentation for smart city systems and applications.In addition, the enforcement of these defined security policies and other controls is another important aspect of administrative controls.Technical controls are used to implement and support the defined administrative controls for iIFCs smart city applications.These include authentication mechanisms; encryption for communication, storage, and computations; and access control procedures.In iIFCs, it is important to provide end-to-end security for both the environment and the smart city applications in use.While there are good security controls that have been developed for cloud computing [165], there are still some issues for fog security controls [166] and IoT security controls [167].This is important not only in protecting these individual systems but the whole iIFCs as well [42].Security measures must account for the different platforms and networking infrastructures in use in addition to being able to adapt and evolve to provide flexible protections for the services used and the changes in the environment where the application is operational.
One recently developed security model that can be used effectively for security in smart city applications is blockchain [168][169][170][171].The main advantage of blockchain is that it enables a group of entities to reach an agreement on a certain activity and register that agreement without the need for a third party.Their agreed upon activities are registered, secured, and shared among all parties using blockchain.Blockchain incorporates techniques from peer-to-peer networks and cryptography to support a distributed shared ledger among a group of entities or users (organizations, firms, individuals, robotics, autonomous cars, smart devices, software agents, etc.) such that all involved agree on its content and all transactions are secure and cannot be altered after being appended to the chain.Furthermore, the nature of blockchain provides traceable audit trails, measurable components, and access to detailed information regarding transactions recorded in the chain; thus, it permits for detailed validations, tracking, and measurements.These features can be used effectively among different IoT, fog, and cloud systems that belong to different organizations in a smart city to establish a good level of trust among them and maintain detailed records of transactions exchanged between them.
The last security control type is physical controls, which addresses threats affecting the physical components of iIFCs.Some components of these systems like the cloud infrastructure can be easily protected as cloud service providers usually invest heavily in their datacenters and ensure physical safety.Other components such as IoT devices and some fog nodes can be installed in remote locations or in areas prone to natural or human risks.These would usually operate unattended and cannot be protected easily.Therefore, it is important to design systems that can tolerate physical attacks on smart city components and are capable of isolating such components when attacked to minimize exposure.In addition, when possible, specific components and fog nodes need to be equipped with specially designed security and alert services targeted to the specific threats to these components.Some initial research efforts to provide security solutions for iIFCs include the work of Mukherjee et al. [172], which proposed security middleware for end-to-end communication for iIFCs.In another study, Thota et al. [173] proposed a fog-based security platform for IoT and cloud computing for healthcare applications.The authors provide mechanisms in their platform for the authentication and authorization of the connected devices.Amin et al. [174] proposed a secure communication protocol for fog-cloud environments.Passwords are used to enable the security mechanism in this protocol.Mohamed et al. [175] proposed using data-driven security to protect smart city systems such as iIFCs.Guan et al. [176] developed an anonymous and privacy-preserving data aggregation technique for IoT-fog environments.This technique uses authentication and supports multi-authority to control smart devices and fog nodes.Hu et al. [177] proposed a framework for securing and preserving the privacy of residents in IoT-based face identification applications utilizing fog computing.

Discussion
Applications of iIFCs for smart cities offer various ways to deal with all aspects of city life like smart energy systems, smart water networks, smart waste management systems, smart transportation systems, and intelligent safety and protection applications for their inhabitants and infrastructures.Table 1 includes these applications and reviews by what means IoT, fog, and cloud computing can provision them.There are several requirements necessary for the effective utilization of iIFCs to create optimized smart city applications and services.Both iIFCs and the optimization methods employed for diverse applications need to be developed to deal with the various challenges involved.The ability to seamlessly integrate and use many components and devices like sensors, actuators, smart wearable devices, and robotics along with all the software services needed is one challenge.The applications are further complicated by the need to interact with humans and other systems.Furthermore, the need to use advanced software and algorithms for analysis, optimization, decision-making, and to achieve autonomy presents another challenge.As a result, iIFCs must be flexible, scalable, and secure to support the growing and demanding needs of smart city applications.In addition, these systems must be able to handle heterogenous components, mobile devices, and unpredictable operational conditions.
Big data has also become an integral part of smart cities, given the amounts of data being observed, generated, and stored.The iIFCs need to provide the capabilities to handle and use big data at various levels.Real-time capabilities are also a must, since many smart city applications require instantaneous decisions and actions for various applications.For example, a smart grid needs to be able to quickly change supply levels to certain areas or immediately cut off power due to a failure.iIFCs designed with these requirements in mind will lead to the creation of usable and flexible platforms that will ease development efforts and increase flexibility to operate these applications effectively and efficiently.
A major part of the services in many smart city applications need to incorporate accessible and efficient optimization features and services.These services require access to huge resources for storage and computation, which means they usually reside in the cloud.The iIFCs will allow for these cloud services to be directly linked to the applications and effectively utilize the fog for caching, real-time support, and data organization and aggregation services.This arrangement will provide the flexibility necessary to support the different levels of optimization as well.Based on the types of the services and the problems targeted, different types of optimization approaches are needed, depending on the level of efficiency reached, time available, and accuracy required.The amount of data that needs to be processed to achieve optimization plays a large role in the resources needed for optimization.Knowing this, smart city optimization needs will require to be distinguished by three factors: efficiency, optimality, and data.Nevertheless, the influence on these factors will alter according to the characteristics and constraints of the services required.Gather, record, and process patients' data collected from medical labs, clinics, and hospitals.Create comprehensive and inclusive assessments of the patient histories.Use intelligent methods to optimize the entire healthcare supply chain.

Smart structural health management
Sensing and monitoring conditions of structures like roads, bridges, tunnels, rails, and pipelines Link structural health monitoring devices in a city network.
Reduce communication traffic between the devices and their remote-control stations.
Deliver fast, localized safety alerts and controls.
Gather, record, and process structural health data over time.Support data analytics and decision making to improve maintenance procedures and effectively manage the city's structures.Assist in improving environmental conditions through local observations and by using smart algorithms closer to the targeted sites.
Gather, record, and process long-term data to analyze the city's environmental and health conditions, identify risk factors, and make smart decisions to improve conditions and support better sustainability.
To illustrate, in a smart city transportation application the optimization process will place a greater emphasis on efficiency at the price of optimality.The need to have fast solutions that work is more important than having the perfect, most optimized, solution.However, for planning projects, like highway extension projects, where time is not a concern, the emphasis changes to optimality, basically because it is not required in real-time.This is logical since decisions pertaining to infrastructure plans, changes, and expansions must be as accurate as possible.In both instances though, the volume of data required to achieve a resolution could simply change the emphasis further.For instance, for traffic control, if the focused zone is very large and busy, then additional data will need to be processed; nevertheless, we still require results quickly.Thus, we change the emphasis further to efficiency.Conversely, with highway planning, no matter how much data is obtainable, we generally have adequate time and resources to deal with all the data and accomplish the highest optimization (accuracy) levels.Managing these factors and changing requirements can be done efficiently when the applications using them can easily and seamlessly access all the necessary resources with the support of the iIFCs.Despite all the promising capabilities an iIFC can offer for smart city applications, there are still various open issues that must be addressed to enable the effective utilization and optimization of smart city applications.This incorporates constructing efficient, effective, dependable, and secure iIFCs architectures that address the issues of smart city applications and support their varying requirements.We need more studies and in-depth investigations of these integration opportunities and issues, involving identifying effective integration approaches and creating some level of uniformity or standardization on how these integrations can be designed and used.In addition, security issues are of extreme importance and, while current models and techniques can help, more advanced techniques and suitable approaches to large-scale and distributed security measures are needed.There are several promising works to secure iIFCs [178][179][180] for different applications.In addition, there is other emerging effort to develop some security approaches for IoT and fog applications in smart cities [175,[181][182][183]. Nevertheless, there is still the requirement to further improve and upgrade these security and privacy approaches and include them in development platforms.There is also a need to develop administrative security controls and figure out how to tolerate physical attacks in such systems.
Another critical concern is that a substantial area of the smart city applications can be viewed as decision making problems, or as multi-objective optimization problems.Consequently, we should utilize adaptive and intelligent decision support systems in place to facilitate suitable solutions according to the attributes of the problem, the architecture, and the resources accessible to the iIFCs.This concern will come to be even more critical and noticeable with growing data collection and the rising number of issues that will require to be solved.This includes having decision support preprocessing stages that will enhance the value of the smart city applications.Furthermore, decision-making and optimization methods require accurately specified objectives to direct them.Decision support services incorporated in the iIFCs will facilitate these functionalities in different smart city applications.
The recognition and adoption of integrated technologies in a framework like iIFC is starting to show in actual smart city projects around the world.Some smart cities started to recognize the importance of using fog computing to support IoT based smart city applications and to enable the integration with the cloud.Denver as a city investing in IoT solutions to build smart city applications noticed the importance of using fog computing for their applications [184].The vice president of innovation for Denver South, Jake Rishavy mentioned that "We see fog computing as a critical tool for enabling the advanced digital applications that will enrich the experiences for area businesses, citizens and visitors as we head into the future."Another city that focuses on utilizing fog computing to realize its smart city applications is Barcelona [185].They focus on fog computing initiatives for some aspects and applications such as power management, access control, event-based video, traffic management, and connectivity on demand [101].While there are some initiatives to utilize fog computing for smart cities, there are still some issues need to be further investigated especially those related to trust, authentication, privacy, energy efficiency, and optimal locations of fog nodes in a smart city.All these issues are important due to the potential of using thousands of fog nodes in a smart city to support its smart applications.

Conclusions
iIFCs offer the opportunity to create suitable platforms to develop and operate important smart city applications.These applications can utilize services provided by IoT devices, fog nodes, and cloud services.This paper provided a review of smart city applications and how the integration of IoT, fog, and cloud technologies can better support these applications.This paper also discussed the technical challenges and reviewed current work to develop solutions to relax these challenges.Integrating services using these systems offers several opportunities to optimize service values and improve efficiency and controllability of smart city applications.Each technology will cover different and specific needs for these applications.For example, an application will be able to integrate sensing and actuating activities powered by real-time decision support services from fog nodes, while uploading and storing all data to the cloud for further analysis, long-term planning, and decision-making.While there are some research efforts and solutions to address the challenges of utilizing iIFCs for smart city applications, there are several issues that need to be resolved to achieve effective integration and good results.These issues are related to the iIFCs' architectural design, security, privacy, and appropriate optimization methods customized with the attributes of both the smart city and the iIFCs in use.
As we discussed earlier, some cities started to utilize fog computing to add efficiency, scalability, and more smart features for their smart city applications.However, there is more to be done in this area.One of the main issues with the iIFC paradigm is how to make this distributed system work as a single system and how to utilize it and manage it as one system.There is a lot more to be done to realize the full capabilities of such paradigm.The application domain is wide, as is the possibility for many benefits in optimizing smart city resources and increasing the quality of life for smart city residents once the challenges are resolved and the key issues hampering such utilization are solved.Identifying the challenges and outlining what is being done currently to address them is a first step for further in-depth research and development efforts for more ways to support the integration and develop highly effective smart city applications.

Figure 6 .
Figure 6.Illustration of multi-hop networks connected to fog nodes through gateway and sink nodes.

Table 1 .
Smart City Applications that can benefit from an iIFCs platform.
Reduce communication traffic between event locations and remote-control centers.Provide fast alerts for local response teams.Gather, record, and process data to assist in delivering optimized action plans and enhance emergency relief efforts.Offer in-depth analyses to help improve safety procedures, optimize resource distribution, and enhance response capabilities.Provide efficient local monitoring and controls for sewage management as well as real-time detection and alerts for failures and leakage.Support repair and maintenance procedures and reduce risks to workers and residents.Gather, record, and process long-term data to enhance sewage network operations, reduce failures, and enhance waste and recycling management.Provide services for planning, management, and future enhancements.