Projeto que visa criar uma lista de contatos distribuida, ou seja, replicada em diversos servidores.
- Frontend using C++ and QT.
- Usar própria conexão para designar os outros servers
- Ou seja, ao se conectar com um servidor válido, caso algum outro servidor esteja online, ele deverá avisar aos outros e os outros servidores avisarão aos clientes conectados que há outro servidor disponível.
- Ter algo como
possiblyAliveServer: List<Server>
- Ou ter três servidores conhecidos e tentar de um a um?
- Usar proxies em
/etc/hosts
? Sendo assim, sempre teriamos um server especifico que seria o discovery de serviços, onde os demais iriam se cadastrar e o client iria pedir um server.- Create an entry in hosts to simulate an online server:
sudo bash -c 'echo "127.0.0.1 contact-server" >> /etc/hosts'
- Then make a request:
curl -XGET http://contact-server:8000/
- Create an entry in hosts to simulate an online server:
- TODO: Pesquisar sobre relógios de Lamport ou relógio vetorial para solucionar o problema de sincronização.
- Maybe we can use the logical clock to match updates and creation.
- The data is saved with the logical clock to that extent.
- Test it with slow internet.
- See this article, Wikipedia and UFRN site.
- Parece que o professor quer um nameserver... Posso usar um e direcionar os dados para ele... Posso também usar o próprio nameserver do linux?
- De inicio iremos usar o servidor nativo de hosts do Linux, depois podemos usar um servidor central para ser como um "service discovery", ou "Service Regsitry. Ver link.
- Para isso, adicionaremos:
sudo bash -c 'echo "127.0.0.1 contact-server-1" >> /etc/hosts'
sudo bash -c 'echo "127.0.0.1 contact-server-2" >> /etc/hosts'
sudo bash -c 'echo "127.0.0.1 contact-server-3" >> /etc/hosts'
- O cliente deve conhecer um dos três servidores, ao conectar-se nele, receberá os endereços de outros possíveis servidores, caso esse venha a cair.
- 1.1. Esse caso poderia também ser solucionado de forma melhor usando um nameserver. Um servidor que redirecionaria os clientes para os servidores "vivos".
- Servidores manterão uma conexão aberta um com o outro, mantendo-os vivos por um heartbeat com datas.
- 2.1. Novamente, seria melhor ter um nameserver para poder saber por onde se conectar aos outros dois servidores, pois estes iriam se cadastrar no nameserver principal
- Quando um servidor cair, os outros servidores saberão de sua "queda", avisando aos seus clientes que estes servidores não estão mais online.
- O cliente que perder a conexão, deverá ir à outro servidor para poder fazer suas operações.
Dado que o cliente esteja conectado à um servidor válido.
- Toda vez que o cliente cadastrar ou atualizar um contato em um servidor, o servidor deverá atualizar os outros servidores da mudança do contato (PS: Ver sincronismo).
- Quando um servidor ficar online, ou um que estava "caído" subir, ele deverá pedir atualizações de contato desde a hora em que ele caiu (Para isso salvar data e hora na agenda).
- Ou então apenas manter em memória e pegar uma cópia completa de todos os dados.
- Ver também sobre: Atualização usando relógio vetoriais.