Sem delongas, vou falar o que eu fiz numa situação muito semelhante. Não encare como sugestão, apenas é algo que fiz e pode ser interessante como caso de estudo.
Meu cliente possui varias filiais onde cada uma tem uma copia do banco de dados. Aplicação desenvolvida em Delphi e banco de dados Firebird. Eu precisava sincronizar todos os bancos de todas as filiais para montar um estoque centralizado (virtualmente centralizado) pois eles precisam alem de vender nas lojas fisicas, agora vender em um site proprio e em marketplaces. Isso significa que eu tambem teria que dar baixa no estoque quando um produto fosse vendido online. Sendo assim eu precisaria de comunicacao entrando e saindo de todos os bancos o tempo todo.
Como eu resolvi?
Simples. Desenvolvi duas aplicacoes uma client (que eu instalo na maquina que está o banco de dados da loja) e outra aplicação que eu hospedo num servidor que vai centralizar e orquestrar toda essa bagunça.
Por questões de segurança eu jamais coloco um computador exposto na internet. No lugar, eu faço o app client se comunicar com o banco de dados e sincronizar com o app servidor. É app falando com app.
O client coleta os dados locais e envia para o server na nuvem. O server processa isso de todos os canais (client, site e marketlaces).
Depois de processado, o server deixa uma resposta em fila para entregar ao client na proxima vez que ele conectar ao server para enviar as ultimas atualizações locais. Nesse momento, o server aproveita a conexão do client e devolve para ele os novos valores de estoque.
O server nunca fica com os dados armazenados nele. A informação é usada apenas até que o sincronismo esteja finalizado. Assim que todos os registros foram devidamente teansferidos para todos os clients, a info do server é apagada. Isso garante a segurança dos dados e permite que o server seja um terminal volatil que pode ser apagado, reiniciado, desligado que a informacao do server é apenas o resultado da coleta do que os clients enviam para ele. Por isso, se o server morrer e eu precisar reinstalar na nuvem novamente, eu nao preciso nem me preocupar com backup, pois na hora que ele iniciar a primeira vez após a manutencão, ele vai aguardar os dados que os clients vão enviar pra ele e tudo volta ao normal.
Como disse, solução simples, segura e barata.