The Internet of Things is a recent computing paradigm, deﬁned by networks of highly connected things–sensors, actuators and smart objects–communicating across networks of homes, buildings, vehicles, and even people. The Internet of Things brings with it a host of new problems, from managing security on constrained devices to processing never before seen amounts of data. While cloud computing might be able to keep up with current data processing and computational demands, it is unclear whether it can be extended to the requirements brought forth by Internet of Things.
Fog computing provides an architectural solution to address some of these problems by providing a layer of intermediary nodes within what is called an edge network, separating the local object networks and the Cloud. These edge nodes provide interoperability, real-time interaction, routing, and, if necessary, computational delegation to the Cloud. This paper attempts to evaluate Go, a distributed systems language developed by Google, in the context of requirements set forth by Fog computing. Similar methodologies of previous literature are simulated and benchmarked against in order to assess the viability of Go in the edge nodes of Fog computing architecture.
Bonomi et al list several examples for Fog computing such as a Connected Vehicle, Smart Grid, and WSNs. Environments that have yet to implement Fog computing but might beneﬁt from the paradigm include Thin Server Architecture and Advanced Manufacturing Systems.
This chapter goes over the history and development behind the Go language. Constructs particular to Go make it uniquely suitable for use in Fog nodes. This chapter covers these various features and why they are particularly suitable for this problem.
ARCHITECTURE, IMPLEMENTATION, AND EVALUATION
The interface for CoAP is modeled after Internet HTTP requests. Furthermore, it follows the REST (Representational State Transfer) paradigm common to web development, but adapted to ﬁt the constraints of weaker smart objects. Like REST, CoAP implements GET, PUT, POST, and DELETE methods which function similarly to their HTTP counterparts. However, CoAP messages diﬀer drastically from HTTP messages as seen in Figure 4.1.
In this paper, I have presented a Fog node implementation in Go, run on a similar platform as presented by Cirani et al. The results of my experiment have shown that Go is suitable for this domain if not more competitive than Java. The Fog node that was developed for the purposes of this paper has a lot of room for improvement. Origin server and resource discovery, both pivotal parts of CoAP, were left out of FogPi in this version. Future work will expand on creating a more robust node for greater analysis of Go in the constrained IoT context. For purposes of analyzing the beneﬁts of Go, certain benchmark tests could have been expanded to include the broader requirements of Fog computing outside the comparative benchmarks done within this paper.
Notably, in a Fog computing solution for interfacing mobile device clouds by Shi et al, the Erlang language was used for their CoAP server due to their dissatisfaction with performance of C, Python, and Java-based CoAP solutions for Raspberry Pi. Within the study, throughput, average round trip time, and timeout probability for clients was measured on their CoAP server. Erlang is language with similar characteristics to Go: concurrent, garbage collected, compiled, and developed with distributed systems in mind.
Author: Ellis H. Butterfield