CloudServices/Roadmaps/SimplePush-Server: Difference between revisions
(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. ...") |
m (Telliott moved page Services/Roadmaps/SimplePush-Server to CloudServices/Roadmaps/SimplePush-Server) |
||
(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'' - | * ''Group Email'' - https://mail.mozilla.org/listinfo/dev-simplepush | ||
==Goals== | ==Goals== | ||
SimplePush is based off of | 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. | |||
==Use Cases== | ==Use Cases== | ||
< | See use cases specified under: | ||
== | https://wiki.mozilla.org/WebAPI/SimplePush#Use_Cases | ||
<!-- 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 - | Engineer - JR Conlin <i>jrconlin@mozilla</i> | ||
==API Reference/Documentation== | ==API Reference/Documentation== | ||
See | See [https://wiki.mozilla.org/WebAPI/SimplePush#Server_API|Server API] documentation | ||
<!-- | <!-- | ||
=== Data Schema === | === Data Schema === | ||
Line 37: | Line 53: | ||
==Platform Requirements== | ==Platform Requirements== | ||
The system has been designed and tested for Linux using both Ubuntu Precise and AWS flavors. | |||
==Libraries Required== | ==Libraries Required== | ||
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== | ||
https://github.com/jrconlin/pushgo | |||
==Release Schedule== | ==Release Schedule== | ||
The Code Release schedule has not yet been finalized and is thus "ad hoc" | |||
=QA= | =QA= | ||
==Points of Contact== | ==Points of Contact== | ||
Engineer - <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= | ||
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== | ==Points of Contact== | ||
JR Conlin <jrconlin@mozilla.com> | |||
==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@ | |||
==Deployment Architecture== | ==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== | ==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
- Principal Point of Contact - Doug Turner dougt@mozilla
- IRC - #push
- Group Email - https://mail.mozilla.org/listinfo/dev-simplepush
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