We have two products let call them X and Y. Product-X is established and has numerous clients over continents whereas Product-Y's development was started a few years ago and it has yet to enjoy any client.
We came across a scenario where we have to sync data and actions between both systems. This can be done at any stage e.g. clients may use systems on their own and on a later date would like to sync them.
Now we will always host Product-X on our server farms. However clients may or may not do that for Product-Y and host it locally on there own server farms. I am very new to designing systems so I am calling these systems distributed systems which may not be the right term.
Both products are different and they will always have their own database and structure regardless of whether they are in same environment or in client's server farm.
Example
- Synching data based on events, e.g. if someone creates something in Product-X then it needs to be created in Product-Y too but following different logical steps and same for when something is created or updated in Product-Y.
Possible Solution
Any operation happening in any system will push the data to the other system using generic services and the other system will decide what to do with it.
Create a cache of data on both ends e.g. in SQL Tables. This means both system will never ask each other for data or if they need something they will only send a flag and get a callback with data.
Both systems will have endpoints (WCF services) to connect to each other.
Question
- Is it okay to keep a cache of data if not then what would be the right design for this scenario?