AWS vs Azure vs Google Cloud Platform - Internet of Things
Choosing the right cloud platform provider can be a daunting task. Take the big three, AWS, Azure, and Google Cloud Platform; each offer a huge number of products and services, but understanding how they enable your specific needs is not easy. Since most organisations plan to migrate existing applications it is important to understand how these systems will operate in the cloud. Through our work helping customers move to the cloud we have compared all three provider's offerings in relation to three typical migration scenarios:
- Lift and shift - the cloud service can support running legacy systems with minimal change
- Consume PaaS services - the cloud offering is a managed service that can be consumed by existing solutions with minimal architectural change
- Re-architect for cloud - the cloud technology is typically used in solution architectures that have been optimised for cloud
Choosing the right strategy will depend on the nature of the applications being migrated, the business landscape and internal constraints.
In this series, we're comparing cloud services from AWS, Azure and Google Cloud Platform. A full breakdown and comparison of cloud providers and their services are available in this handy poster.
We have grouped all services into 9 categories:
- Compute
- Storage and Content Delivery
- Database
- Analytics & Big Data
- Internet of Things
- Mobile Services
- Networking
- Security & Identity
- Management & Monitoring
- Hybrid
In this post we are looking at...
Internet of Things
The IoT requires a platform that can provide bi-directional devices communication, securely handle huge volumes data, and provide meaningful insights in realtime.
AWS
AWS IoT is a fully managed platform for building complete IoT solutions on AWS. Devices communicate with applications running in the cloud over HTTP, MQTT and WebSockets which is secured using TLS. Device specific SDKs are available for Embedded C, JavaScript, Python, iOS, Android and Arduino Yún. AWS IoT supports cloud-to-device and device-to-cloud reliable messaging scenarios, even when the device is not connected. Pricing is relatively straight forward with a fee per 1 million messages sent or received (a free low throughput tier is also available). Messages are processed in 512 byte blocks with each block representing a single message up to a maximum 128 KB.
AWS IoT comes with a declarative rules engine that is used to transform and route IoT traffic to a specific location or endpoint such as an S3 bucket or Lambda function. It is also possible to direct data to Kinesis Streams which can run realtime analytics via applications written using the Kenisis Client Library. AWS has also recently announced Kinesis Analytics which can be used to perform stream analytics using an SQL-like language.
Each device that connects with AWS as a represented as a Device Shadow. A device shadow maintains an identity and last known state of a specific device and provides a channel to send and receive messages. When a message is posted to a device AWS will ensure the message is delivered, if the device is offline it will be delivered once the device reconnects.
Azure
IoT Hub is Azure's managed IoT solution for bi-directional device to cloud communications. IoT Hub supports AMQP, MQTT, and HTTP. If the device does not support one of these protocols then it's possible to adapt both incoming and outgoing traffic using Azure IoT Protocol Gateway. A set of device SDKs for .NET, JavaScript, Java, C and Python are available. IoT Hub provides a device registry that maintains a list of devices and provides access to a device specific queue to reliably communicate with a specific device. Data received can be sent to Blob Storage for archive or offline processing, or sent to an Event Hub endpoint for immediate processing. There is also good support for IoT monitoring and diagnostics. IoT Hub comes in 4 tiers, ranging from a free tier up to the high throughput S3 tier which can support up to 300,000,000 messages per day. Additional units can be added to each tier for more throughput if required. Messages are sent in 4 KB blocks, each block is counted as a message for billing purposes up to a maximum 512 KB. There are some throttling rules to consider when determining the best tier for your needs since.
Event Hubs is another option for device-to-cloud scenarios and may be a better solution for basic large scale device telemetry ingestion. Event Hubs can ingest large volumes of messages over AMQP and HTTP. Event Hubs performance is measured in throughput units (TU) where each TU allows 1 MB/S ingress up to 20 TUs, although this can be raised via a support ticket. Pricing is based on the number of ingress events (per million) plus a fee for each throughput unit per hour.
Event Hubs is often used with Azure Stream Analytics for real-time analysis of device data. It uses a SQL-like language to perform queries over an incoming data stream and can enrich data by integrating other Azure services such as Azure Machine Learning and Azure functions. Stream Analytics can output to most Azure data storage solutions or directly to Power BI for visualisations, Event Hubs, or even to another Stream Analytics stream.
It is also possible to stream data to Apache Storm a popular open source streaming analytics platform. Azure is the only provider of the three to offer Apache Storm as a fully managed service.
Microsoft is clearly being careful to ensure that Azure IoT can be used with any type of device. With the announcement of Windows 10 IoT core, a slimmed down version of Windows 10 designed specifically to run on IoT devices Microsoft are also positioning themselves as a whole solution IoT provider.
Google Cloud Platform
Google Cloud Platform supports device-to-cloud IoT scenarios through Cloud Pub/Sub. Cloud Pub/Sub supports large scale message ingestion over HTTP (REST) or gRPC, a compact messaging format that uses Protocol Buffers. Client libraries exist for Go, Java (Android), .NET, JavaScript, Objective-C (iOS), PHP, Python and Ruby. Pricing is tiered based on the number of operations plus storage costs (these are typically minimal assuming no failed deliveries) plus network costs if consumer is located in a different region. Bear in mind that processing a typical message will involve 3 operations, 1 publish, 1 pull and 1 acknowledgement. Messages are split into 64 kB units that are each considered a message for billing purposes.
As messages arrive, Dataflow can be used to process the incoming stream such as moving data to storage and performing realtime stream analysis. Data may also be streamed to Big Query, Google's data warehousing solution via the Big Query Streaming API. It is also easy to execute custom logic over individual messages as they arrive via Google Cloud Functions.
Firebase is Google's self contained mobile and IoT development platform. Firebase supports device-to-cloud and cloud-to-device messaging over HTTP and XMPP and comes with SDKs for iOS, C++, JavaScript and of course Android. It comes with its own cloud hosted NoSQL database that will automatically synchronise device state including photos, videos and images. There are also rich built-in operational logging and monitoring support.
Firebase was acquired by Google in 2014 and is offered as a standalone product but it also integrates nicely with Google cloud services and combined billing is available. The service is available in a free tier, a predictable monthly priced option, or a pay-as-you-go option (price varies according to the storage and services used).
Like Microsoft, Google have their own Android based IoT operating system known as Brillo. Brillo comes with built-in support for Weave, a new communication platform designed specifically to allow IoT devices and controllers to interact. Since most IoT devices are controlled by a phone, tablet or similar device, Weave provides a standard approach that enables discovery and interoperability across phone, IoT devices and cloud. Google are hoping that Weave becomes the standard for all IoT communications that ultimately results in smarter IoT solutions.
Conclusion
It's interesting to see how each provider is tackling the IoT problem space. All three can ingest and process device telemetry at scale and consume cloud services where additional processing is required. They also provide device management, monitoring and reliable two way messaging. AWS and Azure have a more coherent message with their products clearly integrated into their respective platforms, whereas Google Firebase feels like a distinctly separate product. Working out the best platform for price is never straight forward and you should be wary of comparing headline figures alone since the definition of a message for billing purposes varies between platforms. Also be sure to factor in the restrictions and limitations that come with each platform.
Next up we will be looking at Mobile Services.