O Google Wave são três coisas: uma ferramenta, uma plataforma e um protocolo. A arquitetura dele tem como base a Transformação Operacional (OT), um framework teórico que visa dar suporte a controle de concorrência.
Primeiramente, precisamos de uma definição. Google Wave é:
uma nova plataforma de comunicação e colaboração baseada em documentos XML hospedados (chamadas waves), com suporte a modificações simultâneas e atualizações com baixa latência.
A Ferramenta
Google Wave é um programa de email + chat instantâneo + ferramenta de edição e compartilhamento de documentos de forma colaborativa. Ele usa JavaScript e HTML 5 no lado do cliente, rodando em browsers como Chrome, Firefox, Safari e plataformas móveis (iPhone, Android), e usa Java + Python no lado do servidor, que também pode ser implementado com qualquer linguagem que o cliente queira. A ferramenta foi construída usando o GWT (Google Web Toolkit), mas também utiliza o Google Gears para as operações de drag and drop, que ainda não foram incluídas no HTML 5. É necessário um servidor dedicado para tratar as comunicações simultâneas, necessárias principalmente em equipes maiores. O servidor pode estar em uma nuvem (cloud), dentro de uma empresa privada, ou simplesmente na casa de alguém.
Foi realizado um demo do Google Wave na semana passada, durante o Google I/O.
A Plataforma
O Google Wave vem com uma API pública, e a empresa prometeu liberar o código inteiro da plataforma antes do produto ir ao ar. Como uma plataforma, o Wave permite que desenvolvedores alterem o código base e extenda o mesmo com gadgets e robôs. Gadgets são pequenos programas que rodam dentro de uma wave, enquanto robôs são “participantes automatizados da wave.”. O Wave também pode ser embutido em outros meios, como blogs.
O Protocolo
Modelo de Dados
Os principais elementos do modelo de dados do Google Wave são:
Wave - Cada wave possui um ID globalmente único, que consiste em um conjunto de wavelets.
Wavelet - Uma wavelet possui um ID único dentro da wave, e é composto de uma lista de participantes e um conjunto de documentos. Wavelet é a entidade onde é aplicado Controle de Concorrência / Transformações Operacionais.
Participante - Um participante é identificado por um endereço de wave, que é uma string com o mesmo formato de um email (parte-local@dominio). Um participante pode ser um usuário, um grupo ou um robô. Não pode haver mais de um mesmo participante dentro da lista de participantes.
Documento - Um documento possui um ID único dentro da wavelet que o contém, e é composto de um documento XML e um conjunto de anotações "de separação". Essas anotações são ponteiros para o documento XML e são independentes da estrutura dele. Elas são usadas para representar a formatação do texto, sugestões de ortografia e links. Documentos formam uma árvore dentro de um wavelet.
Wave View - Uma wave view é um subconjunto de wavelets em uma wave, que um usuário pode acessar. Um usuário ganha acesso a uma wavelet ou sendo um participante na wavelet ou sendo membro de um grupo que é participantes (um grupo pode ser incluído dentro de outro).
Transformação Operacional
Essa é a parte crucial da tecnologia do Wave. Google Wave faz uso extensivo de Transformações Operacionais (OTs), que são executadas no servidor. Quando um usuário edita um documento colaborativo aberto por vários usuários, o programa cliente fornece uma interface otimista que mostra imediatamente o que ele(a) digita, ao mesmo tempo que envia a operação de edição para o servidor para ratificação, na esperança de que a edição seja aceita pelo servidor. O cliente espera que o servidor avalie a operação e guarda em cache quaisquer outras operação até que o servidor responda. Depois que o servidor responde, todas as operações armazenadas em cache são enviadas de uma vez. O servidor, considerando as operações recebidas por outros clientes, irá realizar as transformações e informar os clientes sobre as transformações, e os clientes atualizarão a interface gráfica. As operações são enviadas ao servidor e propagadas para cada cliente caractere a caractere, a menos que seja uma operação muito grande. O servidor é o mantenedor do documento e sua versão é considerada a versão “correta”. Por fim, cada cliente será atualizado com a versão final recebida do servidor, que pode ser resultado de várias transformações operacionais. Há meios de recuperação no caso de falha de comunicação ou crash do servidor/cliente. Todos os documentos XML trocados entre o cliente e o servidor possuem um checksum para identificação rápida de falhas de comunicação.
Protocolo Cliente-Servidor
Operações. Wavelets, os componentes básicos de uma wave, sofrem uma série de modificações denominadas transformações operacionais. Essas modificações precisam ser propagadas e aplicadas a cada cliente, para que eles não percam a sincronia.
Sequenciamento de Operações. Todas as operações aplicadas a wavelets são enviadas em uma ordem bem determinada. Uma nova operação não é enviada até que o servidor tenha respondido à operação anterior. O servidor ordena as operações baseado em um número de versão. Cada cliente precisa realizar as operações respeitando a ordem.
Abrindo uma wavelet. Para iniciar a comunicação em uma wavelet, um cliente envia uma Requisição de Abertura contendo o ID da Wave e o ID da wavelet ao servidor. O servidor responde com um snapshot - o estado serializado de uma wavelet - ou um hash de histórico da versão correspondente.
Comunicação Servidor-cliente. O servidor envia ao cliente ou um delta (uma sequência de uma ou mais operações), um número de versão ou um hash de histórico.
Comunicação Cliente-servidor. O cliente envia um delta ou um número de versão.
Recuperação. Quando ocorre falha na comunicação, o cliente inicia reabrindo o servlet enviando um histórico dos hashes recebidos anteriormente pelo servidor.
Federação
O Protocolo da Federação do Google Wave permite que várias entidades (fornecedores de waves) compartilhem waves entre si. Um fornecedor de waves pode ser um servidor rodando em uma casa fornecendo waves para um único usuário ou vários membros da família, ou uma corporação, ou um servidor de internet, sendo o Google somente mais um fornecedor de waves.
Links úteis: Google Wave, API do Google Wave, Protocolo do Wave.