Hi Emmanuel

> Now, how do we manage replication between server A and server B 
> (whatever the number of real servers present in A and B) ? Simple : as 
> each operation within A or B are done on a globally connected system, 
> with each operation having its unique timestamp (ie, two operations have 
> two different timestamps), all the modifications done globally are 
> ordered. It's just then a matter of re-ordering two lists of ordered 
> operations on A and B, and to apply them from the oldest operation to 
> the newest one. Let's see an example :

This approach is good as it is easy to explain / understand but I have two 
(related) problems with it:

1. Availability.  When replication (specifically the roll back, re-apply bit) 
is taking place you must prevent new local modifications being applied to 
ensure consistency.  This means new modification attempts must either be 
rejected or frozen until the replication is completed.

2. Efficiency.  Rolling back changes before re-applying might be slower than 
just applying with a check.  An example of this being especially bad is with 
two servers (A and B) which become disconnected.  Server A has just one 
modification applied early on.  Server B is heavily used and has hundreds of 
thousands of modifications (e.g. a bulk change to all users).  Now when server 
A and B reconnect server B will have to roll back all those changes just to 
apply a potentially completely unrelated minor change from server A.

Note that both of these become much bigger issues if we want to support 
periodic (as opposed to immediate) replication or incremental backup.

It also becomes a bigger problem the more replicas you add - changes may have 
to be rolled back and re-applied multiple times.

Using the current system (along with a fix for DIRSERVER-894) the example above 
would require very little overhead for server B - the minor change from server 
A would be sent over and then either applied or discarded based on the CSN's at 
the time of the modification.  The existing modifications don't need to be 
rolled back / re-applied.

Martin


Reply via email to