## 5 State of the Art
### Middleware Platforms for Distributed Computing Systems  
Most middleware platforms for distributed computing systems, such as edge clouds [5] and mobile ad hoc clouds [4; 6], provide computing or storage services but do not support data collection and actuation services; they are also not designed for heterogeneous multilayer network environments. Therefore, they do not efficiently utilize heterogeneous routes, simultaneous transmission on multiple communication technologies, and several network-level parameters, such as link quality and lifetimes. Most of these platforms do not use end devices as service provider nodes. For example, Hyrax [23] platform supports cloud computing on android mobile devices. Fram [24] is a content distribution middleware system for android devices that is designed for an ad hoc environment and also addresses node mobility. Femto Clouds [25] is another platform that enables nearby devices to execute parallel tasks. Devices in Femto Clouds communicate via Wi-Fi technology. Multipeer Connectivity [26] is a framework that enables nearby devices to communicate via messages, stream data, or files. It uses Wi-Fi, Bluetooth, and Ethernet for underlying communication. A framework proposed in [27] enables mobile devices to communicate with each other via short-range wireless communication technologies such as Wi-Fi and Bluetooth. It introduces the concept of micronet and macronet. A micronet consists of devices connected using a single communication technology whereas macronet is defined as a set of micronets connected through member devices. It uses a store-carry-and-forward communication paradigm for intra-macronet and internacronet communication. An OpenStack-based middleware platform is proposed in [28] to manage resources at edge, fog, and cloud levels. In the proposed system, edge devices establish a local area cluster at the edge level to reduce data transfers over public networks. This also reduces data transfer times and thus improves application performance. If local clusters are unable to fulfill application or system requirements, fog level and cloud level resources are used. A middleware to support the execution of crowdsourcing applications on edge cloud is described in [29]. It consists of three layers: link layer, network layer, and service layer. The link layer provides access to several communication technologies such as Wi-Fi and BLE. It supports device discovery and connection operations. The network layer is responsible for routing and network management, and the service layer offers computing, storage, and messaging services. A resource management middleware for the fog-edge environment to fulfill latency requirements of internet of things applications is proposed in [30]. The proposed middleware decides whether to execute a task locally or remotely on a fog server based on network conditions. The middleware consists of several components. Latency estimator component estimates latency which is made up of three parts: last-hop latency to a wireless access point, wide area network latency to reach fog server, and task execution time on the fog server. To estimate last-hop latency, a database is used that stores network latencies for different locations and times. The latency is then estimated by querying this database. For a selection of a fog server to execute an application task, several machine learning models are used. A resource allocation scheme is proposed in [31] to improve energy efficiency. The proposed scheme focuses on allocation of interdependent tasks and uses transmission power control mechanism. A resource management system is proposed in [32] to improve the response time of latency-sensitive applications. The proposed system makes decisions based on the network, compute, and reliability characteristics of edge nodes. A live video streaming service was used to demonstrate the performance of the system. In [33] a resource allocator named Justice is proposed for cluster managers.