The push notifications cloud service

Registered by Lucio Torre on 2013-11-21

Push notifications is a service to centralize cloud-to-device communications so we can control network and battery usage. This Blueprint is about the server component for that service.

Blueprint information

Status:
Not started
Approver:
None
Priority:
Undefined
Drafter:
None
Direction:
Needs approval
Assignee:
Lucio Torre
Definition:
New
Series goal:
None
Implementation:
Unknown
Milestone target:
None

Related branches

Sprints

Whiteboard

Introduction
Push notifications is a service to centralize cloud-to-device communications so we can control network and battery usage. This Blueprint is about the server component for that service.

Minimum Viable Product
The Development Minimum Viable Product (DevMVP) is the first goal of this project. The DevMVP is a single process minimal service that will implement the protocol in the most minimal way to allow development against it and we can use its test suite to validate the production service.

Testabilty
The project will be tested by continuous integration for development and a series of alarms and instrumentation for production and staging environments.

Development
This service is going to be developed in Go. Although great for this scenario, it also means we need to implement many of the tools and libraries we use for system management and we already have for other languages (e.g. SSO integration, metrics).

Scaling
MVP supports no scaling. With time we replace components with stand alone services that scale elastically (up to limits, see docs). Elastic scaling means servers can be added/removed without manual re balancing. The end product is a fully juju-managed deployment.

Specifications and discussions
Push description:
https://blueprints.launchpad.net/ubuntu/+spec/appdev-1311-push-notifications

Use cases:
https://docs.google.com/a/canonical.com/document/d/12_a-V9B_ethmVJPF8vtcY7Hs7kc-VP-OcIwRx5ZPmjI/edit#

Push server side discussion:
https://docs.google.com/a/canonical.com/document/d/1KeIzgTJbpHnU_Y2WIIyfiiKjXvGOr0WHHzssa8JRv-k/edit#heading=h.15r6mse6sca0

Push Api discussion: https://docs.google.com/a/canonical.com/document/d/13CnrwG9NquYdLk9NbMZj3chZEVYMSaTPMp264lv0jus/edit#heading=h.9olexzfy4c76

(?)

Work Items

Work items for ubuntu-13.12:
Evaluate and define database: DONE
Evaluate and define registry service: DONE
Test Plan Definition: DONE

Work items for ubuntu-14.01:
Define client daemon / PN server protocol (internal): DONE
Dev MVP Server: DONE
Production Rollout (usable, not persistent, not scalable): DONE
Investigate/Setup logging in Go: DONE
Investigate/research Exception handling in Go: DONE
Integrate with oopses (oopses is an internal crash data service): DONE
port txstatsd (metrics client) to Go or find alternative: DONE
Integrate with metrics (graphite/ server side service): DONE

Work items for ubuntu-14.02:
Split MVP Server into standalone web and protocol services: DONE
Deploy Database: DONE
Add Message persistence: DONE
SSO Lib for go: DONE
Integrate with SSO: INPROGRESS

Work items for ubuntu-14.03:
Multi server deploys: DONE
Deploy registry: TODO
Integrate device registry: TODO

Work items for ubuntu-14.04:
Load Testing: TODO

This blueprint contains Public information 
Everyone can see this information.