Reputation: 21
Decided to ask this after reading this answer to the same question: Is there a successor for Sync Framework 2.1? That was from more than 5 years ago.
TL;DR: It's been five years since that question was asked so I thought it was worth asking again. There's also the possibility another solution that's not a database synchronizer may exist; we need to be able to find differences from different peers in a peer-to-peer system in a resilient manner, in real time.
Unfortunately, we are only now trying to get rid of MSSFX from our software and the answer to the linked question doesn't give me much hope because...
But while analyzing our use of MSSFX I came to realize that we weren't really using it as a database replicator, not like other people were. We were using it more like a message service. The database we were synchronizing was not the business data, it was our own metadata pointing to that business data.
Peer A would make a change to its business data. Peer A would update the meta data for that business data and notify any other peer currently online that something changed; it didn't specify what objects changed. Other peers receiving this notification would use SyncFx to find differences between their meta data and Peer A's meta data. When differences were found, the associated business data would be requested from Peer A and stored into the business database.
I realized that a persisted messaging system almost works for us, and that's almost what this was. The major difference was that it wasn't persisting every message, it was just persisting the most recent message per business object. So a peer that was not online when Peer A made its change would sync with Peer A and immediately find that difference and ask for the business object.
The other critical difference was the peer-to-peer nature. I've looked at messaging solutions, but the problem is that if Peer A sends a message and recognizes that Peer C did not receive the message, that knowledge was only on Peer A. So if Peer A shuts down before Peer C returned, Peer C would not know it missed anything. But by using SyncFx, when Peer C returned it would sync with Peer B and recognize that it needs an update to the business object Peer A changed. And later when Peer A returned, SyncFx would not find a difference, so the "message" wouldn't need to be sent again.
So, in addition to asking again, five years later, if there's a replacement to SyncFx, I'm also asking if there may be another solution that better fits our need because it looks to me like we were misusing SyncFx. In the end, we were only using it to identify differences. Saving those differences we could've done on our own.
Sidenote: We are already looking at https://github.com/Mimetis/Dotmim.Sync which we found in a post with the same question on the Microsoft forums. Right now it looks like the strongest contender but I'm concerned that it appears to be a single guy and it's just as complex as SyncFx. Another reason we're moving away from SyncFx is because there were certain behaviors we didn't understand that caused us a lot of trouble, behaviors we didn't want or need. Using another solution that's trying to cover all possible bases makes me feel like we'll be heading in that direction again.
Second sidenote: We are also considering coming up with our own solution, but we're being pressured to find a 3rd party solution. That's another reason why I'm not sure if Dotmim.Sync would be acceptable; I think they're looking for something with the backing of a company that'll provide assistance.
Thanks.
So far we've considered RabbitMQ for messaging, but it's missing the case where the sender of the message goes down before the peer that missed the message returns.
CouchBase seemed like a possibility except that it didn't look like it was meant to be part of another product to be sold; we likely wouldn't want to buy seats for every peer and every customer.
Dotmim.Sync has been interesting to look at and seems like it would be the easiest to insert into the hole left by SyncFx, but I worry there may not be much support and we may encounter the same issues we had with SyncFx.
Upvotes: 2
Views: 149