Performance Analysis of Mobile Push Notification Networks

• Thomas Sydorowski Tweet

The LoginTC platform uses mobile push notification networks to deliver out-of-band authentication and authorization requests to smartphones and tablets. The LoginTC app is available for iOS, Android, BlackBerry, and leverages the respective push notification networks: Apple Push Notification Service, Google Cloud Messaging, and BlackBerry Push Service.

The push networks are so vital to us that we have a dedicated set of test devices sitting on a shelf in our office used for the sole purpose of monitoring the status and performance of the mobile push networks. The end result is the LoginTC Status page that informs our clients, partners, and users of any possible degraded performance due to the push networks. The status page, built using Stashboard, continuously pings the test devices via the push networks and monitors the response latency. If a device fails to respond in a reasonable enough time or fails to respond completely the event triggers an alert for our engineers to investigate and is reported on the LoginTC Status page:

The dedicated push network monitoring devices

Mobile Push Notification Performance

The time it takes the push networks to deliver push notifications to devices needs to be very low so LoginTC users can quickly authorize requests and log in without delays. The following data was collected by periodically sending push notifications to our test devices:

Platform Mean Latency (s) Standard Error iOS 1.07 0.043 Android 2.31 0.099 BlackBerry 16.57 0.710

It’s also important for us to know how the push networks throttle notifications. We tested the throttling mechanisms of the mobile push notification networks by continuously sending push notifications at various intervals from 10 to 180 seconds. We did not encounter any throttling on the iOS and BlackBerry platforms, even when pushing notifications to the same devices every 10 seconds over a three hour period.

Android Throttling

The Android platform did throttle our notifications when we pushed to the same device more than once every 180 seconds. According to the Android GCM docs, push notifications to the same device are throttled using the token bucket scheme. We did see this, and our data shows that the bucket holds 20 tokens and is replenished at a rate of once every 180 seconds. Furthermore, the bucket appears to be completely replenished (randomly) every 0 to 90 minutes. When the bucket is out of tokens, push notifications are dropped instead of queued.