Skip to content

SO Apps 3, Reinventing the Wheel Is Not Necessary for IoT Software Architecture

June 30, 2015

The focus of this article is on the software and its structure required for end-to-end Internet-of-Things (IoT) systems. Despite its name, IoT is not just about the internet and “things”. Rather it is about systems – complex, end-to-end hardware and software systems consisting of numerous components collaborating to fulfill a common goal.

The software of end-to-end IoT Systems typically involves the following:

  • Taking data from the “things”, putting it into storage, and perhaps analyzing it on the fly.
  • Using Big Data to further analyze the data.
  • Using data analysis results to determine when to send control commands back to the “things”, creating feedback loops.
  • Presenting analysis results to people in via User Interface technologies so they can make effective decisions.
  • Plus keeping audit trails, ensuring there is proper security, provisioning and managing the “things”, and more.

Adopting such a systems perspective allows one to more accurately access the amount of effort, time, money, and skill sets required to develop a given IoT System.

Despite the complexity involved in an end-to-end perspective, the good news is when developing IoT Systems we can use all of the software structural (aka software architecture) knowledge we’ve gained over the past decade from developing mission critical distributed systems, and Service Oriented Architectures (SOA), and Cloud Systems. We do not have to reinvent the wheel for IoT system software architecture and software. The structure of much of an IoT System’s software is like that of typical Service Oriented Apps and that of Hybrid Cloud Apps (an app with components running in both a data center and in a cloud). This is why I have included this article in the blog’s SO Apps series. Applying the software architecture knowledge from distributed systems, Service Oriented Architecture, and Cloud Systems can decrease the cost and Time-to-Market of developing IoT Systems, plus at the same time increase their quality, reliability, and safety.

Here are basic definitions of these terms to aid you in adopting this system perspective.

Definitions – Distributed System, SOA, Cloud Systems

IoT Systems are distributed systems by their very nature, defined by the Wikipedia as “a software system in which components located on networked computers communicate and coordinate their actions by passing messages. The components interact with each other in order to achieve a common goal.”  From http://en.wikipedia.org/wiki/Distributed_computing. We have been developing distributed systems for over 20 years and we have learned a lot (see the book Enterprise Integration Patterns for examples).

During the past 10 years or so we have also learned that using Service Oriented Architecture makes developing and maintaining distributed systems much more time and cost effective. This translates to a faster Time-to-Market for both initial development and for post-release enhancements to systems. SOA is defined in the Wikipedia as “an architectural pattern in computer software design in which application components provide services to other components via a communications protocol, typically over a network. The principles of service-orientation are independent of any vendor, product or technology.” From http://en.wikipedia.org/wiki/Service-oriented_architecture. We have learned a lot about effective ways to use SOA during this time (see the book SOA Patterns for examples).

Finally, all of today’s leading commercial Cloud Systems are built on top of distributed systems and use Service Oriented Architectures in their internal implementation. Cloud Systems are unique in that they are self-healing and self-scaling. In other words, when one of the computers in a cloud crashes the Cloud System software (like Microsoft’s Azure) is smart enough to automatically detect the crash and move all the customer apps running on the crashed computer to another good computer. And, when customer apps require more compute power when using cloud Platform-as-a-Service, the Cloud System software is smart enough to automatically start up more of its internal computers, and then move customer apps to the newly started computers to meet customer demand. The advanced techniques of distributed systems and SOA that are used in building Cloud Systems that do these advanced things can be applied to IoT Systems to enhance their security, safety, reliability, resiliency, and capacity scalability. You can see more references concerning some of the techniques and challenges of building Cloud Systems at https://dotnetsilverlightprism.wordpress.com/2014/03/16/build-cloud-apps-that-deliver-superior-business-value/.

Please see the subsequent article in this SO Apps series for a list of IoT System Info Sources that I’ve found helpful.  To be published in July 2015.

I hope the systems perspective presented above, coupled with modern service oriented software architecture patterns and practices, will aid you in developing highly useful IoT Systems that can be delivered on schedule, on budget, and on quality.

George Stevens

Creative Commons License

dotnetsilverlightprism blog by George Stevens is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Based on a work at dotnetsilverlightprism.wordpress.com.

 

Advertisements
Leave a Comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: