CloudServices/Roadmaps/SimplePush-Server: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
(Created page with "<h1><i>SimplePush - Server</i></h1> ==Overview== A server for the SimplePush Notification alert system. See https://wiki.mozilla.org/WebAPI/SimplePush for a brief introduction. ...")
 
 
(36 intermediate revisions by 4 users not shown)
Line 2: Line 2:
==Overview==
==Overview==
A server for the SimplePush Notification alert system. See https://wiki.mozilla.org/WebAPI/SimplePush for a brief introduction.
A server for the SimplePush Notification alert system. See https://wiki.mozilla.org/WebAPI/SimplePush for a brief introduction.
The slightly more friendly [https://docs.google.com/presentation/d/1diBRvayCwPhs6KVjIIdClmpXZO_-lAgDAX9v6OKHFjM/edit#slide=id.p slide deck] is also available.


==Project Contacts==
==Project Contacts==
''Principal Point of Contact'' - Doug Turner <i>dougt@mozilla</i>
* ''Principal Point of Contact'' - Doug Turner <i>dougt@mozilla</i>
''IRC'' - #push
* ''IRC'' - #push
''Group Email'' - TBD
* ''Group Email'' - https://mail.mozilla.org/listinfo/dev-simplepush


==Goals==
==Goals==
SimplePush is based off of the [[http://research.google.com/pubs/pub37474.html|Thialfi]]. This system manages version numbers for assigned channels. In short: A client checks to see if it's version matches what's on the push server. If so, do nothing, if not, go fetch from the app server.
It's quite easy for remote devices to connect back to a server, but it's difficult for the server to connect back to the remote devices. This is even more true with mobile devices. Maintaining a lot of individual port connections (even if they're just polling) can lead to very short battery lives.
 
Simplepush attempts to address this by having a single port connection maintained back to a central server. Applications register a callback with SimplePush, which returns a URL that can be passed to the remote server. As interesting things happen, the remote server can check to see if there's a live connection to the App, and if not, can use the URL to wake the remote app.
 
SimplePush is based off of [http://research.google.com/pubs/pub37474.html Thialfi]. This system manages version numbers for assigned channels. In short: A client checks to see if it's version matches what's on the push server. If so, do nothing, if not, go fetch from the app server.
 
This system provides a low cost, scalable, system to manage these version lookups.


This system provides a low cost, scalable, system to manage these version lookups.
==Use Cases==
==Use Cases==
<i>How will this be used?</i>
See use cases specified under:
==Requirements==
https://wiki.mozilla.org/WebAPI/SimplePush#Use_Cases
* <i>List of requirements</i>
 
 
<!-- http://www.michaelpiatek.com/papers/thialfi-sosp11.pdf -->
 
==Tracking Bug==
https://bugzilla.mozilla.org/show_bug.cgi?id=878178
 
==Get Involved==
==Get Involved==
<i>Call to action for folks who want to help.</i>
<i>Call to action for folks who want to help.</i>
Please drop on to irc.mozilla.org #push, or email:dougt@mozilla.com
=Design=
=Design=
==Points of Contact==
==Points of Contact==
Engineer - Michael Trinkala <i>trink@mozilla</i>, JR Conlin <i>jrconlin@mozilla</i>
Engineer - JR Conlin <i>jrconlin@mozilla</i>


==API Reference/Documentation==
==API Reference/Documentation==
See [[https://wiki.mozilla.org/WebAPI/SimplePush#Server_API|Server API] documentation
See [https://wiki.mozilla.org/WebAPI/SimplePush#Server_API|Server API] documentation
<!--
<!--
=== Data Schema ===
=== Data Schema ===
Line 37: Line 53:


==Platform Requirements==
==Platform Requirements==
There are two current servers. The prototype server is currently written in C++. A second server is being built in Python 2.7. The following discussion will focus on the Python version.  
The system has been designed and tested for Linux using both Ubuntu Precise and AWS flavors.


==Libraries Required==
==Libraries Required==
<i> List of external project dependencies. (Stuff that's not pulled in via the installation script)</i>
 
The [https://github.com/mozilla-services/pushgo pushgo] system currently is based on Go. It is strongly recommended at this time to use the latest Go Tip source, or at the very least Go 1.1.
 
The [https://github.com/mozilla-services/simplepush_test simplepush_test] module testing unit uses python 2.7 and requires VirtualEnv to be properly installed. This module is designed to be a platform agnostic method to test the simplepush server for operations and compliance.
 
All other dependencies are brought in by the respective installers.


==Code Repository==
==Code Repository==
<i>Links to the published code bases</i>
https://github.com/jrconlin/pushgo
 
==Release Schedule==
==Release Schedule==
<i>Predicted code delivery dates</i>
The Code Release schedule has not yet been finalized and is thus "ad hoc"
 
=QA=
=QA=
==Points of Contact==
==Points of Contact==
Engineer - <i>Name</i> <i>contact@info</i>
Services QA
Engineer - <i>Edwin Wong</i> <i>edwong@mozilla.com</i>
 
==Test Framework==
==Test Framework==
A simple module test framework is provided in the ./mod_test directory. This tests the active server by
* connecting as a websocket,
* issuing a "hello" as UAID "test",
* registering a "test1" ChannelID,
* Sending a PUT request to the returned endpoint URL
* Monitoring the websocket for an update for the "test1" ChannelID
* Unregistering the "test1" ChannelID
* Tearing down the websocket connection
A module test approach was preferred since unit tests would require too much mock work to provide meaningful tests.
This framework should be extended to include negative tests.
=Security and Privacy=
=Security and Privacy=
Fill out the security & privacy bug template: https://bugzilla.mozilla.org/form.moz-project-review
Refer to https://wiki.mozilla.org/Services/Roadmaps/SimplePush-Server/SecurityReview
(https://wiki.mozilla.org/Websites/Kick-Off_Form)
 
Refer to https://wiki.mozilla.org/Services/Roadmaps/SimplePush-Server/SecCodeReview
 
==Points of Contact==
==Points of Contact==
==Questionnaire Answers==
JR Conlin <jrconlin@mozilla.com>
===1.1 Goal of Feature ===
 
===2. Potential Threat Vectors and Mitigation Points===
==Review Status==
==Review Status==
''Bugzilla Tracking #'' -
''Bugzilla Tracking #'' -
https://bugzilla.mozilla.org/show_bug.cgi?id=831816
see https://wiki.mozilla.org/Security/Reviews
see https://wiki.mozilla.org/Security/Reviews
==Issues and Resolutions==
==Issues and Resolutions==


=Operations=
=Operations=
Tracking: https://bugzilla.mozilla.org/show_bug.cgi?id=853214
==Points of Contact==
bwong@
oremj@


==Points of Contact==
==Deployment Architecture==
==Deployment Architecture==
''Bugzilla Tracking # '' -
https://bugzilla.mozilla.org/show_bug.cgi?id=853214
 
Current deployment consists of a bank of servers for socket connections, with an ELB fronted set of machines to handle PUT updates. This was created because the current version of Go requires a surprisingly high amount of CPU in order to process TLS requests. Offloading the TLS termination to ELB with a bank of proxy points provided the highest level of service.
 
==Escalation Paths==
==Escalation Paths==
==Lifespan Support Plans==
==Lifespan Support Plans==
=Logging and Metrics=
=Logging and Metrics=
Currently logging and metrics will be performed via Heka integration.
The Heka endpoint machine has not yet been identified, although an interim machine has been created for internal use.
==Points of Contact==
==Points of Contact==
TBD: (currently jrconlin@)
==Tracking Element Definitions==
==Tracking Element Definitions==
Since user data is meaningless, most tracking will be operational (length of Websocket connection,  number of connections, update rates, etc.)
==Data Retention Plans==
==Data Retention Plans==
Logging information will be sent to Heka for aggregation reports. There are no plans for retention of any individual or user identifying logging information.
==Dashboard URL==
==Dashboard URL==
TBD
=Customer Support=
=Customer Support=
==Points of Contact==
==Points of Contact==
==Sumo Tags==
==Sumo Tags==
==Review Meeting==
==Review Meeting==

Latest revision as of 19:54, 19 November 2013

SimplePush - Server

Overview

A server for the SimplePush Notification alert system. See https://wiki.mozilla.org/WebAPI/SimplePush for a brief introduction.

The slightly more friendly slide deck is also available.

Project Contacts

Goals

It's quite easy for remote devices to connect back to a server, but it's difficult for the server to connect back to the remote devices. This is even more true with mobile devices. Maintaining a lot of individual port connections (even if they're just polling) can lead to very short battery lives.

Simplepush attempts to address this by having a single port connection maintained back to a central server. Applications register a callback with SimplePush, which returns a URL that can be passed to the remote server. As interesting things happen, the remote server can check to see if there's a live connection to the App, and if not, can use the URL to wake the remote app.

SimplePush is based off of Thialfi. This system manages version numbers for assigned channels. In short: A client checks to see if it's version matches what's on the push server. If so, do nothing, if not, go fetch from the app server.

This system provides a low cost, scalable, system to manage these version lookups.

Use Cases

See use cases specified under: https://wiki.mozilla.org/WebAPI/SimplePush#Use_Cases


Tracking Bug

https://bugzilla.mozilla.org/show_bug.cgi?id=878178

Get Involved

Call to action for folks who want to help.

Please drop on to irc.mozilla.org #push, or email:dougt@mozilla.com

Design

Points of Contact

Engineer - JR Conlin jrconlin@mozilla

API Reference/Documentation

See API documentation

Platform Requirements

The system has been designed and tested for Linux using both Ubuntu Precise and AWS flavors.

Libraries Required

The pushgo system currently is based on Go. It is strongly recommended at this time to use the latest Go Tip source, or at the very least Go 1.1.

The simplepush_test module testing unit uses python 2.7 and requires VirtualEnv to be properly installed. This module is designed to be a platform agnostic method to test the simplepush server for operations and compliance.

All other dependencies are brought in by the respective installers.

Code Repository

https://github.com/jrconlin/pushgo

Release Schedule

The Code Release schedule has not yet been finalized and is thus "ad hoc"

QA

Points of Contact

Services QA Engineer - Edwin Wong edwong@mozilla.com

Test Framework

A simple module test framework is provided in the ./mod_test directory. This tests the active server by

  • connecting as a websocket,
  • issuing a "hello" as UAID "test",
  • registering a "test1" ChannelID,
  • Sending a PUT request to the returned endpoint URL
  • Monitoring the websocket for an update for the "test1" ChannelID
  • Unregistering the "test1" ChannelID
  • Tearing down the websocket connection

A module test approach was preferred since unit tests would require too much mock work to provide meaningful tests.

This framework should be extended to include negative tests.

Security and Privacy

Refer to https://wiki.mozilla.org/Services/Roadmaps/SimplePush-Server/SecurityReview

Refer to https://wiki.mozilla.org/Services/Roadmaps/SimplePush-Server/SecCodeReview

Points of Contact

JR Conlin <jrconlin@mozilla.com>

Review Status

Bugzilla Tracking # - https://bugzilla.mozilla.org/show_bug.cgi?id=831816

see https://wiki.mozilla.org/Security/Reviews

Issues and Resolutions

Operations

Tracking: https://bugzilla.mozilla.org/show_bug.cgi?id=853214

Points of Contact

bwong@ oremj@

Deployment Architecture

https://bugzilla.mozilla.org/show_bug.cgi?id=853214

Current deployment consists of a bank of servers for socket connections, with an ELB fronted set of machines to handle PUT updates. This was created because the current version of Go requires a surprisingly high amount of CPU in order to process TLS requests. Offloading the TLS termination to ELB with a bank of proxy points provided the highest level of service.

Escalation Paths

Lifespan Support Plans

Logging and Metrics

Currently logging and metrics will be performed via Heka integration.

The Heka endpoint machine has not yet been identified, although an interim machine has been created for internal use.

Points of Contact

TBD: (currently jrconlin@)

Tracking Element Definitions

Since user data is meaningless, most tracking will be operational (length of Websocket connection, number of connections, update rates, etc.)

Data Retention Plans

Logging information will be sent to Heka for aggregation reports. There are no plans for retention of any individual or user identifying logging information.

Dashboard URL

TBD

Customer Support

Points of Contact

Sumo Tags

Review Meeting