For Guidance (+91) 7550 227 228 (WhatsApp Only)

Get Latest CSE Projects in your Email

Fog Computing with Go: A Comparative Study


The Internet of Things is a recent computing paradigm, defined 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 bench marked against in order to assess the viability of Go in the edge nodes of Fog computing architecture.


Figure 2.1: Fog Computing Architecture

Figure 2.1: 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 benefit from the paradigm include Thin Server Architecture and Advanced Manufacturing Systems.


The Go programming language was conceived by engineers Robert Griese-mer, Rob Pike, and Ken Thompson in 2007. The language is statically typed, compiled, garbage-collected, and provides primitives for concurrency and synchronization. The language was initially developed to deal with problems arising from growing numbers of computational clusters, highly net-worked systems, and multicore processors. Simply put, Go was developed to make software development for huge systems more productive and scalable.

The language was developed with the idea that “less is more”. Go is an attempt at making systems programming more expressive and as a result is more opinionated and restrictive. Despite being developed as a counterpart to the highly verbose and complex C++, Pike states that most users of the language are Python and other dynamically typed, interpreted language users. He posits that those who are accustomed to using C++ don’t care to give up their level of control over features such as memory allocation and pointer arithmetic, whereas Python and Ruby users gain a much faster, concurrent language, without giving up their expectations of expressiveness.


Figure 4.1: CoAP Message Format

Figure 4.1: CoAP Message Format

The Token field is used to match responses with requests. The Options portion of the payload is 0 or more option codes contained in both response and request messages containing information such as Max-Age, Uri-Path, and Content-Format.


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 benefits 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. For a truly comparative study, I believe that comparing similar performance metrics for FogPi against Shi et al. would place Go’s computational performance and concurrency handling in a better context. One critique of Shi et al. is the lack of any metrics for memory usage.

Fog computing edge nodes are expected to be more performant than the smart object network that they manage. However, these edge nodes are still expected to be relatively constrained. Even a Raspberry Pi, considered a moderately powerful IoT device, has far less RAM and total storage than conventional computers. Neither Cirani et al, Shi et al, nor this study, were adequate in testing major components of Fog computing, specifically mobility support and its role as an intelligent layer. For mobility support, protocols such as LISP or HIP should have been considered and implemented to decouple smart object identity from location. Future works should expect to validate a Fog node’s ability to handle large amounts of requests in conjunction to providing a layer of computation.

Source: Claremont McKenna College
Author: Ellis H. Butterfield

Download Project

>> 200+ IoT Led Engineering Projects for Final Year Students

>> IoT Software Projects for Final Year Students

>> More Internet of Things (IoT) Diy Projects for Engineering Students

For Free CSE Project Downloads:
Enter your email address:
( Its Free 100% )

Leave a Comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>