Visão geral e cenários
O Sync Framework permite a sincronização entre bancos de dados. Ele possui uma API intuitiva e flexível que permite criar aplicativos designados para cenários offline e de colaboração. A API permite que você use todos ou apenas alguns componentes fornecidos, dependendo da arquitetura e dos requisitos de um aplicativo. O Sync Framework oferece suporte a topologias cliente-servidor, cliente-cliente e mistas. Nas topologias cliente-servidor, todos os clientes são sincronizados com um servidor central. Nas topologias cliente-cliente, cada cliente pode ser sincronizado com outro cliente sem que as alterações precisem passar por um servidor central. As topologias mistas são uma combinação de topologias cliente-cliente e cliente-servidor.
Cenários de sincronização
A capacidade de oferecer suporte a trabalhadores móveis e remotos está se tornando cada vez mais importante para as organizações. As organizações devem garantir que os trabalhadores tenham acesso às mesmas informações que teriam se estivessem no escritório. Na maior parte dos casos, esses usuários terão um laptop, um desktop no escritório, um smartphone ou um PDA. Nesses dispositivos, às vezes, os usuários podem acessar dados usando uma conexão VPN ou algum outro método de conexão direta com a rede corporativa. Para a maioria dos usuários remotos, esta solução não é satisfatória devido às grandes desvantagens nas seguintes áreas:
Requisitos de rede
Para que os usuários possam acessar informações, o dispositivo remoto deve ter uma conexão constante com a rede corporativa durante o acesso aos dados. Para alguns trabalhadores, como os que trabalham de casa, isso talvez não seja um problema. Mas para outros usuários, como os vendedores que estão constantemente em movimento, isso poderia ser mais difícil. Por exemplo, se um vendedor estiver visitando um cliente e não puder acessar os dados do estoque porque não há conectividade de rede, seu trabalho será prejudicado.
Velocidade de acesso aos dados
Em um ambiente típico de cliente-servidor corporativo, os usuários têm redes de alta velocidade que permitem o acesso rápido a informações. Porém, os trabalhadores remotos frequentemente se conectam a redes lentas e não confiáveis. Usando uma solução comum, cada fragmento de dados que um usuário desejar acessar deverá ser baixado sempre que solicitado, pois não é possível manter os dados no dispositivo. Por exemplo, se um vendedor precisar baixar sua lista de produtos toda vez que abrir o aplicativo, o tempo de retardo para popular o aplicativo com as informações poderá ser desanimador.
Ponto de falha único
Com esse tipo de solução, normalmente os usuários contam com um único banco de dados de servidor. Se esse banco de dados não estiver disponível devido a um período de inatividade planejado ou a falhas do servidor, todos os trabalhadores remotos serão desconectados de seus dados.
Escalabilidade de servidor
À medida que mais pessoas trabalham remotamente, o desempenho dos servidores corporativos é afetado e maior é a necessidade de adição de hardware.
Aplicativos ocasionalmente conectados
Uma alternativa para a solução descrita na seção anterior é a implementação de um aplicativo ocasionalmente conectado. Um aplicativo ocasionalmente conectado ainda permite que um trabalhador remoto acesse dados, mas as informações desejadas são armazenadas localmente. Para popular um banco de dados local, um aplicativo ocasionalmente conectado usa, em geral, a sincronização de dados.
A sincronização de dados consiste na capacidade de obter periodicamente as informações armazenadas em um banco de dados (como o banco de dados de um cliente) e sincronizar as alterações com outro banco de dados (como o banco de dados de um servidor). Com uma solução baseada em sincronização, o usuário não precisa mais ter uma conexão de rede constante para acessar as informações. Como os dados são armazenados localmente, o usuário tem acesso constante aos dados enquanto o processamento é descarregado a partir do banco de dados central. Além disso, visto que a velocidade da rede não é mais um fator de restrição, o usuário agora pode acessar os dados na velocidade do computador local.
As sincronizações cliente-cliente evitam o único ponto de falha habilitando a sincronização que não depende da passagem de todas as alterações por um servidor. A capacidade de enviar por push grande parte do processamento do aplicativo para cada cliente também ajuda a solucionar o problema da escalabilidade do servidor.
O Sync Framework usa provedores de sincronização para se comunicar com cada banco de dados que é sincronizado. Os provedores de banco de dados do Sync Framework, que são parecidos com os provedores de dados do ADO.NET, protegem outros componentes do Sync Framework da implementação específica de cada banco de dados. O Sync Framework inclui cinco provedores de banco de dados que oferecem suporte a dois tipos de cenários: offline e de colaboração. A ilustração a seguir mostra um cenário offline: em uma topologia cliente-servidor, os clientes se conectam a um servidor central para sincronizar dados quando uma conexão está disponível.
Uma extensão comum desse tipo de aplicativo ocasionalmente conectado é a possibilidade de oferecer suporte a cenários de colaboração. São cenários nos quais dois bancos de dados podem ser sincronizados ponto a ponto, sem ter que passar por um hub central. A ilustração a seguir mostra uma topologia mista, na qual um servidor central é sincronizado com clientes e os clientes podem sincronizar entre si. Uma topologia assim poderia oferecer suporte a um aplicativo que permita aos usuários compartilhar notas do projeto. Os membros da equipe do projeto geralmente exigem uma cópia local dos dados com a qual eles possam trabalhar. Depois de fazer as alterações, eles podem fazer a sincronização com um servidor para carregar as alterações ou com outro membro da equipe para trocar alterações.
Os cinco provedores de sincronização de banco de dados do Sync Framework podem ser divididos em duas categorias:
DbServerSyncProvider e SqlCeClientSyncProvider oferecem suporte a cenários offline. Esses provedores apresentam as seguintes características:
Adequados para topologias cliente-servidor.
Sempre são usados como um par. Por exemplo, você não pode sincronizar dois bancos de dados de servidor usando duas instâncias de ServerSyncProvider (em vez disso, use SqlSyncProvider ou DbSyncProvider).
Eles podem ser menos complexos que os provedores de colaboração, mas não podem participar de topologias com outros provedores do Sync Framework.
Para obter mais informações sobre a sincronização offline, consulte Cenários offline.
SqlSyncProvider, SqlCeSyncProvidere DbSyncProvider oferecem suporte a cenários de colaboração. SqlSyncProvider e SqlCeSyncProvider são usados, respectivamente, para sincronizar bancos de dados SQL Server e SQL Server Compact. O DbSyncProvider geralmente é usado para sincronizar bancos de dados não-SQL Server. Esses provedores apresentam as seguintes características:
Adequados para topologias ponto a ponto e mistas. Podem ser usados em topologias cliente-servidor se recursos mais avançados forem exigidos, como o envio em lote complexo.
Podem ser usados de maneiras mais flexíveis. Por exemplo, você pode sincronizar duas instâncias de DbSyncProvider ou uma instância de SqlSyncProvider e um instância de SqlCeSyncProvider, e assim por diante.
Usam metadados do Sync Framework e podem participar de topologias com outros provedores do Sync Framework.
Para obter mais informações sobre colaboração de dados, consulte Cenários de colaboração.