We use API calls to sync data and this is working fine when all the Regions are up. When an API call to sync data fails (Region is down or for any reason), it can be stored in a table or a log file. Cloud operator can then apply these changes offline.
> -----Original Message----- > From: Chiradeep Vittal [mailto:chiradeep.vit...@citrix.com] > Sent: Friday, 25 January 2013 7:20 AM > To: CloudStack DeveloperList > Subject: Re: Questions related to Regions Feature > > Do we need to solve the problem? > Can we assume the presence of a service that keeps the account data in sync? > > For example, a cloud operator might find it acceptable that once a user is > provisioned in one region, she gets access to another region after 24 hours. > In this case one can envisage a batch upload of account changes every night. > > > On 1/24/13 7:42 AM, "Kishan Kavala" <kishan.kav...@citrix.com> wrote: > > >Separate account service will solve the data sync problem. But that > >would be a very big change and can be probably considered for a later > release. > > > >Accounts/Users/Domains(Resources) need to be in sync across Regions. > >Each resource has a source region (The region in which the resource is > >created). > >All modify/delete API calls will be propagated to source region of the > >resource. > > > >It is the responsibility of the source region to ensure a change is > >propagated to all regions. > >All this works well when all the regions are up. I'm looking at options > >to ensure data is propagated reliably when a regions comes back up > >after going down. > > > >Take account creation for example: > > > >1. Rollback on failure: Create account in source region. Source region > >makes create account API calls to all regions. If create fails is any > >region, abort the operation and roll back account creation in regions > >where it is created successfully. Account creation will fail even if > >one region is down. Rollback of account creation is also not straight > >forward. > > > >2. Retry using region_sync table: Create account in source region. > >Source region makes create API calls to all regions. If create fails is > >any region, source region makes an entry in region_sync table with > >following info (resoucre_id, api_call, failed_region_id). Periodically > >retry the API call for failed regions and clear the entry once its > >successful. > > > >3. Use 3rd party NOSQL db: Create account in source region. Create an > >entry is region_sync table (resoucre_id, api_call, source_region_id). > >Additionally use a eventually consistent distributed nosql db (like > >Apache Cassandra) in each region. Insert entries in region_sync table > >to NOSQL db and this data will be available in all the regions. Each > >region will run unprocessed APIs locally and mark them as processed. > >This approach will offload the data sync problem to a proven solution > >like Cassandra. > > > >Please let me know your thoughts on the above mentioned approaches. > > > >________________________________________ > >From: Anthony Xu [xuefei...@citrix.com] > >Sent: Saturday, January 19, 2013 5:30 AM > >To: CloudStack DeveloperList > >Subject: RE: Questions related to Regions Feature > > > >It is not easy to sync/maintain the account information in several > >regions. > >Is it possible to have a separate account service, cloudstack > >management servers in multiple region can consult ? > > > >Anthony > > > >> -----Original Message----- > >> From: Chiradeep Vittal [mailto:chiradeep.vit...@citrix.com] > >> Sent: Friday, January 18, 2013 3:41 PM > >> To: CloudStack DeveloperList > >> Subject: Re: Questions related to Regions Feature > >> > >> I think that replication of data to each region (even if it is only > >> for account data) is fraught with complexity and should be left to an > >> external service. > >> Can we simplify by assuming that accounts are synced "somehow"? > >>