Notas
Estão disponíveis as notas finais!
Veja abaixo a comparação com a implementação da
GNU libc. e o comentário sobre a implementação
da Netflix
Tema
Vamos trabalhar com
o
ZooKeeper, um sistema que oferece serviços de coordenação para
aplicações distribuídas. O ZooKeeper
é distribuído sob uma
licença livre e é utilizado por empresas como o Yahoo!.
O ZooKeeper já foi utilizado em quatro oferecimentos anteriores desta
disciplina
(2s2010, verão
2011
e 1s2011, verão
2013). A ideia é aproveitar a experiência e as dicas desse pessoal
e tentar preparar um material melhor para os próximos oferecimentos.
Barreiras foi o tema específico do oferecimento do verão passado, mas
agora estamos
Em busca da implementação ideal para barreiras...
Barreiras são primitivas para sincronizar um grupo de processos. Os
processos ficam bloqueados em uma chamada a um
método barrier_wait() até que um número pré-determinado de
processos seja atingido. Veja os slides
para saber mais sobre tipos de barreiras e alguns possíveis bugs de
implementação.
O projeto Zookeeper ainda não tem uma boa implementação para
barreiras. Há apenas um código de exemplo e ainda por cima com bugs
(
ZOOKEEPER-1486
e
ZOOKEEPER-1011). Vamos implementar uma biblioteca (como as já
disponíveis para eleição, locks e filas) que atenda aos seguintes
requisitos:
- barreiras simples e duplas;
- barreiras reutilizáveis;
- barreiras restritas a subgrupos de processos;
- várias barreiras no mesmo nó (não usar apenas o nome da máquina);
- várias barreiras na mesma aplicação distribuída;
- barreiras aninhadas.
- solução distribuída (sem um servidor dedicado, mas processos
podem assumir papel diferenciado durante uma execução)
- solução sem uso de espera ocupada.
- o número de vezes em que os processos são acordados é mínimo.
Critério de avaliação
Os projetos serão desenvolvidos em 5 fases de mesmo peso e devem ser
feitos em grupos de 3 ou 4 pessoas.
Cada grupo deverá criar um repositório
no github
ou bitbucket, onde deverá ficar
disponível para download o código de todas as fases. Todo código
deverá ser executado, explicado e apresentado em sala de aula. As
aplicações teste deverão ser executadas no dia da apresentação.
Deverá ser adicionada documentação que explique o funcionamento da
aplicação.
Observações:
- Nos dias de apresentação é fundamental a presença e participação de
todos os membros do grupo.
- Entregas com atraso terão desconto na nota.
- Em caso de fraude será atribuída nota zero na disciplina para todos os
envolvidos.
Repositórios:
Calendário
Aulas teóricas na sala 353 do IC-3.5, para desenvolvimento estão
reservados os laboratórios 02 e 03 do IC-03. Atendimento de dúvidas na
sala 18 do IC-02.
- 27/fev: Apresentação do projeto e formação de grupos
- 06/mar:
- 13/mar:
- 20/mar: Entrega da fase 1
- 27/mar:
- 03/abr:
- 10/abr:
- 17/abr: Entrega da fase 2
- 24/abr:
- 08/mai:
- 15/mai: Entrega da fase 3
- 22/mai:
- 29/mai:
- 05/jun: Entrega da fase 4
- 12/jun: Não haverá aula. Motivo: participação em banca de concurso público.
- 19/jun:
- 26/jun: Entrega da fase 5
- Não haverá possibilidade de entrega com atraso na semana de
estudos (01 a 06 de julho). Motivo: FISL 2013.
Detalhamento da fase 1
- Ativar uma conta no cluster do IC-03. Um aspecto muito relevante deste cluster é que todos os nós enxergam o mesmo sistema de arquivos!
- Instalar o ZooKeeper.
-
O Grupo01
do 2s2010 fez um vídeo muito bom que pode servir de guia. Note que a
saída dos servidores é redirecionada para zookeeper.out e não é mais
exibida na tela.
- Cuidado com os zumbis: Muitas vezes processos zumbis de
servidores do ZooKeeper continuam rodando e consumindo recursos. Ainda
não temos nenhum mecanismo automático para acabar com os zumbis, por
isso, verifique se você não deixou nenhum processo deste tipo nas
máquinas antes de deslogar.
- Cuidado com o conflito de portas: cada grupo deverá escolher um
conjunto distinto de portas para operar, caso contrário, erros
inesperados poderão ocorrer.
- Escreva uma aplicação que utilize o código das barreiras
disponível em
tutorial
e, que, com grande probabilidade evindencie o bug descrito
em
ZOOKEEPER-1486. Em sistemas distribuídos, é comum o uso de
histórias para ilustrar algoritmos: filósofos famintos, barbeiro
dorminhoco, generais bizantinos, ... Invente a sua!
Detalhamento da fase 2
- Estudar o pseudo-código disponível em Receitas e Soluções do ZooKeeper .
- Implementar esse pseudo-código como uma biblioteca, seguindo o modelo já disponível para outras receitas no diretório: zookeeper-3.4.5/recipes .
- Implementar barreiras simples (barrier_wait()) e barreiras duplas (barrier_enter() e barrier_leave()).
- Escrever uma aplicação distribuída de testes para esta fase.
Detalhamento da fase 3
- Modificar o código da fase 2 para implementar barreiras reutilizáveis.
- Corrigir eventuais erros apontados na fase anterior.
- Escrever uma aplicação distribuída de testes para esta fase.
Detalhamento da fase 4
- Modificar o código da fase 3 para implementar barreiras
reutilizáveis e restritas.
- Corrigir eventuais erros apontados nas fases anteriores.
- Escrever uma aplicação distribuída de testes para esta fase.
Detalhamento da fase 5
- Modificar o código da fase 4 para implementar múltiplas barreiras
reutilizáveis e restritas. As barreiras duplas também podem ser
aninhadas, ou seja, processos que estão dentro de uma barreira dupla
externa podem ter de passar por barreiras internas.
- Corrigir eventuais erros apontados nas fases anteriores.
- Escrever uma aplicação distribuída de testes para esta fase.
Comparação com a implementação da GNU libc.
A implementação de barreiras para pthreads incluída pela glibc permite
o uso de múltiplas barreiras reutilizáveis e restritas. No
diretório pthread-exemplos você pode
encontrar pequenos arquivos de teste para estas funcionalidades.
No
arquivo pthread_barrier_wait.c
você pode ver o código implementado. A ideia adotada é que todas as
threads devem pegar um lock para fazer um incremento no contador da
barreira. A thread que chega no limite da barreira não libera este
lock, que só é liberado pela última thread que deixa a barreira.
Curator - Netflix Zookeeper Library
A empresa Netflix desenvolveu uma versão das receitas do ZooKeeper que
também é software livre. Será que a barreira implementada por eles
pode ser reutilizável, restrita e/ou aninhada?
Curiosidades
Com o ZooKeeper, você pode participar do
Google Summer of
Code. Veja algumas
ideias
aqui.
Um grupo ajudou a resolver o bug documentado em
Bug in WriteLock recipe implementation. A próxima contribuição pode ser sua.