[ check back soon for updates! We're just getting started here. ]
Who
Idan Avraham (idana) Nick Carter (nick)
Munjal Doshi (munjal) B. Green (brg)
Jonathan Huang (chron) Tim Steele (tim)
Zach Kuznia (zork)
Anthony Laforge (laforge) Nick Baum (nickbaum)
Tejas Shah (tejasshah) Chee Chew (chee) with special thanks to: Andrew de los Reyes (adlr) Ryan Cairns (rtc) Peter Bradshaw (bradshaw) Chris Masone (cmasone) Jeffrey Rennie (rennie) Kan Liu (kanliu) Eric Uhrhane (ericu) What
The goals for this protocol include:
Where
The code lives in the Chromium repository, and is rooted at chrome/browser/sync.
chrome/browser/sync/
Top level directory containing the entry point used by other chrome code, such as profile.h.
For example, profile_sync_service.h/cc
The rest of this stuff will live in 'browser_sync' namespace.
...sync/glue
Stuff needed to embed the engine into Chrome.
For example,
...sync/engine
This will be the ultimate home of the full source for our sync engine. Currently, this code uses proprietary libraries which should be replaced with (or open sourced themselves) open source libs. We'll be adding things here shortly, but for now this only contains the sync engine entry point, syncapi.h.
...sync/syncable
The domain of all things syncable on the client. The definitions of what a bookmark or a folder look like in sync-land, as well as the code responsible for maintaining the local cache of the cloud state, are found in here. The code to persist the local cache using sqlite is also found here.
...sync/protocol
Contains our protobuf specification of the messages sent between clients (the browser) and sync servers.
When
Our roadmap for the forseeable future is below. The list is in prioritized chronological order with work estimates in total weeks from Aug 3.
How
[TODO(tim): Add useful information here.]
To make this sync infrastructure scale to millions of users, we decided to leverage existing XMPP-based Google Talk servers to give us "push" semantics, rather than only depending on periodically polling for updates. This means when a change occurs on one Google Chrome client, a part of the infrastructure effectively sends a tiny XMPP message, like a chat message, to other actively connected clients telling them to sync. To put that gain into perspective, consider a 3 minute polling interval. 3 minutes is far from real time, or "immediately" as our goal was stated. But already, at the very least, every 3 minutes every client needs to ask the server if anything changed. Even with just one thousand users, we're already talking about a server having to handle a poll request every 0.18 seconds on average (or roughly 5.6 queries per second). And that's just when nothing is happening! Using XMPP pushes, the sync servers don't need to waste cycles for no reason.
|