Fixing bibtex, trivial errors.
[mymsc.git] / mscMonografia.tex
blob4579bd98c72829def4290b872e5028a2ae6955b1
1 \documentclass[10pt]{article}
3 \usepackage[top=3cm, bottom=3cm, left=3cm, right=3cm]{geometry}
4 \usepackage{todonotes}
5 \usepackage{times}
6 \usepackage[brazil]{babel}
7 \usepackage[latin1]{inputenc}
8 \usepackage{graphicx}
9 \usepackage{url}
10 \usepackage{paralist}
11 \usepackage{hyperref}
12 \usepackage{amssymb}
13 \usepackage{setspace}
14 \usepackage{paralist}
16 \newcommand{\mytitle}{Avaliação do impacto de mecanismos de
17 armazenamento de estado no desempenho de sistemas replicados} %PT
18 \newcommand{\f}{$\blacksquare$}
20 \hypersetup{
21 pdftitle={\mytitle},
22 pdfauthor={Rodrigo E. Lazo Paz},
23 pdfdisplaydoctitle=true,
24 pdfborder=0 0 0
27 \title{\mytitle}
29 \author{
30 Rodrigo E. Lazo Paz\\%\thanks{Grants.} \\
31 IC, Unicamp \\
32 Campinas, Brasil \\
33 {\small \url{rodrigo.lazo@students.ic.unicamp.br}} \\
34 \and
35 Luiz E. Buzato \\ %\thanks{Identificação de projetos aqui.}\\
36 IC, Unicamp \\ Campinas, Brasil \\ {\small
37 \url{buzato@ic.unicamp.br}}
40 \hyphenation{par-ti-cu-lar-men-te}
41 \hyphenation{su-fi-ci-en-tes}
43 \begin{document}
44 \doublespacing
46 \maketitle
48 \begin{abstract}
49 \noindent Nos sistemas distribuídos replicados, a queda e
50 subsequente recuperação de pelo menos uma réplica produz uma
51 degradação no desempenho do sistema devido a dois fatores: (i) a
52 re-distribuição da carga de trabalho entre as réplicas
53 remanescentes, e (ii) o impacto negativo que a re-introdução de um
54 processo falho tem sobre o sistema como um todo, porque a
55 recuperação tem um custo diretamente proporcional ao tamanho do
56 estado persistente que deve ser recuperado. Esse projeto avalia
57 alternativas para o armazenamento do estado persistente que não
58 requerem o uso de memória estável. Por exemplo, é possível que uma
59 réplica mantenha o seu estado na memória principal de um outro
60 computador. É possível ainda que algumas réplicas mantenham seu
61 estado em memória estável local enquanto outras utilizam somente
62 memória volátil. Neste projeto, avaliaremos múltiplas configurações
63 de sistemas distribuídos replicados com armazenamento híbrido,
64 combinando memoria estável local e repositórios remotos localizados
65 em memória volátil de outros computadores, de maneira a tentar
66 minimizar o impacto da recuperação de réplicas falhas no desempenho
67 do sistema replicado. Os resultados serão aplicados na melhora da
68 biblioteca Tréplica para a construção de aplicações de alta
69 disponibilidade, desenvolvida no Laboratório de Sistemas
70 Distribuídos do Instituto de Computação da Universidade Estadual de
71 Campinas.
72 \end{abstract}
75 \newpage
77 \section{Introdução}
78 \label{sec:introduction}
80 Algoritmos distribuídos são aqueles desenhados para executar em
81 sistemas compostos por um conjunto interconectado de processos
82 autônomos que trocam informação. O progresso do algoritmo depende de
83 dois elementos: o progresso individual de cada um dos processos e da
84 troca de informação entre eles. Os modelos distintos, i.e.\
85 suposições, que descrevem características específicas desses elementos
86 do sistema são:
88 \begin{itemize}
89 \item \textit{Modelo de intercomunicação dos processos}, admite duas
90 possibilidades: a troca de mensagens (enviando mensagens
91 ponto-a-ponto ou um-para-varios; mantendo o ordem de envio na
92 recepção ou não), ou a leitura e escrita de variáveis comuns na
93 memoria compartilhada.
94 \item \textit{Modelo temporal}, distingue três possibilidades:
95 \begin{inparaenum} [\itshape a\upshape)]
96 \item \textit{sistemas síncronos}: todos os processos executam cada
97 passo do algoritmo simultaneamente e o tempo de demora é
98 conhecido;
99 \item \textit{sistemas assíncronos}: cada processo pode tomar uma
100 quantidade indeterminada de tempo para executar cada passo do
101 algoritmo;
102 \item \textit{sistemas parcialmente síncronos}, algumas suposições
103 sobre o tempo de demora de algumas operações são possíveis, mas
104 não se garante que os processos executem simultaneamente os passos
105 do algoritmo.
106 \end{inparaenum}
107 \item \textit{Modelo de falhas}, classifica o comportamento dos
108 processos na presencia de falhas em: \textit{falha-e-para}: o
109 processo falha e deixa de participar do sistema;
110 \textit{falha-e-recuperação}: o processo falha, mas, em algum
111 momento no futuro, volta ao sistema; \textit{falha de omissão}: o
112 processo não realiza algumas ações arbitrariamente, e.g.\ enviar uma
113 mensagem; e \textit{falha bizantina}: o comportamento do processo é
114 aleatório. Além dos processos, os canais de comunicação também podem
115 apresentar falhas; por exemplo, no caso da comunicação por troca de
116 mensagens, perder, duplicar ou corromper as mensagens.
117 \end{itemize}
119 É claro que, as combinações distintas dos modelos apresentados, dão
120 lugar a uma multiplicidade de ambientes muito ampla e, portanto, não é
121 possível, ou ao menos prático, desenhar algoritmos distribuídos que
122 sejam capazes de executar em modelo qualquer; é por isso que somente
123 se pode avaliar a correção dos algoritmos sob as condições
124 determinadas por um certo modelo computacional. Por exemplo, um
125 algoritmo desenhado para um sistema síncrono e sem falhas não vai
126 funcionar se for executado por um sistema assíncrono sujeito a falhas
127 arbitrárias. Assim, um modelo determina o arcabouço teórico e prático
128 para o desenvolvimento e aplicação de um algoritmo distribuído.
130 Neste projeto adotamos o modelo assíncrono onde processos falham e
131 depois se recuperam, isto é, se re-integram ao sistema. Nesse modelo é
132 necessário lidar com dois problemas importantes que têm impacto sobre
133 o desempenho do sistema: (i) memória estável e (ii) detecção de
134 falhas. Como essa proposta não desenvolverá novos mecanismos para
135 detecção de falhas, esse estudo e objeto de um outro Mestrado
136 relacionado a este, discutiremos a seguir o problema associado à
137 necessidade de memória estável.
139 Quando um processo falha, ele perde o seu estado local, isto é, aquele
140 armazenado em memória volátil. Uma maneira de resolver esse problema é
141 supor que periodicamente o processo transfere fotografias de seu
142 estado para memória estável. Assim, após uma falha o processo
143 recém-iniciado pode recompor o seu estado a partir do última
144 fotografia armazenada em memória estável, o último \emph{checkpoint}.
145 Infelizmente, operações de leitura e escrita em memória estável são
146 lentas e custosas e, portanto, devem ser evitadas ao máximo. Isto nos
147 leva diretamente às questões de pesquisa deste projeto:
149 \begin{itemize}
150 \item \emph{O uso de memória estável é sempre necessário para se
151 manter a consistência e tolerância a falhas de sistemas replicados
152 baseados em consenso?}
153 \item \emph{Se o uso de memória estável não é sempre necessário, então
154 que mecanismos e meios alternativos de armazenamento podem ser
155 utilizados para reduzir o custo da recuperação de um processo
156 falho?}
157 \end{itemize}
159 O restante do projeto é organizado da seguinte forma. A próxima seção
160 contextualiza este projeto dentro da pesquisa já realizada no
161 Laboratório de Sistemas Distribuídos sobre replicação ativa. A
162 seção~\ref{sec:teoria} apresenta os fundamentos sobre modelos
163 computacionais no cenário de falha-e-recuperação para algoritmos
164 distribuídos que se comunicam através de \textit{broadcast} de ordem
165 total. A seção~\ref{sec:treplica} apresenta a plataforma Treplica,
166 empregada para os testes e a avaliação de nossa projeto. Na
167 seção~\ref{sec:proposta} são discutidos os argumentos que dão
168 sustentação ao nosso projeto, assim como os modelos que podem ser
169 empregados para ajudar na resposta da nossa pergunta de pesquisa.
170 Finalmente, a seção~\ref{sec:metodologia} apresenta concisamente a
171 metodologia de pesquisa, as etapas a serem cumpridas no projeto e o
172 seu respectivo cronograma.
174 \section{Contexto da Pesquisa}
175 \label{sec:contexto}
176 Esta seção sumariza o contexto dentro do qual este projeto será
177 desenvolvido. Nestos últimos quatro anos o Prof. Buzato trabalhou em
178 replicação ativa com o seu aluno de Doutorado, Gustavo M. D. Vieira e
179 com o Prof.\ Willy Zwaenepoel, EPFL. O trabalho com o Prof.\
180 Zwaenepoel foi desenvolvido durante a licença sabática do Prof.\
181 Buzato, realizada durante 2008 no Instituto de Comunicação e
182 Computação da EPFL, Lausanne, Suiça. Os seguintes trabalhos são o
183 resultado desse período de pesquisa:
185 \begin{description}
186 \item \textsl{Treplica: Ubiquitous
187 replication}~\cite{vieira08:_trepl}, publicado em 2008 , apresenta
188 detalhadamente a conceição e implementação de Treplica.
190 \item \textsl{Dynamic Content Web Applications: Crash, Failover, and
191 Recovery Analysis}~\cite{buzato09}, mostra o efeito das falhas e
192 recuperações no desempenho de um aplicação Web implementada com
193 Treplica. Neste artigo, a medição do desempenho é baseada no
194 \emph{benchmark} TPC-W aumentado com medidas de disponibilidade. Os
195 resultados mostraram bom desempenho, excelente escalabilidade e
196 disponibilidade ininterrupta. Este artigo foi publicado nos anais da
197 \textsl{39th International Conference on Dependable Systems and
198 Networks (DSN 2009)}, Estoril, Portugal
199 (doi:10.1109/DSN.2009.5270331).
201 \item \textsl{The Performance of Paxos and Fast
202 Paxos}~\cite{vieira09}, caracteriza e compara, em execuções com e
203 sim presencia de falhas, o desempenho dos algoritmos de consenso
204 Paxos e Fast Paxos. Os resultados mostraram que no ambiente LAN
205 Paxos teve um melhor desempenho que Fast Paxos; isto devido às
206 violações de temporização deste último e não, como se poderia
207 intuir, à suposição otimista deste. Esse é o primeiro indício de que
208 é possível considerar modelos parcialmente síncronos para produzir
209 uma versão de Fast Paxos com desempenho melhor. Este artigo foi
210 publicado nos anais do 27º Simpósio Brasileiro de Redes de
211 Computadores e Sistemas Distribuídos (SBRC 2009), Recife, Brasil.
213 \item \textsl{On the Coordinator's Rule for Fast
214 Paxos}~\cite{vieira08b}, mostra uma análise da implementação da
215 regra de consistência do algoritmo Fast Paxos como implementada pelo
216 processo coordenador em função do número de processos no quórum. Com
217 base nesta análise, os autores propuseram uma regra simplificada de
218 consistência interessante para implementação. Este artigo foi
219 publicado no periódico \textsl{Information Processing Letters},
220 volume 107, 2008.
222 \item \textsl{A Recovery Efficient Solution for the Replacement of
223 Paxos Coordinators}~\cite{vieira-tr10a}, mostra uma otimização do
224 procedimento de substituição de um coordenador no algoritmo
225 Paxos. Devido à importancia deste, o processo de substituição pode
226 deter. Mostro-se um procedimento que provoca o mínimo de
227 perturbação. Uma observação interessante é que em sistemas
228 sobrecarregados, ainda na ausência de falhas de processos, a
229 coordenação troca constantemente.
230 \end{description}
232 Os resultados de pesquisa obtidos nos trabalhos listados aqui
233 constituem o contexto que nos motivou à formulação da nossa questão de
234 pesquisa: Qual é o método de armazenamento e recuperação de estado que
235 minimiza o impacto da recuperação de um processo sobre o desempenho do
236 sistema replicado? Antes de nos aprofundarmos na questão é necessário
237 descrever um pouco os conceitos importantes associados à replicação.
239 \section{Fundamentação Teórica}
240 \label{sec:teoria}
241 Fornecer um serviço altamente disponível empregando múltiplos
242 processos replicados é uma técnica bem
243 conhecida~\cite{Schneider:1990:IFS:98163.98167}. Existem duas formas
244 de replicação: a ativa ou de máquina de
245 estados~\cite{lamport1978implementation}, se todos os processos
246 recebem e executam as mesmas requisições, no mesmo ordem; e a passiva,
247 se um único processo recebe todas as requisições, as aplica
248 localmente, e depois seu estado é copiado pelas demais réplicas. Na
249 replicação ativa, um dos métodos mais utilizados em sua implementação
250 são os algoritmos de consenso~\cite{Lamport:1998:PP:279227.279229,
251 Schneider:1990:IFS:98163.98167,Oki:1988:VRN:62546.62549} e o
252 \textit{broadcast} de ordem total~\cite{vieira10:implementing-tr}.
254 Nesta seção discute-se a fundamentação teórica da solução de
255 replicação ativa, no modelo assíncrono com falha-e-recuperação,
256 utilizada nossa nossa proposta de pesquisa. Na
257 seção~\ref{sec:notacao}, nos definiremos a notação utilizado ao longo
258 do texto além dos modelos supostos. A seção~\ref{sec:consenso}
259 descreve o problema do consenso e sua solução utilizando o algoritmo
260 Paxos. Na seção~\ref{sec:broadcast}, o \textit{broadcast} de ordem
261 total é definido, e suas caraterísticas detalhadas.
263 \subsection{Modelo do sistema e notação}
264 \label{sec:notacao}
265 O modelo suposto neste trabalho é assíncrono, portanto, não existe
266 suposição nenhuma acerca do tempo de demora da comunicação ou do
267 processamento. Todos os processos no sistema estão conectados, e a
268 comunicação é através da troca de mensagens, as quais se podem perder
269 durante a transmissão. Os processos podem falhar e voltar ao
270 sistema. Após falhar, os processos perdem seu estado atual, mas, têm a
271 possibilidade de armazenar, de maneira persistente, informação
272 suficiente para a recuperação de algum estado anterior.
274 % \begin{table}[h]
275 % \small
276 % \centering
277 % \begin{tabular}{|l|p{5cm}|l|p{5.4cm}|}
278 % \hline
279 % \(\Pi\) & Conjunto de processos. &
280 % \(\mathcal{M}\) & Conjunto de mensagens. \\
281 % \(sender(m)\) & Processo remitente de \(m\). &
282 % \(Dest(m)\) & Conjunto destinatário de \(m\). \\
283 % \(\Pi_{sender}\) & Conjunto de processos que podem enviar mensagens. &
284 % \(\Pi_{dest}\) & Conjunto de processos que podem receber mensagens. \\
285 % \(\mathcal{T}\) & Relógio global. &
286 % \(F(t)\) & Conjunto de processos caídos no tempo \(t\). \\
287 % \(Bom(F)\) & Conjunto de processos bons (em F). &
288 % \(Ruim(F)\) & Conjunto de processos ruins (em F). \\
289 % \textit{Instável}\((F)\) & Conjunto de processos instáveis (em F).& & \\
290 % \hline
291 % \end{tabular}
292 % \caption{Notação}
293 % \label{tab:notacao}
294 % \end{table}
296 % Neste trabalho vamos a seguir a notação utilizada por Défago, Schiper
297 % e Úrban~\cite{Defago:2004}, resumida na tabela~\ref{tab:notacao}. Seja
298 % \(\Pi = \{P_1, \ldots, P_n\}\) um conjunto de \(n\) processos que
299 % conformam o sistema. A comunicação é baseada no envio de mensagens,
300 % tal que \(\mathcal{M}\) é o conjunto de mensagens válidos. Seja \(m
301 % \in \mathcal{M}\) uma mensagem válida em \(\mathcal{M}\), \(sender(m)
302 % \in \Pi \) designa o processo originador da mensagem \(m\), e
303 % \(Dest(m) \subseteq \Pi \) é o conjunto não vazio de processos aos
304 % quais a mensagem \(m\) foi enviada. Além disso, seja \(\Pi_{sender}\)
305 % o conjunto de todos os processos que podem enviar mensagens válidas, e
306 % seja \(\Pi_{dest} \stackrel{\mathrm{def}}{=} \bigcup_{m \in
307 % \mathcal{M}} Dest(m)\) o conjunto de destinos possíveis das
308 % mensagens válidas.
310 Neste trabalho vamos a seguir a notação utilizada por Défago, Schiper
311 e Úrban~\cite{Defago:2004}. Seja \(\Pi = \{P_1, \ldots, P_n\}\) um
312 conjunto de \(n\) processos que conformam o sistema. A comunicação é
313 baseada no envio de mensagens, tal que \(\mathcal{M}\) é o conjunto de
314 mensagens válidos. Seja \(m \in \mathcal{M}\) uma mensagem válida em
315 \(\mathcal{M}\), \(sender(m) \in \Pi \) designa o processo originador
316 da mensagem \(m\), e \(Dest(m) \subseteq \Pi \) é o conjunto não vazio
317 de processos aos quais a mensagem \(m\) foi enviada. Além disso, seja
318 \(\Pi_{sender}\) o conjunto de todos os processos que podem enviar
319 mensagens válidas, e seja \(\Pi_{dest} \stackrel{\mathrm{def}}{=}
320 \bigcup_{m \in \mathcal{M}} Dest(m)\) o conjunto de destinos possíveis
321 das mensagens válidas.
323 Para simplificar a apresentação do modelo, suponha-se a existência de um
324 relógio discreto global \(\mathcal{T}\) com rango de valores dos
325 números naturais; os processos não têm conhecimento ou contato como
326 ele.
328 A seguinte classificação dos processos em função a seu comportamento
329 de falhas é tomada de Aguilera, Chen e
330 Toueg~\cite{Aguilera:2000:FDC:1035750.1035753}. Seja o padrão de falhas \(F\)
331 uma função de \(\mathcal{T}\) a \(2^\Pi\), tal que \(F(t)\) representa
332 o conjunto dos processos que não estão presentes no sistema no tempo
333 \(t\). Um processo está \textit{ativo no tempo} \(t\) (em \(F\)) se
334 \(p \in F(t)\), e está \textit{inativo no tempo} \(t\) (em \(F\)) no
335 caso contrario. Um processo \textit{cai} no tempo \(t\) se está ativo
336 no tempo \(t-1\) e inativo no tempo \(t\)\footnote{Um processo
337 \textit{cai} no tempo \(t=0\) se está inativo no tempo \(t=0\) }. Um
338 processo se \textit{recupera} no tempo \(t\) se está inativo no tempo
339 \(t-1\) e está ativo no tempo \(t\). Os processos, em função a seu
340 comportamento, podem se classificar como:
342 \begin{itemize}
343 \item \textit{Sempre Ativo}: O processo \(p\) nunca cai.
344 \item \textit{Eventualmente Ativo}: O processo caiu pelo menos uma
345 vez, mas, após algum momento \(t\), o processo mantém-se ativo.
346 \item \textit{Eventualmente Inativo}: O processo caiu pelo menos uma
347 vez, e, após algum momento \(t\), o processo não volta à atividade.
348 \item \textit{Instável}: O processo cai e volta um número infinito de
349 vezes.
350 \end{itemize}
352 Um processo é \textit{bom} (em \(F\)) se é sempre ativo ou
353 eventualmente ativo. Um processo é \textit{ruim} (em \(F\)) se é
354 eventualmente inativo ou instável. Denota-se \(Bom(F)\), \(Ruim(F)\) e
355 \textit{Instável}\((F)\) aos conjuntos de processos (em \(F\)) bons,
356 ruins e instáveis, respetivamente.
358 \subsection{Consenso}
359 \label{sec:consenso}
360 O problema do consenso~\cite{Pease:1980:RAP:322186.322188} é um dos
361 mais fundamentais da área dos algoritmos distribuídos. Considere um
362 conjunto \(\Pi = \{p_1,\ldots,p_n\}\) de \(n\) processos; seja \(V =
363 \{v_1^0, \ldots, v_n^0\}\) o conjunto de estados inicias dos
364 processos, tal que \(v_i^0\) é o valor inicial do processo
365 \(p_i\). Eventualmente cada processo \(p_i\) tem que \textit{decidir}
366 um valor \(decide(p_i) = v_i\), tal que todos os processos corretos
367 concordem neste, e as seguintes propriedades forem
368 satisfeitas~\cite{Aguilera:2000:FDC:1035750.1035753}:
370 \begin{description}
371 \item[Validade uniforme] se um processo decide $v$, então algum
372 processo o propôs, i.e.\ \(\forall p \in \Pi(decide(p) \in V)\).
373 \item[Consenso] Todos os processos \textit{bons} decidem o mesmo
374 valor, i.e.\ \(\exists ! v \in V \forall p \in Bom(F) (decide(p_i) = v)\).
375 \item[Terminação] Se todos os processos \textit{bons} propõem um
376 valor, eventualmente um daqueles é escolhido, i.e.\ \(\exists ! v
377 \in V~\forall p \in Bom(F)~\exists T \in \mathcal{T}~\forall t > T
378 (v^0_p \in V \Rightarrow decide(p) = v)\).
379 \end{description}
381 Existe uma variação mais estrita, o consenso
382 uniforme~\cite{Neiger:1990:AIF:83334.83337}, que impõe restrições às
383 escolhas dos processos \textit{ruins}:
385 \begin{description}
386 \item[Consenso uniforme] Os processos não \textit{decidem} valores
387 distintos, i.e.\ \(\exists ! v \in V~\forall p \in \Pi (decide(p_i) = v)\).
388 \end{description}
390 No caso síncrono sem falhas, o problema é facilmente
391 resolúvel~\cite{Lynch:1996:DA:525656}, porém, o resultado de
392 impossibilidade obtido por Fischer, Lynch e Patterson~\cite{fischer85}
393 mostra que o problema não se pode resolver de maneira determinista num
394 sistema distribuído assíncrono com apenas um processo falho. Existem
395 distintas soluções propostas: o uso de randomização~\cite{Chor89},
396 definição de problemas mais débeis e suas soluções~\cite{dolev87},
397 detetores de falhas não
398 confiáveis~\cite{Chandra:1996:WFD:234533.234549,
399 Chandra:1996:UFD:226643.226647}, etc.
401 \paragraph{Algoritmo de consenso Paxos}
402 O algoritmo de consenso Paxos, originalmente proposto por
403 Lamport~\cite{Lamport:1998:PP:279227.279229}, é um dos mais utilizados
404 na prática~\cite{Burrows:2006:CLS:1298455.1298487,
405 Camargos:2007:SMH:1272998.1273036,
406 MacCormick:2004:BAF:1251254.1251262,
407 Saito:2004:FBD:1024393.1024400}. Neste algoritmo, os processos
408 assomem pelo menos um dos seguintes papéis:
409 \begin{inparaenum}[\itshape a\upshape)]
410 \item \textit{proponente}, que propõe valores;
411 \item \textit{receptor}, que escolhe um único valor; e
412 \item \textit{aprendiz}, que aprende o valor escolhido.
413 \end{inparaenum}
414 O algoritmo pode precisar uma ou varias rodadas para alcançar o
415 consenso, cada uma identificada por um número de rodada \(r\). No
416 começo de cada rodada os proponentes eligem um coordenador, quem
417 avalia se a maioria \(\lfloor n/2 \rfloor +1\) dos \(n\) receptores
418 participou da rodada anterior \(r-1\), e, portanto, o consenso foi
419 alcançado. No caso contrario, o algoritmo continua em duas fases com
420 dois passos cada uma:
422 \begin{itemize}
423 \item \textit{Fase 1a}, o coordenador invita aos receptores a
424 participar da rodada \(r\), os quais aceitam somente se não
425 participam de uma rodada \(r' \geq r\). A partir desse momento, os
426 receptores que aceitaram o convite \textit{prometem} não participar
427 em outra rodada, \(r'' < r\).
428 \item \textit{Fase 1b}, os receptores que aceitaram o convite enviam
429 ao coordenador o valor da última proposta que votaram e o número de
430 rodada na qual aquilo aconteceu, ou \textit{nulo} no caso contrario.
431 \item \textit{Fase 2a}, se suficientes respostas forem recebidas pelo
432 coordenador, \(\lfloor n/2 \rfloor +1\), ele escolhe dentro dos
433 valores retornados aquele que poderia ter sido \textit{decidido} em uma
434 rodada \(r' < r\), ou no caso seja \textit{nulo}, escolhe a
435 proposta feita pelos proponentes. Logo, ele pede aos receptores que
436 votem na proposta escolhida.
437 \item \textit{Fase 2b}, após receber o pedido de votar do coordenador,
438 e sempre que não houveram \textit{prometido} participar na rodada
439 \(r\), os receptores votam enviando o número de rodada \(r\) e o
440 valor decidido aos aprendizes.
441 \item O consenso é alcançado no momento que suficientes receptores,
442 \(\lfloor n/2 \rfloor +1\), votam na fase 2b.
443 \end{itemize}
445 Uma caraterística interessante do Paxos é que sua tolerância a falhas
446 fundamenta-se no uso de \textit{quorum} de processos, e não no
447 conhecimento do estado atual deles, como os detetores de falhas. O
448 algoritmo garante que se um valor é eleito, a escolha não muda,
449 portanto um processo que caiu e volta, pode aprendê-lo. Para que isso
450 aconteça, cada participante do algoritmo tem que armazenar
451 persistentemente as rodadas nas quais ele participou e os valores que
452 votou.
454 \subsection{Broadcast de ordem total}
455 \label{sec:broadcast}
456 % seção muito longa?
457 O \textit{broadcast} de ordem total, ou atômico, é uma primitiva de
458 comunicação assíncrona de alto nível que garanta que as mensagens
459 enviadas a um conjunto de processos sejam recebidas, no mesmo ordem,
460 por todos os membros~\cite{Defago:2004}. O problema é definido
461 formalmente em função de duas primitivas, \textit{TO-broadcast}\((m)\)
462 e \textit{TO-deliver}\((m)\), onde \(m \in \mathcal{M}\) e uma
463 mensagem válida. Quando um processo \(p \in \Pi\) executa
464 \textit{TO-broadcast}\((m)\) (respectivamente,
465 \textit{TO-deliver}\((m)\)) diz-se que o processo \(p\)
466 \textit{TO-broadcasts} \(m\) (respectivamente, \textit{TO-delivers}
467 \(m\)). Todas as mensagens têm identificadores únicos, e levam consigo
468 a identidade de seu remetente, denotado \textit{sender}\((m)\). Além
469 disso, supomos que para qualquer mensagem \(m\), e em quaisquer
470 execução, a chamada \textit{TO-broadcasts}\((m)\) é feita uma vez
471 só. Neste contexto, o \textit{broadcast} de ordem total é definido
472 pelas seguintes
473 propriedades~\cite{Chandra:1996:WFD:234533.234549,hadzilacos94}:
475 \begin{itemize}
476 \item \textit{Validade}, se um processo bom \textit{TO-broadcasts} a
477 mensagem \(m\), então ele eventualmente \textit{TO-delivers} \(m\).
478 \item \textit{Acordo uniforme}, se um processo \textit{TO-delivers} uma
479 mensagem \(m\), então todos os processos bons eventualmente
480 \textit{TO-deliver} \(m\).
481 \item \textit{Integridade uniforme}, para qualquer mensagem \(m\),
482 cada processo \textit{TO-delivers} \(m\) no máximo uma vez, se
483 somente se \(m\) foi \textit{TO-broadcast} por
484 \textit{sender}\((m)\) anteriormente.
485 \item \textit{Ordem total uniforme}, se os processos \(p\) e \(q\)
486 \textit{TO-deliver} as mensagens \(m\) e \(m'\), então \(p\)
487 \textit{TO-delivers} \(m\) antes de \(m'\), se somente se \(q\)
488 \textit{TO-delivers} \(m\) antes de \(m'\).
489 \end{itemize}
491 Se a primitiva de comunicação satisfaz todas as propriedades exceto
492 ordem total uniforme é chamada \textit{broadcast} confiável. No caso a
493 primitiva cumpra todas as propriedades prévias, é chamada uniforme,
494 porque impõe restrições ao comportamento de todos dos processos. O
495 broadcast não uniforme só se aplica aos processos bons (propriedades
496 de acordo e integridade não uniformes).
498 % Não gosto do paragrafo, é uma simples enumeração, não é muito
499 % legível.
500 A relação entre o conjunto destino das mensagense, o conjunto de
501 processos do sistema e a presença do remetente como destinatario da
502 mensagem gera a seguinte classificação:
503 \begin{inparaenum}[\itshape a\upshape)]
504 \item Se ambos são iguais, i.e \(\forall m \in \mathcal{M} (Dest(m) =
505 \Pi)\), a primitiva é \textit{broadcast};
506 \item Se o conjunto destino é um subconjunto dos processos, e
507 distintas mensagens têm distintos conjuntos destinos e os remetentes
508 podem não ser destinatários, i.e.\ \(\exists m \in \mathcal{M}
509 (sender(m) \notin Dest(m)) \wedge \exists m_i,m_j \in \mathcal{M}
510 (Dest(m_i) \neq Dest(m_j))\), a primitiva é multicast.
511 \item Se o remitente é membro dos destinatários, i.e.\ \(\forall m \in
512 \mathcal{M} (sender(m) \in Dest(m))\), o grupo é \textit{fechado};
513 \item Se o remitente não precisa pertencer ao grupo destino, i.e.\
514 \(\exists m \in \mathcal{M}(sender(m) \notin Dest(m))\), o grupo e
515 \textit{aberto}.
516 \end{inparaenum}
518 A conformação do conjunto de processos do sistema não precisa ser
519 fixa. Se os processos podem entrar, sair e ser removidos dele, o grupo
520 é \textit{dinâmico}, contraposto ao grupo \textit{estático}, que não
521 permite a mudanca de membros durante a execução. Às distintas
522 configurações ao longo do tempo são
523 \textit{vistas}~\cite{Chockler:2001:GCS:503112.503113}. A primitiva de
524 comunicação equivalente ao \textit{broadcast} confiável nos grupos
525 dinâmicos é a \textit{sincronia de vista}, que cumpre as mesmas regras
526 de validade, integridade uniforme e uma versão de acordo relaxada aos
527 membros atuais. Uma sincronia de vista que cumpre adicionalmente a
528 propriedade de ordem total é o equivalente ao \textit{broadcast} de
529 ordem total nos grupos estáticos.
531 Existem diversos mecanismos pelos quais se pode definir a ordem de
532 entrega das mensagens~\cite{Defago:2004}, porém, em todos são
533 distinguíveis três papéis: remetente (i.e.\ \(p \in \Pi_{sender}\)),
534 destinatário (i.e.\ \(p \in \Pi_{dest}\)) e o sequenciador que define
535 o ordem de entrega das mensagens. Existem as seguintes cinco classes:
537 \begin{itemize}
538 \item \textit{Sequenciador fixo} (e.g.\ Garcia-Molina e
539 Spauster~\cite{garcia2002message}). Um único sequenciador é
540 escolhido. Possui três variantes:
541 \begin{inparaenum}[\itshape a\upshape)]
542 \item \textit{unicast-broadcast}, se o remetente envia as mensagens
543 ao sequenciador, e ele se responsabiliza pela entrega ordenada;
544 \item \textit{broadcast-broadcast}, se o remetente envia as
545 mensagens diretamente aos destinatários e ao sequenciador, e logo
546 este envia a ordem de entrega;
547 \item \textit{unicast-unicast-broadcast}, se o remetente envia as
548 mensagens ao sequenciador, logo este retorna os identificadores de
549 sequencia das mensagens, e finalmente o remetente envia
550 diretamente as mensagens.
551 \end{inparaenum}
552 \item \textit{Sequenciador móvel} (e.g.\
553 Pinwheel~\cite{cristian97:high_performance}). É muito similar ao
554 sequenciador fixo, mas o papel de sequenciador é transferível entre
555 um conjunto de processos. Na literatura, o principio utilizado pelos
556 sequenciadores móveis é equivalente ao \textit{broadcast-broadcast}
557 dos sequenciadores fixos~\cite{Defago:2004}.
558 \item \textit{Baseados em privilégios} (e.g.\ Gopal e
559 Toueg~\cite{Gopal:1989:RBS:645946.675018}). A diferença das classes
560 anteriores, os papéis do sequenciador e do remetente são
561 desenvolvidos pelo mesmo processo. O principio é que só o processo
562 que possui o privilegio, e.g.\ token, pode enviar mensagens, mas
563 este privilegio é circulado entre os remetentes.
564 \item \textit{Baseados na historia da comunicação}(e.g.\
565 Atom~\cite{Bar-Joseph:2002:EDA:645959.676132}). São os destinatários
566 os que definem a ordem de entrega das mensagens baseando-se na
567 historia deles, i.e.\ os destinatários são os sequenciadores. Os
568 dois métodos utilizados são:
569 \begin{inparaenum}[\itshape a\upshape)]
570 \item \textit{historia causal}, onde algoritmos de ordem causal
571 parcial~\cite{Lamport:1978_clocks} são aumentados com políticas
572 comuns para a ordenação de mensagens concorrentes, e o ordem
573 total resultante é utilizado para ordenação das mensagens;
574 \item \textit{união determinista}, onde não existe uma ordenação
575 causal das mensagens, senão uma política determinista de união dos
576 fluxos de mensagens de cada remetente.
577 \end{inparaenum}
578 \item \textit{Acordo dos destinatários}(e.g.\ Chandra e
579 Toueg~\cite{Chandra:1996:UFD:226643.226647}). Como o nome o indica,
580 os destinatários acordam a ordem das mensagens a ser entregues. As
581 variantes são:
582 \begin{inparaenum}[\itshape a\upshape)]
583 \item \textit{acordo na sequencia de mensagens}, cada destinatário
584 assina uma \textit{timestamp} local a mensagem, logo a maior
585 destas é escolhida como a \textit{timestamp} global e é utilizada
586 para ordenar a entrega;
587 \item \textit{acordo no conjunto de mensagens}, algoritmos de
588 consenso são utilizados para determinar um subconjunto de
589 mensagens a ser entregues simultaneamente por todos os processos
590 (a ordenação no subconjunto é definida por algum parâmetro
591 predefinido);
592 \item \textit{acordo na aceitação de ordens propostas}, um processo
593 propõe uma ordem das mensagens e os demais destinatários acordam
594 se é aceitado o não, utilizando algum protocolo de \textit{commit}
595 atômico.
596 \end{inparaenum}
597 \end{itemize}
599 Foi mostrado por Chandra e Toueg~\cite{Chandra:1996:UFD:226643.226647}
600 que o problema do consenso uniforme e o \textit{broadcast} de ordem
601 total em sistemas assíncronos com falhas de parada são equivalentes,
602 i.e.\ qualquer algoritmo que possa resolver um deles também se pode
603 adaptar para resolver o outro. Portanto, o \textit{broadcast} de ordem
604 total é sujeito ao mesmo resultado de impossibilidade de Fischer,
605 Lynch e Patterson.
607 Existem múltiplos mecanismos pelos quais se pode prover alguma
608 tolerância a falhas ao \textit{broadcast} de ordem total. Na prática, os
609 algoritmos implementam vários mecanismos simultaneamente. Os mecanismos
610 são:
612 \begin{itemize}
613 \item \textit{Detecção de falhas} Baseados nos detetores de falhas não
614 confiáveis propostos inicialmente por Chandra e
615 Toueg~\cite{Chandra:1996:UFD:226643.226647}.
616 \item \textit{Serviço de configuração do grupo}, profundamente
617 relacionado com os grupos dinâmicos. No evento de um processo cai, o
618 serviço gera uma nova vista do grupo e a envia aos processos ativos,
619 portanto, eles podem assumir que na vista atual todos os processos
620 estão ativos. Se um processo foi excluído erroneamente, é forçado a
621 cair para manter a correção. A diferença dos detetores de falhas,
622 provê notificações de falhas consistentes.
623 \item \textit{Patrões de comunicação resistentes}, são aqueles patrões
624 que consideram, dentro do número \(n\) total de processos, um número
625 \(f\) máximo de processos que podem falhar, e trabalham sob o
626 pressuposto que sempre vão receber pelo menos \(n-f\) mensagens de
627 resposta.
628 \item \textit{Estabilidade das mensagens}. Além da possibilidade que
629 um processo fique bloqueado esperando a resposta de outro que caiu,
630 tem que se considerar a estabilidade das mensagens. Uma mensagem
631 \(m\) é \(k\)-estável se \(m\) e recebida por \(k\) processos. Se
632 num sistema podem cair ao mais \(f\) processos, é importante detetar
633 que as mensagens são \(f+1\)-estáveis, também chamadas estáveis, já
634 que permite aos algoritmos garantir que, eventualmente, as mensagens
635 são recebidas por todos os processos bons.
636 \item \textit{Consenso} O \textit{broadcast} de ordem total pode
637 reduzir se a uma série de execuções do problema do consenso,
638 portanto é possível delegar toda a responsabilidade da tolerância a
639 falhas ao algoritmo de consenso.
640 \end{itemize}
642 \section{Treplica}
643 \label{sec:treplica}
644 Esta seção sumariza a plataforma Treplica, sobre a qual este projeto
645 será desenvolvido. Treplica é uma biblioteca desenhada para suportar a
646 construção de aplicações replicadas altamente disponíveis no modelo de
647 falha e recuperação~\cite{vieira08:_trepl,vieira10:implementing-tr}. O
648 objetivo da ferramenta é garantir consistência e persistência de dados
649 através de abstrações de programação simples e descomplicadas.
651 Na raiz da biblioteca estão as filas assíncronas persistentes, que são
652 canais de comunicação em grupo com as seguintes propriedades:
653 \begin{inparaenum}[\itshape a\upshape)]
654 \item as mensagens são entregues no mesmo ordem;
655 \item todos os processos, ainda aqueles que caem e voltam ao sistema,
656 recebem todas as mensagens; e
657 \item a persistência das mensagens é garantida.
658 \end{inparaenum}
659 A similaridade com o \textit{broadcast} de ordem total com sincronia
660 de vista (seção~\ref{sec:broadcast}) e
661 clara~\cite{Birman:1987:EVS:41457.37515}, mas a entrega das mensagens
662 é restrito ao estado da aplicação, não à vista atual. Porém, pode-se
663 implementar as filas persistentes utilizando \textit{broadcast} de
664 ordem total uniforme. Em Treplica, cada fila tem um identificador
665 único chamado \textit{queue id}. Os processos que participam da
666 comunicação criam pontos de conexão exclusivos chamados \textit{queue
667 endpoints}, um para cada fila que utilizam. As primitivas oferecidas
668 pela fila são simples:
670 \begin{itemize}
671 \item \texttt{create(queueId)}, gera um ponto de conexão associado à
672 fila.
673 \item \texttt{getProcessId()}, retorna o identificador do processo
674 associado ao ponto de conexão.
675 \item \texttt{put(message)}, envia uma mensagem aos participantes da fila.
676 \item \texttt{get()}, recebe a próxima mensagem armazenada na fila.
677 \end{itemize}
679 A \emph{persistência} das mensagens é garantida pela fila e o ponto de
680 conexão que registra as mensagens já entregues. Portanto, no evento de
681 geração de um novo ponto de conexão, o processo vai receber todas as
682 mensagens enviadas pela fila. Esta propriedade, atrativa para o
683 desenvolvedor de aplicações, não se pode implementar efetivamente na
684 prática. Treplica suporta aplicações de grupos estáticos, nos quais os
685 participantes, i.e.\ pontos de conexão, são conhecidos desde o inicio
686 da aplicação e não mudam, mas podem cair e voltar ao sistema,
687 obrigarando o armazenamento permanente de toda a historia das
688 mensagens. A solução é o uso de persistência baseada na
689 fila~\cite{vieira10:implementing-tr} que armazena periodicamente de
690 maneira persistente uma copia do estado atual da aplicação e da fila,
691 i.e.\ \textit{snapshot} e o historial das mensagens já entregues
692 limpado. Este procedimento precisa suporte de parte da aplicação, a
693 qual deve delegar o controle de seu estado à fila através das
694 seguintes duas primitivas adicionais:
696 \begin{itemize}
697 \item \texttt{bind(stateHolder)}, cria uma relação entre o ponto de
698 conexão e o processos, através do \textit{stateHolder}, um
699 componente da aplicação que implementa os métodos
700 \texttt{getState()} e \texttt{setState(state)}.
701 \item \texttt{checkpoint()}, solicita a geração do \textit{snapshot}
702 do estado da aplicação e da fila.
703 \end{itemize}
705 É garantido que os \textit{snapshot} com a seguinte mensagem a ser
706 entregue. No caso que o processo falhe e quede atrasado no progresso
707 do sistema, a copia do estado de outra réplica pode-se utilizar para
708 sua atualização. Ainda em casos que o processo não falha mas fica
709 retrasado, é possível que seu estado seja trocado pelo estado de um
710 processo atualizado. Isto permite, e exige, que a aplicação seja
711 \textit{stateless}.
713 A implementação das filas assíncronas persistentes de Treplica utiliza
714 um algoritmo de \textit{broadcast} de ordem total uniforme baseado em
715 consenso, especificamente Paxos (ver seção~\ref{sec:consenso}) e Fast
716 Paxos~\cite{lamport06a}, uma variante que reduz uma das rondas de
717 comunicação, já que assume que as mensagens são ordenadas naturalmente
718 pelo canal de comunicação. A transição entre ambos algoritmos é
719 transparente ao usuário: em uma configuração de \(N\) réplicas, se
720 pelo menos \(\lceil 3N/4 \rceil\) estão disponíveis, Fast Paxos é
721 utilizado, no caso que pelo menos \(\lfloor 2N/1 \rfloor + 1\) estão
722 disponíveis, o algoritmo escolhido é Paxos; se nenhuma das dois
723 condições é cumprida o sistema é bloqueado até que suficientes
724 processos se recuperem.
726 \section{Proposta de pesquisa}
727 \label{sec:proposta}
728 Pesquisas anteriores~\cite{gray07:empirical,
729 Pinheiro:2007:FTL:1267903.1267905,
730 Schroeder:2007:DFR:1267903.1267904, 10.1109/SRDS.2008.9} mostraram
731 que, na prática, as falhas dos componentes de hardware dos sistemas
732 distribuídos de produção são maiores que as reportadas pelos fabricantes;
733 além disso, erros no software também causam quedas nos processos,
734 portanto, a tolerância a falhas é vital.
736 A proposta de pesquisa foca-se nos sistemas distribuídos de replicação
737 ativa no modelo de máquina de
738 estados~\cite{Schneider:1990:IFS:98163.98167}, com \textit{broadcast}
739 de ordem total uniforme. Os processos têm as seguintes caraterísticas:
740 \begin{inparaenum}[\itshape a\upshape)]
741 \item acesso a memória estável e a memória volátil;
742 \item participação no \textit{broadcast} como remetentes e
743 destinatários, i.e.\ \(\forall p,j \in \Pi~\exists m \in \mathcal{M}
744 (sender(m) = p \wedge j \in Dest(m))\);
745 \item suscetibilidade às falhas de software ou hardware, as quais
746 causam que os processos percam o conteúdo de sua memória volátil e
747 não participem do sistema por um tempo limitado mas desconhecido,
748 depois \textit{recuperam}-se e voltam à atividade.
749 \end{inparaenum}
750 As propriedades da comunicação pelo \textit{broadcast} uniforme,
751 definidas na seção~\ref{sec:broadcast}, que caracterizam o modelo são:
752 \begin{inparaenum}[\itshape a\upshape)]
753 \item o grupo de processos é fechado e estático;
754 \item a sequencia das mensagens é decidida por acordo dos
755 destinatários, utilizando o algoritmo de consenso Paxos.
756 \end{inparaenum}
758 O mecanismo de tolerância a falhas do sistema é fornecido pelo
759 \textit{broadcast} de ordem total uniforme que garanta a entrega
760 ordenada das mensagens, ainda aos processos com falhas. É possível,
761 porém não prático, que sejam armazenadas todas as mensagens enviadas
762 pelo \textit{broadcast} e, no caso de falhas, estas sejam entregues
763 novamente ao processo recuperado. Ao invés, cada nó vai armazenar
764 \textit{checkpoints} em períodos regulais. Não precisasse utilizar
765 protocolos de \textit{checkpoint} distribuídos tais como os
766 apresentados em~\cite{Chandy:1985:DSD:214451.214456,
767 Koo:1986:CRD:324493.325074} já que, a principal motivação do uso
768 deles, é garantir a consistência dos estados armazenados através do
769 sistema, mas neste caso não precisa; o \textit{broadcast} garanta a
770 consistência das mensagens entregues às replicas, e o algoritmo de
771 consenso fornece o mecanismo de coordenação e sincronização dos
772 estados.
774 % \begin{table}[h]
775 % \small
776 % \centering
777 % \begin{tabular}{|l|p{5cm}|l|p{5cm}|}
778 % \hline
779 % \(\Pi\) & Conjunto de processos do sistema. &
780 % \(\Pi_{local}\) & Conjunto de processos que armazenam localmente seus \textit{checkpoints}. \\
781 % \(\Pi_{remote}\) & Conjunto de processos que armazenam remotamente seus \textit{checkpoints}. &
782 % \(\Pi_{storage}\) & Conjunto de processos que armazenam localmente \textit{checkpoints} remotos, além dos próprios. \\
783 % \(\Pi'_{storage}\) & Conjunto de processos externos que armazenam localmente \textit{checkpoints} remotos. &
784 % \(P_{storage}\) & \(\Pi_{storage} \cup \Pi'_{storage}\). \\
785 % \(States_i\) & Conjunto de estados do processo \(p_i\). &
786 % \(S_i(t)\) & Estado do processo \(p_i\) no tempo \(t\). \\
787 % \(\mathcal{M}_b\) & Conjunto das mensagens dos algoritmos (\textit{broadcast} e consenso). &
788 % \(\mathcal{M}_s\) & Conjunto das mensagens de armazenamento dos \textit{checkpoints}. \\
789 % \hline
790 % \end{tabular}
791 % \caption{Notação adicional.}
792 % \label{tab:notacion_proposta}
793 % \end{table}
795 % Vamos definir mais formalmente o sistema; a
796 % tabela~\ref{tab:notacion_proposta} contém o resumo da notação
797 % utilizada adicional à já definida na tabela~\ref{tab:notacao}. Seja
798 % \(\Pi = \{p_1, \ldots, p_n\}\) um conjunto de \(n\) processos que
799 % conformam o sistema, i.e.\ participam do \textit{broadcast} de ordem
800 % total. Cada processo do sistema é modelado como uma máquina de
801 % estados, onde \(States_i\) é o conjunto (não necessariamente finito)
802 % de estados do processo \(p_i\). Seja \(S_i\) uma função de
803 % \(\mathcal{T}\) a \(States_i\), tal que \(S_i(t)\) representa o estado
804 % do processo \(i\) ao tempo \(t\); o estado especial \(\bot\)
805 % representa inatividade, e.g.\ \(S_i(t) = \bot \iff p_i \in F(t)\). Os
806 % processos só mudam de estado pelo intercambio de mensagens \(m \in
807 % \mathcal{M}\), ou pelos eventos de falha e recuperação.
809 Vamos definir mais formalmente o sistema;. Seja \(\Pi = \{p_1, \ldots,
810 p_n\}\) um conjunto de \(n\) processos que conformam o sistema, i.e.\
811 participam do \textit{broadcast} de ordem total. Cada processo do
812 sistema é modelado como uma máquina de estados, onde \(States_i\) é o
813 conjunto (não necessariamente finito) de estados do processo
814 \(p_i\). Seja \(S_i\) uma função de \(\mathcal{T}\) a \(States_i\),
815 tal que \(S_i(t)\) representa o estado do processo \(i\) ao tempo
816 \(t\); o estado especial \(\bot\) representa inatividade, e.g.\
817 \(S_i(t) = \bot \iff p_i \in F(t)\). Os processos só mudam de estado
818 pela troca de mensagens \(m \in \mathcal{M}\), ou pelos eventos
819 de falha e recuperação.
821 O \textit{checkpoint} do processo \(p_i\) no tempo \(t\) é definido
822 como a copia não modificável do estado \(S_i(t)\). A operação que os
823 gera é atômica~\cite{Randell:1978:RIC:356725.356729} e só pode-se
824 executar no tempo \(t\) se \(S_i(t) \neq \bot\). Formalmente, a
825 recuperação, ou reconstrução~\cite{Okun:2002:NSR:829526.831119}, no
826 tempo \(t'\) do processo \(p_i\) é uma operação especial, executável
827 se \(p_i \in F(t')\), que transforma do estado inicial \(S_i(0)\) ao
828 estado \(S_i(t)\) armazenado pelo \textit{checkpoint} gerado no tempo
829 \(t\), tal que \(t'> t\). O procedimento descrito só volta o processo
830 a seu último estado armazenado; a responsabilidade da atualização
831 deste até o estado atual das demais réplicas é delegada ao algoritmo
832 de consenso. Os \textit{checkpoints} são gerados em intervalos
833 regulais.
835 Sejam \(\Pi_{local}\), \(\Pi_{remote}\) e \(\Pi_{storage}\), três
836 subconjuntos disjuntos do \(\Pi\) tais que sua união é igual a
837 este. Se \(p \in \Pi_{local}\), o processo \(p\) armazena seus
838 \textit{checkpoints} em sua memoria estável local. Se \(p \in
839 \Pi_{remote}\), o processo \(p\) delega a responsabilidade do
840 armazenamento a outros processos, enviando-lhes os
841 \textit{checkpoints}. Se \(p \in \Pi_{storage}\), o processo \(p\)
842 armazena seus \textit{checkpoints} em sua memoria estável local, além
843 de armazenar \textit{checkpoints} de processos remotos em suas duas
844 memórias: a estável e a volátil. Além dos processos já definidos,
845 existem um conjunto de processos \(\Pi'_{storage}\) que não participam
846 do \textit{broadcast} de ordem total, e portanto não são replicas do
847 sistema, i.e.\ \(\Pi_{storage} \cap \Pi = \emptyset\): se \(p \in
848 \Pi'_{storage}\), o processo \(p\) é um repositório, e tem a única
849 função de armazenar \textit{checkpoints} de processos remotos em suas
850 duas memorias: a estável é a volátil. Existe uma relação entre os
851 processos que delegam o armazenamento de seus \textit{checkpoints},
852 \(\Pi_{remote}\), e aqueles que assumem a responsabilidade,
853 representados pelo conjunto de processos \(P_{storage} = \Pi_{storage}
854 \cup \Pi'_{storage}\)~: seja \(Store\) uma relação de \(\Pi_{remote}\)
855 a \(2^{P_{storage}}\), tal que \(Store(p)\) representa o conjunto de
856 processos em \(P_{storage}\) que armazenam os \textit{checkpoints} de
857 \(p\); diz-se que \(j\) é um \textit{store} de \(p\) se somente se \(j
858 \in Store(p)\). Todos os processos de armazenamento devem de ser o
859 \textit{store} de pelo menos um processo remoto, i.e.\ \(\forall j \in
860 P_{storage} \exists p \in \Pi_{remote} (j \in Store(p))\), e todo
861 processo remoto tem que armazenar seus \textit{checkpoints} em pelo
862 menos um \textit{store}, i.e.\ \(\forall p \in \Pi_{remote} (Store(p)
863 \neq \emptyset)\).
865 As mensagens válidas são de dois classes: sejam \(\mathcal{M}_b\) e
866 \(\mathcal{M}_s\) dois subconjuntos disjuntos de \(\mathcal{M}\), tais
867 que \(\mathcal{M}_b \cap \mathcal{M}_s = \emptyset \wedge
868 \mathcal{M}_b \cup \mathcal{M}_s = \mathcal{M}\). \(\mathcal{M}_b\) é
869 o conjunto de todas as mensagens válidas do sistema que estão
870 relacionadas com o progresso dos algoritmos de consenso e de
871 \textit{broadcast} de ordem total uniforme; os remetentes e
872 destinatários destas mensagens são processos que participam do
873 consenso, i.e.\ \(\forall m \in \mathcal{M}_b (sender(m) \in \Pi \wedge
874 Dest(m) \subseteq \Pi)\). \(\mathcal{M}_s\) é o conjunto de todas as
875 mensagens válidas do sistema que transmitem valores de
876 \textit{checkpoint} entre os processos que participam do armazenamento
877 remoto de dados, i.e.\ \(\forall m \in \mathcal{M}_s(sender(m) \in
878 (\Pi_{remote} \cup P_{storage}) \wedge Dest(m) \in (\Pi_{remote} \cup
879 P_{storage}))\).
881 \begin{figure}[h]
882 \centering
883 \includegraphics[width=120mm]{images/system_arch}
884 \caption{Arquitetura do sistema}
885 \label{fig:arquitetura}
886 \end{figure}
888 O objetivo desta pesquisa é encontrar a melhor configuração em termos
889 de desempenho num sistema com as caraterísticas descritas na
890 figura~\ref{fig:arquitetura}. As medidas de desempenho utilizadas são:
891 \begin{inparaenum}[\itshape a\upshape)]
892 \item \textit{disponibilidade}, ratio entre o tempo que a aplicação
893 está operacional e o tempo total de execução;
894 \item \textit{desempenho}, é o ratio entre o desempenho promédio da
895 aplicação (AWIPS) durante o período sem falhas e o desempenho
896 promédio durante o período de recuperação; está medida quantifica o
897 impacto das falhas no desempenho da aplicação;
898 \end{inparaenum}
900 As possíveis configurações do sistema são:
902 \begin{itemize}
903 \item \(\Pi_{local} = \Pi\), está é a configuração atual de
904 Treplica. Todos os processo armazenam seus \textit{checkpoints},
905 portanto o custo de recuperação do estado é dominado pela latência
906 da memoria estável, e o procedimento não gera tráfego de rede ou
907 carga adicional aos nós vizinhos\footnote{É claro que a falha de um
908 processo vai gerar uma carga de trabalho adicional aos demais
909 membro do sistema, devido à redistribuição de tarefas, mas é
910 considerado um custo inerente ao modelo e portanto não considerado
911 nos cálculos.}
912 \item \(\Pi_{local} \neq \emptyset \wedge \Pi_{remoto} \neq \emptyset
913 \wedge \Pi_{storage} \neq \emptyset \wedge \Pi'_{storage} =
914 \emptyset \), alguns processos armazenam seus estados em processos
915 remotos que participam do \textit{broadcast}, portanto o custo de recuperação
916 desses processos é dominado pela latência de rede, e o procedimento
917 gera tráfego de rede e carga adicional aos vizinhos, mas é uma
918 quantidade limitada aos processos que utilizam armazenamento remoto.
919 \item \(\Pi_{local} \neq \emptyset \wedge \Pi_{remoto} \neq \emptyset
920 \wedge \Pi_{storage} \neq \emptyset \wedge \Pi'_{storage} \neq
921 \emptyset \), alguns processos armazenam seus estados em processos
922 remotos que participam ou não do \textit{broadcast}, portanto o custo de
923 recuperação desses processos é dominado pela latência de rede, e o
924 procedimento gera tráfego de rede e carga adicional aos vizinhos,
925 mas é uma quantidade menor à opção anterior, já que o tráfego e a
926 carga gerados aos nós repositório não tem impacto sobre o desempenho do
927 sistema.
928 \item \(\Pi_{local} \neq \emptyset \wedge \Pi_{remoto} \neq \emptyset
929 \wedge \Pi_{storage} = \emptyset \wedge \Pi'_{storage} \neq
930 \emptyset \), alguns processos armazenam seus estados em processos remotos
931 que não participam do \textit{broadcast}, portanto o custo de recuperação
932 desses processos é dominado pela latência de rede, e o procedimento
933 não gera tráfego de rede ou carga adicional aos vizinhos.
934 \item \(\Pi_{local} = \emptyset \wedge \Pi_{remoto} \neq \emptyset
935 \wedge \Pi_{storage} \neq \emptyset \wedge \Pi'_{storage} =
936 \emptyset \), todos os processos armazenam seus estados em processos
937 remotos que participam do \textit{broadcast}, portanto o custo de recuperação
938 está dominado pela latência de rede, e o procedimento gera tráfego
939 de rede e carga adicional aos vizinhos.
940 \item \(\Pi_{local} = \emptyset \wedge \Pi_{remoto} \neq \emptyset
941 \wedge \Pi_{storage} \neq \emptyset \wedge \Pi'_{storage} \neq
942 \emptyset \), todos os processos armazenam seus estados em processos
943 remotos que participam ou não do \textit{broadcast}, portanto o
944 custo de recuperação está dominado pela latência de rede, e o
945 procedimento gera tráfego de rede e carga adicional aos vizinhos,
946 mas é uma quantidade menor à proposta anterior.
947 \item \(\Pi_{local} = \emptyset \wedge \Pi_{remoto} \neq \emptyset
948 \wedge \Pi_{storage} = \emptyset \wedge \Pi'_{storage} \neq
949 \emptyset \), todos os processos armazenam seus estados em processos
950 remotos que não participam do \textit{broadcast}, portanto o custo
951 de recuperação está dominado pela latência de rede, e o procedimento
952 não gera tráfego de rede ou carga adicional aos vizinhos.
953 \end{itemize}
955 A avaliação das opções tem que considerar não só a melhor opção, senão
956 qual é a proporção de cada conjunto de processo que gera o resulta
957 mais ótimo. Um aspecto importante a considerar se é o desempenho das
958 soluções sobre as distintas classes de processos em relação as falhas:
959 ativo, eventualmente ativo, eventualmente inativo e instável (ver
960 seção~\ref{sec:notacao}).
962 % LAS TECNICAS PROPUESTAS TAMBIEN HAN SIDO HECHAS PARA EL AMBIENTE
963 % HPC. [ver paper de Bautista Gomez] REVISAR ARTICULO DE ISLENE
965 % As alternativas a avaliar são as seguintes:
967 % % hay que tener en consideracion que en este caso no se asume las
968 % % fallas de disco dentro de la evaluacion. El metodo necesario para
969 % % soportar esa situacion seria, por ejemplo, el uso de un sistema de
970 % % archivos distribuido con replicacion, como hdfs. Aunque el impacto
971 % % sobre el desempenho del sistema no es, necesariamente, despreciable,
972 % % puede asumirse que afecta de manera uniforme a todos los nodos del
973 % % sistema que utilizan la memoria estable.
976 \section{Metodologia Científica}
977 \label{sec:metodologia}
979 O trabalho divide-se em duas fases. Na primeira, sob o método de
980 comparação (formal), será realizada uma avaliação de diversas soluções
981 de problemas similares propostas na literatura, por exemplo no
982 trabalho de Menderico e Garcia~\cite{10.1109/SRDS.2010.17}, tomando em
983 conta as caraterísticas proprias de um sistema de replicação ativa com
984 comunicação de \textit{broadcast} de ordem total, no qual não é
985 necessario um protocolo distribuído de \textit{checkpoint}.
987 Na segunda fase, codificaremos o sub-sistema de armazenamento remoto
988 compararemos experimentalmente o seu desempenho em distintas
989 configurações. Durante essa fase os experimentos serão realizados com
990 o mesmo método experimental e com as duas aplicações já implementadas
991 para testar Treplica: um benchmark TPC-W e um hash
992 replicado~\cite{buzato09}. As medidas de interesse são
993 disponibilidade, desempenho e tempo de recuperação~\cite{buzato09}.
995 \subsection{Tarefas e cronograma}
996 \label{sec:planodetrabalho}
998 Esta seção detalha as tarefas planejadas para o desenvolvimento do
999 Mestrado e o cronograma proposto (Tabela~\ref{projtimetable}):
1001 \begin{enumerate}
1002 \addtolength{\itemsep}{-0.35\baselineskip}
1004 % Ago-Julho 2010
1005 \item \label{t1} Créditos em disciplinas
1007 % Abril-Julho 2010
1008 \item \label{t2} Revisão bibliográfica
1010 % Maio-Ago 2010
1011 \item \label{t3} Estudo dirigido
1013 % Jul-Ago 2010
1014 \item \label{t4} Elaboração do projeto de mestrado
1016 % Ago 2010 - Jul 2011
1017 \item \label{t5} Estudo comparativo de algoritmos
1019 % Jan 2011 - Dez 2011
1020 \item \label{t6} Proposta, análise e prova de algoritmos.
1022 % Dez 2011 - Dez 2011
1023 \item \label{t7} Implementação da solução sobre a plataforma
1024 Tréplica~\cite{vieira08:_trepl}. Testes de desempenho da solução com
1025 diversas cargas de trabalho, tanto na presença como na ausência de
1026 falhas de processos.
1028 % Mai 2011 - Jan 2012
1029 \item \label{t8} Escrita da Dissertação de Mestrado
1031 % Fev 2012 - Mar 2012
1032 \item \label{t9} Defesa da Dissertação de Mestrado
1034 % Dez 2010 - Mar 2012
1035 \item \label{t10} Escrita e submissão de artigos para publicação
1037 \end{enumerate}
1039 \begin{table}[h]
1040 \begin{center}
1041 \setlength{\tabcolsep}{1.5pt}
1042 \begin{tabular}{|l|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|} \hline
1043 & \multicolumn{5}{c|}{\scriptsize 2010} & \multicolumn{12}{c|}{\scriptsize 2011} & \multicolumn{7}{c|}{\scriptsize 2012} \\ \cline{2-25}
1044 {\small Tarefas } &
1045 \rotatebox{90}{\scriptsize ago } &
1046 \rotatebox{90}{\scriptsize set } &
1047 \rotatebox{90}{\scriptsize out } &
1048 \rotatebox{90}{\scriptsize nov } &
1049 \rotatebox{90}{\scriptsize dez } &
1050 \rotatebox{90}{\scriptsize jan } &
1051 \rotatebox{90}{\scriptsize fev } &
1052 \rotatebox{90}{\scriptsize mar } &
1053 \rotatebox{90}{\scriptsize abr } &
1054 \rotatebox{90}{\scriptsize mai } &
1055 \rotatebox{90}{\scriptsize jun } &
1056 \rotatebox{90}{\scriptsize jul } &
1057 \rotatebox{90}{\scriptsize ago } &
1058 \rotatebox{90}{\scriptsize set } &
1059 \rotatebox{90}{\scriptsize out } &
1060 \rotatebox{90}{\scriptsize nov } &
1061 \rotatebox{90}{\scriptsize dez } &
1062 \rotatebox{90}{\scriptsize jan } &
1063 \rotatebox{90}{\scriptsize fev } &
1064 \rotatebox{90}{\scriptsize mar } &
1065 \rotatebox{90}{\scriptsize abr } &
1066 \rotatebox{90}{\scriptsize mai } &
1067 \rotatebox{90}{\scriptsize jun } &
1068 \rotatebox{90}{\scriptsize jul } \\ \hline
1070 \quad\ref{t1} & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & & & & & & & & & & & & & \\ \hline
1071 \quad\ref{t2} & & \f & \f & \f & \f & \f & \f & & & & & & & & & & & & & & & & & \\ \hline
1072 \quad\ref{t3} & & & & \f & \f & \f & \f & & & & & & & & & & & & & & & & & \\ \hline
1073 \quad\ref{t4} & & & & \f & \f & \f & \f & & & & & & & & & & & & & & & & & \\ \hline
1074 \quad\ref{t5} & & & & & & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & & & & & & & \\ \hline
1075 \quad\ref{t6} & & & & & & & & & & & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & & \\ \hline
1076 \quad\ref{t7} & & & & & & & & & & & & & & & & & \f & \f & \f & \f & \f & \f & & \\ \hline
1077 \quad\ref{t8} & & & & & & & & & & & & & & & \f & \f & \f & \f & \f & \f & \f & \f & \f & \\ \hline
1078 \quad\ref{t9} & & & & & & & & & & & & & & & & & & & & & & & \f & \f \\ \hline
1079 \quad\ref{t10} & & & & & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f \\ \hline
1080 \end{tabular}
1081 \caption{Cronograma do projeto}
1082 \label{projtimetable}
1083 \end{center}
1084 \end{table}
1087 \begin{small}
1088 \phantomsection
1089 \addcontentsline{toc}{section}{\bibname}
1090 \bibliographystyle{plain}
1091 \bibliography{mscMonografia,bibliography}
1092 \end{small}
1094 \end{document}