Instituto de Computação - UNICAMP

Laboratório de Sistemas Distribuídos

Primeiro Semestre de 2013

Islene Calciolari Garcia

PED: Eduardo Miranda

Atenção: a partir de 17/04 as aulas serão na sala 316 do IC-02!


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:

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:

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.

Detalhamento da fase 1

Detalhamento da fase 2

Detalhamento da fase 3

Detalhamento da fase 4

Detalhamento da fase 5

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.