Bridge on Google Cloud
Overview
Phase 1: Bridge Export to Google Cloud Instead of Synapse (18 story points, 2.6 dev weeks)
Phase 2: Bridge Running on Google Cloud Instead of AWS (38 story points, 7.6 dev weeks)
Phase 3: Bridge Stores Data in Google Cloud Instead of AWS (Stretch Goal) (69 story points, 13.8 dev weeks)
Estimates assume a velocity of 5 story points per dev week.
Phase 1: Bridge Export to Google Cloud Instead of Synapse
Subtasks:
Refactor SynapseHelper to be a generic Export Adapter with pluggable implementations for Synapse and Google Cloud (5 story points)
Define Google Cloud storage format (1 story points)
Define Google Cloud permissions model (1 story points)
Implement Google Cloud Export Adapter (5 story points)
Define and implement Bridge Study config to select between Synapse and Google Cloud (3 story points)
Implement selector in Exporter to select between Synapse and Google Cloud (3 story points)
Total: 18 story points (2.6 dev weeks)
Phase 2: Bridge Running on Google Cloud Instead of AWS
Total: 38 story points (7.6 dev weeks)
Phase 2A: Bridge Server on Google Cloud
Subtasks:
Launch Spring MVC Service on Google Cloud (8 story points)
Set up DNS and SSL (2 story points)
Set up secure credentials (1 story point)
Log aggregation (1 story point)
Dashboards, monitoring, and alarms (1 story point)
Grant access to AWS Elasticache and RDS from Google Cloud OR partition and create a Redis and SQL instance in Google Cloud (3 story points)
Total: 16 story points (3.2 dev weeks)
Phase 2B: Bridge Exporter on Google Cloud
Subtasks:
Launch Spring Boot Worker on Google Cloud (8 story points)
Set up secure credentials (1 story point)
Log aggregation (1 story point)
Dashboards, monitoring, and alarms (1 story point)
Total: 11 story points (2.2 dev weeks)
Phase 2C: Bridge Worker on Google Cloud
Subtasks:
Launch Spring Boot Worker on Google Cloud (8 story points)
Set up secure credentials (1 story point)
Log aggregation (1 story point)
Dashboards, monitoring, and alarms (1 story point)
Total: 11 story points (2.2 dev weeks)
Phase 3: Bridge Stores Data in Google Cloud Instead of AWS (Stretch Goal)
Relevant docs:
AWS Services that need to be replaced:
DynamoDB → BigTable? Firestore? (53 story points)
Lambda (Cron scheduler) → Cloud Scheduler (3 story points)
RDS (MySQL) → Cloud SQL (1 story point)
S3 → Cloud Storage (5 story points)
S3 Presigned URLs → Cloud Storage Signed URLs (3 story points)
S3 Public Webhosting → Cloud Storage? (1 story points)
SES (Simple Email Service) → NO EQUIVALENT
SNS Push Notifications → Firebase Cloud Message MAY REQUIRE CLIENT APP CHANGES
SNS SMS → NO EQUIVALENT
SQS → PubSub (3 story points)
Total: 69 story points (13.8 dev weeks)
DynamoDB Migration
Subtasks (53 story points)
Bridge Server (40 story points)
25 object/dao pairs (+ 2 survey element classes) (30 story points)
DynamoInitializer or equivalent (3 story points)
9 data type marshallers (5 story points)
3 backfill classes, to be ported or removed (2 story points)
Exporter accesses the following tables directly (5 story points)
ExportTime
HealthDataAttachment
HealthDataRecord
Study
SynapseMetaTables
SynapseTables
Worker accesses the following tables directly (5 story points)
FitBitTables
NotificationConfig
NotificationLog
Study
SynapseSurveyTables
SynapseTables
UploadSchema
WorkerLog
Master Scheduler (3 story points)
Config
Status
Note: Spring Migration required us to migrate ~56 classes, which took about 3 weeks (15 days), which suggests a velocity of ~3.75 classes per day. However, these were mostly trivial copy-pastes with minimal transformation. Re-writing all the DynamoDB classes would be signficantly more work. We'll base our estimates around 1.8 classes per day.