Internet-of-Things (IoT) is maturing as a field, and now IoT platforms have started to publish their “Things” publicly on the web. “Things” are described as anything that transmits data over a network (eg. sensors, computers, microwaves, smartphones, watches and so on.). As the number of internet-enabled devices grows exponentially, it has been envisioned that IoT will significantly impact our lives in a number of ways. Currently, we can talk to our Apple watch and have it turn the lights off in our house, which is damn cool. The number of ways we can use IoT is only limited by our imaginations.
- **Internet-of-Things** is an entire network of interconnected things (the picture above).
- **Things** can be anything, from a sensors, to home appliances, to even whole vehicles.
- **Network** - an interconnection between nodes (in our case, Things) which allows the nodes to share resource.
- **API** is an application programming interface, which is used to publish or consume *data*. This is also called a *service*, for example, we can use a fuel API which provides us the *service* to receive *data* indicating the vehicle's fuel level.
- **Data** represent the results of the analyses. This could be anything from sensor readings (eg. 5ph), to thermostat results (300°F), to even fuel consumption per hour (10L).
- **Coarse-grained** refers to larger components of an Internet-of-Things system, for eg, an entire fleet of cars.
- **Fine-grained** refers to smaller components of an Internet-of-Things system, for eg, a single car's fuel level data reading.
Internet-of-Things Systems and APIs
A challenge in fulfilling the vision to build useful IoT systems is representing IoT resources as separate services.
Through the use of cloud computing, a novel approach has been suggested to encapsulate fine-grained IoT resources behind a well-defined Application Programming Interface (API) that provides access, configuration and operational capabilities for cloud-based IoT systems. Traditionally, IoT infrastructure resources have been mostly provided as coarse grained and rigid packages, by designing infrastructure components and software libraries purely for a single purpose or use case. This has been found to create set-backs for self-service and consumption of IoT resources. By having fine-grained IoT resources behind an API, resources can then be represented as separate services and can be integrated into applications more fluidly.
Cloud infrastructure which utilises conventional virtualisation pay a higher price for resource overhead. Container-based technologies today, such as Docker, improves the utilisation of data centers and optimisation of hardware resources. Docker is a tool that packages an application and its required dependencies into a containerised environment. It relies on AuFS (Advanced Multi-Layered Unification Filesystem) as a filesystem for storage and container management. Check out this post for a brief intro to Docker.
IoT Systems regularly deal with Big Data. A concept in which data is too large to store with the available storage systems at hand. Classifying whether a system is associated with “Big Data” can be done by evaluating the three V’s - Volume, Velocity and Variety of the data. Volume corresponds to how much data is required to be stored; Velocity is how fast the data is ingested; and Variety is the type of data, whether it be structured or unstructured data (eg. media, data packets, audio). Analysing the three V’s for an IoT system helps to determine what type of database is most suited for the system to handle the amount of data, and to prevent any data loss from occurring.
IoT ecosystems can be challenged when attempting to store streaming events in a centralised database, archiving the data to be analysed or re-used later. By storing all events transmitted by all the “Things”, it is possible to observe the behaviour of the data history and gain insights that yield benefits for the end-user. There has been recent advancements in cloud computing that have shown promising results for storing data in high volumes, and preserving a high availability rate through the utilisation of distributed data storage, virtualisation, and data centres. There are many storage service variations in cloud computing that are offered, based on the service provider. (eg. Google Cloud Big Table or AWS Storage Gateway).
IoT ecosystems tend to have a large amount of “Things” which generate a variety of data to be stored. By having flexible schemas, it allows the possibility for storing structured and unstructured data without having to clean your data. Most relational databases hardly support unstructured data. This is mainly due to data being too large, or of an unsupported type that violates constraints of a predefined schema. NoSQL is one possible way to store unstructured data, as learned when Web 2.0 applications became prominent.
IoT ecosystems that store large quantities of data can run analytics on archived big data to make inferences, providing customer insights. This has tremendous amounts of return, especially for businesses, as they have the data to back their decision-making process.
IoT shows great promise for the future of technology. Especially with the amount of use cases we can invent, where we are only limited by imagination. The good news is that technology companies have already developed systems to deal with a large portion of the challenges in IoT. Yet, there will still be new challenges to solve. As the amount of data grows, technology will have to keep up through increasing storage and compute capabilities. Regardless, we think IoT will hold up for the years to come.