Taboo is missing a large feature: syncing. We have wanted to implement it since we started coding it. Lately I've thought a lot about the requirements for implementation.
I think the most important requirement is service reliability shouldn't affect non-syncing user interactions with the client. If the syncing service is unavailable, the user's experience should still be pleasant (although the user should probably be informed when they have changes that haven't been pushed to the service yet).
Another requirement is the cost of running the service should be low (with back of envelope costs I get a thousand active users per dollar per month). Addons.mozilla.org reports that we are about to break 20k Active Daily Users (note this doesn't mean they are active users of Taboo), and so I need to support the fraction of users that would use this feature without much cost. I need to make sure whatever algorithm we end up using isn't too expensive, but I have less worry here.
The burning question on my mind is what approach to syncing should I use? Smarts on the server or client? Does anyone know any papers which talk about approaches to syncing, including conflict resolution models (and their tradeoffs)?
I'd like to get an initial version of the syncing service done by the end of May, but it depends on finding a good solution that will scale and provide a good user experience.
Responses to "Taboo Syncing"
There is a reconciliation problem that arises if a tab has been modified in two taboo clients, but the clients haven't been able to communicate (eg, due to client or server loss of connectivity). In this case, the clients will have kept some backlog of changes. Client 1 will send his changes (such as, from page A to page Z), then client 2 will send his changes (from page A to page Y), but they no longer apply because there is no page A. By page I really mean session data, to allow for the same URL opened in a number of tabs. Tabs are anonymous and content-addressed by the hash of their session data.
Unlike the equivalent DVCS problem, this Change/Change problem can be automatically handled by Taboo in a safe way. Upon receiving the A->Y update that was published by client 2, and finding no page A (session data really) in its set of tabs, client 1 can simply open a new tab at that page. No data was lost, and opening a tab is a small cost.
There is also a Change/Delete problem, but it can be handled the same way, by preferring opening new tabs to the loss of a page.
Leave a response