Abstract done
[mymsc.git] / mscMonografia.tex
blob9df49a39a139be8dce22e4c4a62f6cd5d2ead60d
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[utf8]{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}{Título do Trabalho de Mestrado} %PT
17 \newcommand{\f}{$\blacksquare$}
19 \hypersetup{
20 pdftitle={\mytitle},
21 pdfauthor={Rodrigo Eduardo Lazo Paz},
22 pdfdisplaydoctitle=true,
23 pdfborder=0 0 0
26 \title{\mytitle}
28 \author{
29 Rodrigo Eduardo Lazo Paz\\%\thanks{Grants.} \\
30 IC, Unicamp \\
31 Campinas, Brasil \\
32 {\small \url{rodrigo.lazo@students.ic.unicamp.br}} \\
33 \and
34 Luiz E. Buzato \\ %\thanks{Identificação de projetos aqui.}\\
35 IC, Unicamp \\ Campinas, Brasil \\ {\small
36 \url{buzato@ic.unicamp.br}}
39 \hyphenation{par-ti-cu-lar-men-te}
40 \hyphenation{su-fi-ci-en-tes}
42 \begin{document}
43 \doublespacing
45 \maketitle
47 \begin{abstract}
48 \noindent A demanda atual por serviços fornecidos pela Internet, com
49 a promessa de ubiquidade de aceso físico e temporal à informação, é
50 enorme; ainda em redes privadas restringidas a uma organização, o
51 volume de informação vital centralizada em serviços compartilhados
52 vai em aumento. Ambos cenários tem em comum a necessidade de
53 aplicações escaláveis e altamente disponíveis. Os sistemas
54 distribuídos replicados, tolerantes a falhas, são uma solução;
55 nestos, os processos podem cair, e sua carga de trabalho se
56 distribuir aos demais até que voltem, mantendo a aplicação
57 disponível durante o tempo todo. Porém, dependendo do tráfego, o
58 desempenho pode-se degradar notavelmente. Portanto, é fundamental
59 reduzir ao mínimo o tempo da recuperação. O armazenamento da
60 informação requerida na memoria volátil de processos remotos é uma
61 alternativa atrativa, de melhor desempenho ao uso da memoria estável
62 local, mas sacrifica-se a persistência dos dados. Neste sentido, no
63 presente projeto propomos a avaliação minuciosa de múltiplas
64 configurações de sistemas distribuídos replicados com armazenamento
65 híbrido, tal que minimize-se o uso de dispositivos de armazenamento
66 de alta latência durante o procedimento de recuperação sem
67 sacrificar a consistência. \todo[noline]{Includir implementação do
68 detetor de falhas do aguilera?}Os resultados serão aplicados na
69 melhora da biblioteca de replicação para a construção de aplicações
70 de alta disponibilidade Tréplica, desenvolvida no Laboratório de
71 Sistemas Distribuídos do Instituto de Computação da Universidade
72 Estadual de Campinas.
74 \end{abstract}
76 \newpage
78 \section{Introdução}
79 \label{sec:introduction}
81 Algoritmos distribuídos são aqueles desenhados para se executar em
82 sistemas compostos por um conjunto interconectado de processos
83 autônomos que intercambiam informação. O progresso do algoritmo
84 depende de dois elementos: o progresso individual de cada um dos
85 processos, e a troca de informação entre eles. Os distintos modelos,
86 i.e.\ presunções, que descrevem características específicas desses
87 elementos no sistema são:
89 \begin{itemize}
90 \item \textit{Modelo de intercomunicação dos processos}, que pode-se
91 realizar através da troca de mensagens (enviando mensagens
92 ponto-a-ponto ou um-para-varios, além de se classificar pelo ordem de
93 entrega, dependendo se mantem o ordem de envio, i.e.\ FIFO, ou não),
94 ou memoria compartilhada (escrevendo e lendo de variáveis comuns).
95 \item \textit{Modelo temporal}, o qual distingue três possibilidades:
96 \begin{inparaenum} [\itshape a\upshape)]
97 \item sistemas síncronos, onde todos os processos executam cada
98 passo do algoritmo simultaneamente e o tempo de demora é
99 conhecido;
100 \item sistemas assíncronos, onde cada um dos processos pode tomar
101 uma quantidade indeterminada de tempo para executar cada passo do
102 algoritmo;
103 \item sistemas parcialmente síncronos, onde é possivel fazer algumas
104 presunções sobre o tempo de demora de algumas operações, mas não
105 se garante que os processos executam simultaneamente os passo do
106 algoritmo.
107 \end{inparaenum}
108 %inparablank?
109 \item \textit{Modelo de falhas}, os processo do sistema podem falhar
110 de distintas maneiras, as quais podem se classificar em:
111 \textit{falha-e-para}, onde o processo falha e deixa de participar
112 do sistema; \textit{falha-e-recuperação}, onde o processo falha,
113 mas, em algum momento no futuro, volta ao sistema; \textit{falha de
114 omissão}, onde o processo não realiza algumas ações
115 arbitrariamente, e.g.\ enviar uma mensagem; e \textit{falha
116 bizantina} onde o comportamento do processo é aleatório. Além dos
117 processos, os canais de comunicação tambem podem apresentar falhas
118 por exemplo, no caso da comunicação por envio de mensagens, perder,
119 duplicar ou corromper as mensagens.
120 \end{itemize}
122 É claro que, as distintas combinações dos modelos apresentados, da
123 lugar a uma multiplicidade de ambientes muito amplia e, portanto, não
124 é possivel, ou ao menos prático, desenhar algoritmos distribuídos que
125 sejam capaceis de se executar em quaisquer modelo; é por isso que
126 somente pode se evaluar a correção dos algoritmos se suas presunções
127 sobre o sistema são válidas. Por exemplo, um algoritmo desenhado para um
128 sistema de memoria compartilhada, síncrono e sem falhas não vai
129 funcionar, ainda seja correto, se o sistema é assíncrono, utiliza
130 troca de mensagens ponto-a-ponto é apresenta falhas bizantinas.
132 Os modelos supostos pelo algoritmo vão a definir as caraterísticas do
133 sistema, portanto, se são muito restritivos, a aplicabilidade do
134 algoritmo é menor. Aqueles modelos que possuam condições mais estritas
135 fazem o desenvolvimento e as provas de correção dos algoritmos mais
136 simples, já que eles garantem comportamentos mais predecibles; mas,
137 construir um sistema que cumpra aquelas condições fortes é muito
138 complexo ou altamente custoso, além de não ser possível algumas
139 vezes. Portanto, a eleição de modelos mais relaxados é preferível,
140 embora introduzam uma maior complexidade, eles apresentam condições
141 mais próximas das alcançáveis na realidade.
143 Os algoritmos no modelo temporal assíncrono não dependem do tempo para
144 a sua correção é, portanto, são preferíveis, já que na prática esta
145 caraterística temporal é introduzida pelas variações no desempenho do
146 sistema~\cite{Chandra:1996:WFD:234533.234549}. Além da assincronia, a
147 tolerância a falhas é outra caraterística importante, já que, seja por
148 erros no software ou por falhas do hardware, elas vão acontecer. A
149 dificuldade da assincronia com falhas de processo é que existem
150 problemas solucionáveis em outros modelos que não são resolvíeis,
151 e.g.\ consenso no modelo síncrono~\cite{dwork88}. Nestos casos, uma
152 solução pode-se alcançar só se os requerimentos de correção são
153 debilitados, o modelo é fortalecido, ou
154 ambos\cite{Lynch:1996:DA:525656}.
156 Os detetores de falhas são, informalmente, módulos distribuídos que
157 fornecem informação (não necessariamente correta) sobre o estado atual
158 dos processos no sistema, i.e.\ quais são suspeitos de estar
159 inativos. Os detetores acrescentam o modelo assíncrono, possibilitando
160 a solução de problemas como o problema de consenso
161 distribuído~\cite{Chandra:1996:UFD:226643.226647}.
163 No modelo de \textit{falha-e-recuperação} os processos podem voltar ao
164 sistema e, portanto, precisam de armazenar, com segurança, suficiente
165 informação para voltar a seu estado anterior se uma falha acontecer;
166 no caso contrario, se fossem amnésicos, pode-se argumentar que um
167 processo em recuperação é indistinguível de um processo novo,
168 i.e.\ \textit{falha-e-para}.
170 Os processos só podem armazenar, de maneira persistente, os dados
171 necessária para se recuperar em dois lugares: localmente, em sua
172 memoria estável, e remotamente, em outro processo. No primeiro caso, o
173 custo é determinado pela latência do disco; no segundo caso, é
174 determinado pela latência da rede mais o custo do aceso à informação,
175 i.e.\ memoria volátil ou memoria estável. Neste contexto, a nossa
176 questão de pequisa é a seguente:
178 \begin{quotation}
179 \noindent \textit{Qual é o método, ou combinação de métodos, de
180 armazenamento e obtenção da informação necessaria para a
181 recuperção dos processos após falhas com melhor desempenho e menor
182 impacto no sistema?}\todo{pergunta correta?}
183 \end{quotation}
185 A recuperação é um procedimento que volta o estado de um processo que
186 falhou, a um estado anterior à falha. Os dados que permitem aquela
187 operação, normalmente uma copia do estado anterior, são chamados de
188 \textit{checkpoints}~\cite{Randell:1978:RIC:356725.356729}. Os
189 processos precisam ter \textit{checkpoints} regulais, i.e.\ armazenar
190 os dados de maneira persistente, portanto, o custo da solução
191 escolhida, tem um impacto no sistema ainda durante os períodos sem
192 falhas. Além disso, tem se que considerar a robustez: se a informação
193 é armazenada só na memoria volátil do sistema, não pode-se suportar
194 uma falha massiva dos processos. Portanto, a adequação da escolha
195 depende dos cenários assumidos.
197 O restante do projeto é organizado da seguinte forma. A próxima seção
198 contextualiza este projeto dentro da pesquisa já realizada no
199 Laboratório de Sistemas Distribuídos sobre replicação ativa. A
200 seção~\ref{sec:teoria} apresenta os fundamentos sobre modelos
201 computacionais para algoritmos distribuídos, com ênfase no aspecto
202 temporal da computação distribuída. A seção~\ref{sec:treplica}
203 apresenta a plataforma empregada para testes e a avaliação das
204 variações de Paxos e Fast Paxos elaboradas, denominada Treplica. Na
205 seção~\ref{sec:proposta} são discutidos, ainda em caráter inicial, os
206 argumentos que dão sustentação ao nosso projeto, assim como os modelos
207 que podem ser empregados para ajudar na resposta da nossa pergunta de
208 pesquisa. Finalmente, a seção~\ref{sec:metodologia} apresenta
209 concisamente a metodologia de pesquisa, as etapas a serem cumpridas no
210 projeto e o seu respectivo conograma. \todo[noline]{corregir
211 referencias na versão final}
213 \section{Contexto da Pesquisa}
214 \label{sec:contexto}
215 \todo{Que conteudo é adequado? trabalhos relacionados?}
217 \section{Fundamentação Teórica}
218 \label{sec:teoria}
219 Fornecer um serviço altamente disponível empregando múltiplos
220 processos replicados é uma técnica bem
221 conhecida~\cite{Schneider:1990:IFS:98163.98167}. Existem duas formas
222 de replicação: a ativa, ou de máquina de
223 estados~\cite{lamport1978implementation}, onde todos os processos
224 recebem e executam as mesmas solicitações, no mesmo ordem; e a
225 passiva, onde um único processo recebe todas as solicitações, as
226 aplica localmente, e depois seu estado é copiado pelas demais
227 réplicas. Um dos métodos mais utilizados para a implementação da
228 replicação ativa é a aplicação de algoritmos de
229 consenso~\cite{Lamport:1998:PP:279227.279229,
230 Schneider:1990:IFS:98163.98167,Oki:1988:VRN:62546.62549}.
232 Nesta seção discute-se a fundamentação teórica da solução de
233 replicação ativa, baseada em consenso com processos que podem falhar e
234 voltar ao sistema, sobre a qual nossa proposta de pesquisa é
235 desenvolvida. \todo{paragrafo ok?}
237 \subsection{Modelo do sistema e notação}
238 \label{sec:notacao}
239 O modelo suposto neste trabalho é assíncrono, portanto não existe
240 presunção nenhuma acerca do tempo de demora da comunicação e do
241 processamento. Todos os processos no sistema estão conectados, e a
242 comunicação é através de mensagens, os quais podem se perder durante o
243 envio. Os processos podem falhar e voltar ao sistema depois. Após
244 falhar, os processos perdem seu estado atual, mas eles podem armazenar,
245 em sua memoria estável, informação de recuperação.
247 \begin{table}[h]
248 \small
249 \centering
250 \begin{tabular}{|l|p{5cm}|l|p{5cm}|}
251 \hline
252 \(\Pi\) & Conjunto de processos. &
253 \(\mathcal{M}\) & Conjunto de mensagens. \\
254 \(sender(m)\) & Processo remitente de \(m\). &
255 \(Dest(m)\) & Conjunto destinatario de \(m\). \\
256 \(\Pi_{sender}\) & Conjunto de processos que podem enviar mensagens. &
257 \(\Pi_{dest}\) & Conjunto de processos que podem receber mensagens. \\
258 \(\mathcal{T}\) & Relógio global. &
259 \(F(t)\) & Conjunto de processos caidos no tempo \(t\). \\
260 \(Bom(F)\) & Conjunto de processos bons (em F). &
261 \(Ruim(F)\) & Conjunto de processos ruins (em F). \\
262 \textit{Instável}\((F)\) & Conjunto de processos instáveis (em F).& & \\
263 \hline
264 \end{tabular}
265 \caption{Notação}
266 \label{tab:notacao}
267 \end{table}
269 Neste trabalho vamos a seguir a notação utilizada por Défago, Schiper
270 e Úrban~\cite{Defago:2004}, a qual está resumida na
271 tabela~\ref{tab:notacao}. Seja \(\Pi = \{P_1, \ldots, P_n\}\) um
272 conjunto de \(n\) processos que conformam o sistema. A comunicação é
273 baseado no envio de mensagens, onde \(\mathcal{M}\) é o conjunto de
274 mensagens válidos, \(sender(m) \in \Pi \) designa o processo
275 originador do mensagem \(m\) e \(Dest(m) \subseteq \Pi \) é o conjunto
276 de processos não vazio ao qual o mensagem \(m\) e enviado. Além disso,
277 seja \(\Pi_{sender}\) o conjunto de todos os processos que podem
278 enviar uma mensagem válida \(m \in \mathcal{M}\), e seja \(\Pi_{dest}
279 \stackrel{\mathrm{def}}{=} \bigcup_{m \in \mathcal{M}} Dest(m)\) o
280 conjunto de destinos possíveis para as mensagens válidas.
282 Para simplifcar a apresentação do modelo, suponhase a existemcia de um
283 relogio discreto global \(\mathcal{T}\) com rango de valores dos
284 números naturais; os processos não têm conhecimento ou contato como
285 ele.
287 A seguinte classificação dos processos em função a seu comportamento
288 de falhas é tomada de Aguilera, Chen e
289 Toueg~\cite{springerlink:aguilera98}. Seja \(F\) uma função de
290 \(\mathcal{T}\) a \(2^\Pi\), tal que \(F(t)\) representa o conjunto
291 dos processos que não estão presentes no sistema no tempo \(t\). Um
292 processo está \textit{ativo no tempo} \(t\) (em \(F\)) se \(p \in
293 F(t)\), e está \textit{inativo no tempo} \(t\) (em \(F\)) no caso
294 contrario. Um processo \textit{cai} no tempo \(t\) se está ativo no
295 tempo \(t-1\) e inativo no tempo \(t\)\footnote{Um processo
296 \textit{cai} no tempo \(t=0\) se está inativo no tempo \(t=0\) }. Um
297 processo se \textit{recupera} no tempo \(t\) se está inativo no tempo
298 \(t-1\) e está ativo no tempo \(t\). Os processos podem se classificar
299 (de acordo com \(F\)) como:
301 \begin{itemize}
302 \item \textit{Sempre Ativo}: O processo \(p\) nunca cai.
303 \item \textit{Eventualmente Ativo}: O processo caiu pelo menos uma
304 vez, mas após algum momento \(t\), o processo está sempre
305 ativo. \todo[noline]{traduções corretas?}
306 \item \textit{Eventualmente Inativo}: Após algum momento \(t\), o
307 processo é está sempre inativo.
308 \item \textit{Instável}: O processo cai e volta um número infinito de
309 vezes.
310 \end{itemize}
312 Um processo é \textit{bom}\todo{é bom o termo correto?}~(em \(F\)) se
313 é sempre ativo ou eventualmente ativo. Um processo é \textit{ruim} (em
314 \(F\)) se é eventualmente inativo ou instável. Denota-se \(Bom(F)\),
315 \(Ruim(F)\) \todo{é ruim o termo correto?} e \textit{Instável}\((F)\)
316 aos conjuntos de processos (em \(F\)) bons, ruins e instáveis,
317 respetivamente.
319 \subsection{Consenso}
320 \label{sec:consenso}
321 O problema do consenso~\cite{Pease:1980:RAP:322186.322188} é um dos
322 mais fundamentais da área dos algoritmos distribuídos. Considere um
323 conjunto \(\Pi = \{p_1,\ldots,p_n\}\) de \(n\) processos; seja \(V =
324 \{v_1^0, \ldots, v_n^0\}\) o conjunto de estados inicias dos
325 processos, tal que \(v_i^0\) é o valor inicial do processo
326 \(p_i\). Eventualmente cada processo \(p_i\) tem que \textit{decidir}
327 um valor \(decide(p_i) = v_i\), tal que todos os processos corretos
328 concordem neste, e as seguintes propriedades sejam
329 satisfeitas~\cite{springerlink:aguilera98}:
331 \begin{description}
332 \item[Validade uniforme] se um processo decide $v$, então algum
333 processo o propôs, i.e.\ \(\forall p \in \Pi(decide(p) \in V)\).
334 \item[Consenso] Todos os processos \textit{bons} decidem o mesmo
335 valor, i.e.\ \(\exists ! v \in V ~\forall p \in Bom(F) (decide(p_i) = v)\).
336 \todo[noline]{expresões matemáticas corretas?}
337 \item[Terminação] Se todos os processos \textit{bons} propõem um
338 valor, eventualmente um daqueles é escolhido, i.e.\ \(\exists ! v
339 \in V~\forall p \in Bom(F)~\exists T \in \mathcal{T}~\forall t, t' > T
340 (v^0 \in V \wedge t < t' \Rightarrow decide(p) = v)\).
341 \end{description}
343 Existe uma variação mais estrita, o consenso
344 uniforme~\cite{Neiger:1990:AIF:83334.83337}, que impõe restrições às
345 escolhas dos processos \textit{ruins}:
347 \begin{description}
348 \item[Consenso uniforme] Os processos não \textit{decidem} valores
349 distintos, i.e.\ \(\exists ! v \in V ~\forall p \in \Pi (decide(p_i) = v)\).
350 \end{description}
352 No caso síncrono sem falhas, o problema é facilmente
353 resolvible~\cite{Lynch:1996:DA:525656}, porém, o resultado de
354 impossibilidade obtido por Fischer, Lynch e Patterson~\cite{fischer85}
355 mostra que o problema não pode-se resolver de maneira determinista num
356 sistema distribuído assíncrono com apenas um processo falho. Existem
357 distintas soluções propostas: o uso de randomização~\cite{Chor89},
358 definição de problemas mais débeis e suas soluções~\cite{dolev87},
359 detetores de falhas não
360 confiáveis~\cite{Chandra:1996:WFD:234533.234549,
361 Chandra:1996:UFD:226643.226647}, etc.
363 \paragraph{Algoritmo de consenso Paxos}
364 O algoritmo de consenso Paxos, originalmente proposto por
365 Lamport~\cite{Lamport:1998:PP:279227.279229}, é um dos mais utilizados
366 na prática~\cite{Burrows:2006:CLS:1298455.1298487,
367 Camargos:2007:SMH:1272998.1273036,
368 MacCormick:2004:BAF:1251254.1251262,
369 Saito:2004:FBD:1024393.1024400}. Neste algoritmo, os processos podem
370 assumir um o mais dos seguintes papéis:
371 \begin{inparaenum}[\itshape a\upshape)]
372 \item \textit{proponente}, que propor valores;
373 \item \textit{receptor}, que escolhe um único valor; e
374 \item \textit{aprendiz}, que aprende o valor escolhido.
375 \end{inparaenum}
376 O algoritmo pode precisar uma ou varias rodadas para alcançar o
377 consenso, cada uma identificada pelo número de rodada \(r\). No começo
378 de cada rodada os proponentes eligem um coordenador, o qual avalia se
379 a maioria \(\lfloor n/2 \rfloor +1\) dos \(n\) receptores participou
380 da rodada anterior \(r-1\), e, portanto, o consenso foi alcançado. No
381 caso contrario, o algoritmo continua em duas fases com dois passos
382 cada um:
384 \begin{itemize}
385 \item \textit{Fase 1a}, o coordenador invita aos receptores a
386 participar da rodada \(r\), os quais aceitam somente se não
387 participam de uma rodada \(r' \geq r\). A partir desse momento, os
388 receptores que aceitaram o convite \textit{prometem} não participar
389 em outra rodada menor, \(r'' < r\).
390 \item \textit{Fase 1b}, os receptores que aceitaram o convite enviam
391 ao coordenador o valor da última proposta que votaram e o número de
392 rodada na qual aquelo aconteceu, ou \textit{nulo} no caso contrario.
393 \item \textit{Fase 2a}, se suficientes respostas forem recebidas pelo
394 coordenador dos receptores, \(\lfloor n/2 \rfloor +1\), ele escolhe
395 dentro dos valores retornados um que poderia ter sido
396 \textit{decidido} em uma rodada \(r' < r\), ou no caso seja
397 \textit{nulo}, ele escolhe a proposta feita pelos proponentes. Logo,
398 ele pede aos receptores que votem na proposta escolhida.
399 \item \textit{Fase 2b}, após receber o pedido de votar do coordenador,
400 e sempre que não houveram \textit{prometido} participar na rodada
401 \(r\), os receptores votam enviando o número de rodada \(r\) e o
402 valor aos aprendizes.
403 \item O consenso é alcançado no momento que suficientes receptores,
404 \(\lfloor n/2 \rfloor +1\), votam na fase 2b.
405 \end{itemize}
407 \todo[noline]{Multipaxos? Fast Paxos? devo incluir?}Uma caraterística
408 interessante do Paxos é que sua tolerância a falhas fundamenta-se no
409 uso de \textit{quorum} de processos, e não no conhecimento do estado
410 atual dos outros processos, como no caso dos detetores de falhas. O
411 algoritmo garante que se um valor é eleito, a escolha não muda,
412 portanto um processo que caiu e volta, pode aprendê-lo. Para que isso
413 aconteça, cada participante do algoritmo tem que armazenar
414 persistentemente as rodadas nas quais ele participou e os valores que
415 votou.
417 \subsection{Broadcast de ordem total}
418 \label{sec:broadcast}
419 % seção muito longa?
420 O \textit{broadcast} de ordem total, ou \textit{broadcast} atômico, é
421 uma primitiva de comunicação assíncrona de alto nível que garanta que
422 as mensagens enviadas a um conjunto de processos sejam recebidas, no
423 mesmo ordem, por os membros todos~\cite{Defago:2004}. O problema é
424 definido formalmente em função de duas primitivas,
425 \textit{TO-broadcast}\((m)\) e \textit{TO-deliver}\((m)\), onde \(m
426 \in \mathcal{M}\) e uma mensagem. Quando um processo \(p\) executa
427 \textit{TO-broadcast}\((m)\) (respectivamente,
428 \textit{TO-deliver}\((m)\)) diz-se que o processo \(p\)
429 \textit{TO-broadcasts} \(m\) (respectivamente, \textit{TO-delivers}
430 \(m\)) \todo{tem se que incluir esta aclaração, não?}. Todas as
431 mensagens têm identificadores únicos, e levam consigo a identidade de
432 seu remetente, denotado \textit{sender}\((m)\). Além disso, supomos
433 que para quaisquer mensagem \(m\), e em quaisquer execução, a chamada
434 \textit{TO-broadcasts}\((m)\) e feita uma vez só. Neste contexto, o
435 \textit{broadcast} de ordem total é definido pelas seguintes
436 propriedades~\cite{Chandra:1996:WFD:234533.234549,hadzilacos94}:
438 \begin{itemize}
439 \item \textit{Validade} Se um processo bom \textit{TO-broadcasts} a
440 mensagen \(m\), então ele eventualmente \textit{TO-delivers} \(m\).
441 \item \textit{Acordo uniforme} Se um processo \textit{TO-delivers} uma
442 mensagem \(m\), então todos os processos bons eventualmente
443 \textit{TO-deliver} \(m\).
444 \item \textit{Integridade uniforme} Para quaisquer mensagem \(m\),
445 cada processo \textit{TO-delivers} \(m\) no máximo uma vez, se
446 somente se \(m\) foi \textit{TO-broadcast} por
447 \textit{sender}\((m)\) anteriormente.
448 \item \textit{Ordem total uniforme} Se os processos \(p\) e \(q\)
449 \textit{TO-deliver} as mensagens \(m\) e \(m'\), então \(p\)
450 \textit{TO-delivers} \(m\) antes de \(m'\), se somente se \(q\)
451 \textit{TO-delivers}\(m\) antes de \(m'\).
452 \end{itemize}
454 Se a primitiva de comunicação não satisfaz todas ordem total uniforme,
455 portanto não garanta ordem nenhum, e chamada \textit{broadcast} confiável. No
456 caso que a primitiva cumpra todas as propriedades prévias, é chamada
457 uniforme, i.e.\ impõe restrições ao comportamento de todos os
458 processos, bons e ruins; mas se as propriedades de acordo e
459 integridade são não uniformes, elas só se aplica aos processos
460 bons. \todo{e preciso incluir as definições das propriedades não
461 uniformes?}
463 % Não gosto do paragrafo, é uma simples enumeração, não é muito
464 % legível.
465 A relação entre o conjunto destino das mensagens enviadas pelo
466 \textit{broadcast} de ordem total e o conjunto de processos do
467 sistema, gera a seguinte classificação:
468 \begin{inparaenum}[\itshape a\upshape)]
469 \item Se o conjunto destino é igual ao total dos processos no sistema,
470 i.e \(\forall m \in \mathcal{M} (Dest(m) = \Pi)\), a primitiva e
471 chamada de \textit{broadcast};
472 \item Se o conjunto destino e um subconjunto dos processos, onde
473 distintas mensagens têm distintos conjuntos destinos e o remetente
474 pode não ser destinatario, i.e.\ \(\exists m \in \mathcal{M}
475 (sender(m) \notin Dest(m)) \wedge \exists m_i,m_j \in \mathcal{M}
476 (Dest(m_i) \neq Dest(m_j))\), a primitiva e chamada de multicast.
477 \end{inparaenum}
478 Além da distinção anterior, a presença do remetente no conjunto
479 destino, gera uma classificação adicional:
480 \begin{inparaenum}[\itshape a\upshape)]
481 \item Se o remitente é membro dos destinatários, i.e.\ \(\forall m \in
482 \mathcal{M} (sender(m) \in Dest(m))\), o grupo é chamado
483 \textit{fechado};
484 \item Se o remitente não precisa pertencer ao grupo destino,
485 i.e.\ \(\exists m \in \mathcal{M}(sender(m) \notin Dest(m))\), o
486 grupo e chamado \textit{aberto}.
487 \end{inparaenum}
489 A conformação do conjunto de processos do sistema não precisa ser
490 fixa. Se os processos podem entrar, sair e ser removidos dele, é
491 chamado de grupo dinâmico, contraposto ao grupo estático no qual os
492 membros não podem mudar durante a execução. Às distintas configurações
493 do grupo ao longo do tempo são chamadas
494 \textit{vistas}~\cite{Chockler:2001:GCS:503112.503113}. A primitiva de
495 comunicação equivalente ao \textit{broadcast} confiável nos grupos
496 dinâmicos é a sincronia de vista, a qual cumpre as mesmas regras de
497 validade, integridade uniforme e uma versão de acordo relaxada aos
498 membros atuais. Uma sincronia de vista que cumpre adicionalmente a
499 propriedade de ordem total é o equivalente ao \textit{broadcast} de
500 ordem total nos grupos estáticos.
502 Existem diversos mecanismos pelos quais pode-se definir a ordem na
503 qual as mensagens debem ser entregues~\cite{Defago:2004} mas, em todos
504 eles, são distinguíveis três papéis que os processos podem assumir:
505 remetente (i.e.\ \(p \in \Pi_{sender}\)), destinatário (i.e.\ \(p \in
506 \Pi_{dest}\)) e o sequenciador, o qual define o ordem de entrega das
507 mensagens. Existem as seguintes cinco classes:
509 \begin{itemize}
510 \item \textit{Sequenciador fixo} Neste caso, um sequenciador único é
511 escolhido e tem a tarefa de ordenar todas as mensagens enviadas pelo
512 \textit{broadcast} de ordem total. Possui três variantes:
513 \begin{inparaenum}[\itshape a\upshape)]
514 \item \textit{unicast-broadcast}, onde o remetente envia as
515 mensagens ao sequenciador, e logo ele faz o envio ao destinatários
516 na ordem correta;
517 \item \textit{broadcast-broadcast}, onde o remetente envia as
518 mensagens diretamente aos destinatários, incluindo ao
519 sequenciador, e logo ele envia aos destinatários a ordenação de
520 entrega das mensagens que eles já armazenam;
521 \item \textit{unicast-unicast-broadcast}, onde o remetente envia as
522 mensagens ao sequenciador, logo ele envia ao remetente os
523 identificador de sequencia das mensagens, i.e.\ sua ordenação, e
524 finalmente o remetente envia diretamente as mensagens aos
525 destinatários.
526 \end{inparaenum}. O algoritmo proposto por Garcia-Molina e
527 Spauster~\cite{garcia2002message} é um exemplo.\todo{Os exemplos são
528 bons o inecessários?}
529 \item \textit{Sequenciador móvel} É muito similar ao sequenciador
530 fixo, mas o papel de sequenciador é transferível entre um conjunto
531 de processos. Na literatura, o principio utilizado pelos
532 sequenciadores móveis é equivalente ao \textit{broadcast-broadcast}
533 dos sequenciadores fixos~\cite{Defago:2004}. O algoritmo Pinwheel de
534 Cristian et al.~\cite{cristian97:high_performance} é um exemplo.
535 \item \textit{Baseados em privilégios} A diferença das classes
536 anteriores, os papéis do sequenciador e do remetente são
537 desenvolvidos pelo mesmo processo. O principio é que só o processo
538 que possui o privilegio, e.g.\ token, pode enviar mensagens mas este
539 privilegio é circulado pelos processos \(p \in \Pi_{sender}\) que
540 podem enviar mensagens. O algoritmo proposto por Gopal e
541 Toueg~\cite{Gopal:1989:RBS:645946.675018} é um exemplo.
542 \item \textit{Baseados na historia da comunicação} Nesta classe, são
543 os destinatários os que definem a ordem de entrega das mensagens,
544 i.e.\ os destinatários são os sequenciadores, baseando-se na historia
545 deles. Os dois métodos utilizados são:
546 \begin{inparaenum}[\itshape a\upshape)]
547 \item \textit{historia causal}, onde algoritmos de ordem causal
548 parcial~\cite{Lamport:1978_clocks} são aumentados com políticas
549 comuns, para a ordenação de mensagens concorrentes, e o ordem
550 total resultante é utilizado para ordenação das mensagens;
551 \item \textit{união determinista}, onde não existe uma ordenação
552 causal das mensagens, i.e.\ cada remetente ordena suas mensagens
553 independentemente, sinão uma política determinista de união dos
554 fluxos de mensagens de cada remetente.
555 \end{inparaenum}
556 O algoritmo Atom apresentado por Bar-Joseph et
557 al.~\cite{Bar-Joseph:2002:EDA:645959.676132} é um exemplo.
558 \item \textit{Acordo dos destinatários} Como o nome o indica, os
559 destinatários acordam a ordem das mensagens a ser entregues. As
560 variantes são:
561 \begin{inparaenum}[\itshape a\upshape)]
562 \item acordo na sequencia da mensagem;
563 \item acordo no conjunto de mensagens; onde, por exemplo, são
564 utilizados algoritmos de consenso para determinar um subconjunto
565 de mensagens a ser entregues simultaneamente por todos os
566 processos (a ordem das mensagens do subconjunto é definida por
567 algum parâmetro predefinido, por exemplo a ordem lexicográfica dos
568 identificadores dos processos remetentes)
569 \item um processo propõe uma ordem das mensagens e os demais
570 destinatários acordam se é aceitado o não, portante é utilizado
571 algum protocolo de \textit{commit} atômico.
572 \end{inparaenum}
573 O algoritmo proposto por Chandra e
574 Toueg~\cite{Chandra:1996:UFD:226643.226647} é um exemplo.
575 \end{itemize}
577 Foi mostrado por Chandra e Toueg~\cite{Chandra:1996:UFD:226643.226647}
578 que o problema do consenso uniforme e o \textit{broadcast} de ordem
579 total em sistemas assíncronos com falhas de parada são equivalentes,
580 i.e.\ quaisquer algoritmo que possa resolver um deles também pode-se
581 adaptar para resolver o outro. Portanto, o \textit{broadcast} de ordem
582 total é sujeito ao mesmo resultado de impossibilidade de Fischer,
583 Lynch e Patterson.
585 Existem múltiplos mecanismos pelos quais pode-se prover alguma
586 tolerância a falhas ao \textit{broadcast} de ordem total. Na prática, os
587 algoritmos implementam vários mecanismos simultaneamente. Os mecanismos
588 são:
590 \begin{itemize}
591 \item \textit{Detecção de falhas} Baseados nos detetores de falhas não
592 confiáveis propostos inicialmente por Chandra e
593 Toueg~\cite{Chandra:1996:UFD:226643.226647}, os quais são discutidos
594 com detalhe na seção~\ref{sec:detetores}
595 \item \textit{Serviço de configuração do grupo}\todo{é configuração o
596 termo adecuado?}, profundamente relacionado com os grupos
597 dinâmicos. No evento de um processo cai, o serviço gera uma nova
598 vista do grupo e a envia aos processos ativos, portanto, eles podem
599 assumir, que na vista atual todos os processos estão ativos. Se um
600 processo foi excluído erroneamente, é forçado a cair para manter a
601 correção. A diferença dos detetores de falhas, provê notificações de
602 falhas consistentes.
603 % a descrição é correta o e só um exemplo dos distintos patroes?
604 \item \textit{Patrões de comunicação resistentes}, são aqueles patrões
605 que consideram, dentro do número \(n\) total de processos, um número
606 \(f\) máximo de processos que podem falhar, e trabalham sob a
607 pressuposto que sempre vão receber pelo menos \(n-f\) mensagens de
608 resposta.
609 \item \textit{Estabilidade das mensagens}. Além da possibilidade que
610 um processo fique bloqueado esperando a resposta de outro processo
611 que caiu, a qual é tratada pelos mecanismos anteriores, tem se que
612 considerar a estabilidade das mensagens. Uma mensagem \(m\) é
613 \(k\)-estável se \(m\) e recebida por \(k\) processos. Num sistema
614 onde podem cair ao mais \(f\) processos, é importante detetar que as
615 mensagens são \(f+1\)-estáveis, também chamadas estáveis, já que
616 isso permite que os algoritmos garantem que, eventualmente, as
617 mensagens são recebidas por todos os processos bons.
618 \item \textit{Consenso} O \textit{broadcast} de ordem total pode se reduzir a
619 uma série de execuções do problema do consenso, portanto é possível
620 delegar, e abstrair, toda a responsabilidade da tolerância a falhas
621 ao algoritmo de consenso.
622 \end{itemize}
624 % relacao do broadcast confiavel com a replicacao ativa? paragrafo de
625 % fim de seção ?
626 \subsection{Detetores de falhas }
627 \label{sec:detetores}
628 Os detetores de falhas não confiáveis, propostos inicialmente por
629 Chandra e Toueg~\cite{Chandra:1996:WFD:234533.234549,
630 Chandra:1996:UFD:226643.226647}, são, informalmente, um conjunto de
631 módulos distribuídos, um por processo do sistema, que possuem uma
632 visão deste, i.e.\ uma listagem dos processos que são suspeitos de ter
633 falhado, mas não precisasse garantir que a visão seja correta,
634 e.g.\ pode-se incluir na lista de suspeitos processos que não falharam.
636 Formalmente, a \textit{historia de um detetor de falhas} \(H\) é uma
637 função de \(\Pi \times \mathcal{T}\) a \(2^\Pi\), onde \(H(p,t)\) é o
638 valor do detetor de falhas do processo \(p\) ao tempo \(t\). Se o
639 processo \(q \in H(p,t)\) diz-se que o processo \(p\) suspeita \(q\)
640 ao tempo \(t\). Já que os detetores não são confiáveis, e possível que
641 dois processos distintos \(p \neq q\) possuam informação distinta,
642 i.e.\ \(H(p,t) \neq H(q,t)\). Um detetor de falhas \(\mathcal{D}\) é
643 uma função que mapeia cada patrão de falhas \(F\) a um conjunto de
644 historias de detetores de falhas \(D(F)\), sendo este o conjunto de
645 todas as historias do detetor de falhas \(D\) que podem acontecer em
646 execuções com o patrão de falhas \(F\).
648 Na proposta original de Chandra e
649 Toueg~\cite{Chandra:1996:UFD:226643.226647,
650 Chandra:1996:WFD:234533.234549}, se definiam duas propriedades de
651 completude e quatro de precisão que podiam cumprir os detetores de
652 falhas:
653 \begin{inparaenum}[\itshape a\upshape)]
654 \item \textit{completude forte}, eventualmente todo processo que caiu é
655 suspeito permanentemente por \textit{todos} os processos bons;
656 \item \textit{completude fraca}, eventualmente todo processo que caiu
657 é suspeito permanentemente por \textit{alguns} processos bons;
658 \item \textit{precisão forte}, nenhum processo é suspeito antes de cair;
659 \item \textit{precisão débil}, alguns processos bons não são
660 suspeitos nunca;
661 \item \textit{precisão forte eventual}, após algum tempo \(t \in
662 \mathcal{T}\), nenhum processo bom é suspeito por nenhum outro
663 processo bon.
664 \item \textit{precisão franca eventual}, após algum tempo \(t \in
665 \mathcal{T}\), alguns processos bons não são suspeitos por nenhum
666 outro processo bom.
667 \end{inparaenum}
668 Dos possíveis oito classes de detetores de falhas que podem-se criar
669 baseando-se nas combinações daquelas propriedades, os autores mostram
670 que são \textit{reduzíveis} só a quatro, onde \(\mathcal{D'}\) e
671 reduzível a \(\mathcal{D}\) se existe um algoritmo distribuído que
672 possa transformar \(D\) em \(D'\). Eles mostram que é possível
673 resolver o problema do consenso cada uma das classes de detetores de
674 falhas resultantes: perfeito \(\mathcal{P}\) (completude forte,
675 precisão forte), forte \(\mathcal{S}\) (completude forte, precisão
676 fraca), eventualmente perfeito \(\diamond \mathcal{P}\) (completude
677 forte, precisão forte eventual), e eventualmente forte \(\diamond
678 \mathcal{S}\) (completude forte, precisão fraca).
680 O modelo de falhas utilizado por Chandra e Toueg não permitia a
681 recuperação dos processos, portanto, a diferença da definição dada na
682 seção~\ref{sec:notacao}, os processos bons eram aqueles que nunca
683 falhavam e os ruins aqueles que caiam e não voltavam. Oliveira et
684 al.~\cite{oliveira97:consensus} e Hurfin et
685 al.\cite{Hurfin:1998:CAS:829523.830974} apresentaram soluções para o
686 modelo de falha e recuperação, mas Aguilera et
687 al.~\cite{springerlink:aguilera98} mostraram que a propriedade de
688 completude forte, da qual elas dependiam, pode gerar comportamento
689 indesejável onde, para satisfazer aquela, os detetores de falhas debem
690 de suspeitar de processos bons eventualmente para sempre. A raiz deste
691 comportamento é o fato que a abordagem tradicional tenta pronosticar
692 se um processo que caiu e volto, vai volver a cair ou não. Este erro
693 não impide que o algoritmo progresse, mas pode ter um efeito negativo
694 no seu desempenho.
696 Aguilera et al.~\cite{springerlink:aguilera98} propõem um novo tipo de
697 detetores de falhas que não exibem este comportamento e, portanto, são
698 mais apropriados ao modelo de falha e recuperação. Cada detetor produz
699 como saída dois elementos \(\langle trustlist, epoch \rangle\):
700 \(trustlist\) é um conjunto de processos, onde \(q \in trustlist\) se
701 \(p\) suspeita que \(q\) está ativo, e \(epoch\) é um vector de
702 inteiros indexado pelos elementos de \(trustlist\), onde \(epoch[q]\)
703 é o estimado de \(p\) do número de vezes que o \(q\) caiu e
704 voltou. Existem duas classes de detetores de falhas descritas por
705 Aguilera et al.\
706 \begin{itemize}
707 \item \(\diamond S_e\), na qual os detetores satisfazem as
708 propriedades de:
709 \begin{inparaenum}[\itshape a\upshape)]
710 \item \textit{monotonicidade}, os valores de \(epoch\) produzidos
711 pelos detetores dos processos \textit{bons} são eventualmente no
712 decrescentes;
713 \item \textit{completude}, por cada processo ruim \(r\), e por cada
714 processo bom \(b\), ou eventualmente \(b\) suspeita
715 permanentemente de \(r\) ou o \(epoch\) de \(b\) aumenta sem
716 limites.
717 \item \textit{precisão}, algum processo bom \(K\) e cada processo
718 bom \(b\), eventualmente \(g\) permanentemente confia em \(K\) e o
719 valor \(epoch\) de \(K\) em \(g\) para de cambiar.
720 \end{inparaenum}
721 \item \(\diamond S_u\), a qual aumenta a classe \(\diamond S_e\) a com
722 a propriedade de precisão forte que inclui processos instáveis, a
723 qual permite-lhes suspeitar todos os processos bons:
724 \textit{precisão forte}, algum processo bom \(K\):
725 \begin{inparaenum}[\itshape a\upshape)]
726 \item por cada processo bom \(g\), eventualmente \(g\) confia
727 permanentemente de \(K\) e o \(epoch\) de \(K\) em \(g\) para de
728 cambiar; e
729 \item por cada processo instável \(u\), eventualmente quando \(u\)
730 está ativo, \(u\) confia em \(K\) e o \(epoch\) de \(K\) em \(u\)
731 para de cambiar.
732 \end{inparaenum}
733 \end{itemize}
735 \section{Treplica}
736 \label{sec:treplica}
737 E melhor utilizar os relatório técnico~\cite{vieira08a-tr,
738 vieira10:implementing-tr} ou o artigo~\cite{vieira08:_trepl}
739 \todo{Vou incluir aspectos gerais do treplica, ou algum em
740 particular?}
742 \section{Proposta de pesquisa}
743 \label{sec:proposta}
744 Pesquisas anteriores~\cite{gray07:empirical,
745 Schroeder:2007:DFR:1267903.1267904, 10.1109/SRDS.2008.9,
746 Pinheiro:2007:FTL:1267903.1267905} mostraram que, na prática, as
747 falhas dos componentes de hardware dos sistemas distribuídos de
748 produção são maiores às reportadas pelos fabricantes; além disso,
749 erros no software também causam quedas nos processos, portanto, a
750 tolerância a falhas é vital.
752 A proposta de pesquisa vai-se focar nos sistemas distribuídos de
753 replicação ativa no modelo de maquina de
754 estados~\cite{Schneider:1990:IFS:98163.98167}, com \textit{broadcast}
755 de ordem total uniforme \todo{é uniforme, certo?}. Os processos têm as
756 seguintes caraterísticas:
757 \begin{inparaenum}[\itshape a\upshape)]
758 \item aceso à memória estável e à memória volátil local;
759 \item participação no \textit{broadcast} como remetentes e
760 destinatários, i.e.\ \(\forall p,j \in \Pi~\exists m \in \mathcal{M}
761 (sender(m) = p \wedge j \in Dest(m))\);
762 \item suscetíbilidade às falhas de software ou hardware, as quais
763 causam que, os processos, perderam o conteúdo de sua memória volátil e
764 não participem do sistema por um tempo limitado mas desconhecido,
765 após o qual eles se \textit{recuperam} e voltam à atividade.
766 \end{inparaenum}
767 As propriedades da comunicação pelo \textit{broadcast} uniforme, que
768 foram definidas na seção~\ref{sec:broadcast}, que caracterizam o
769 modelo são:
770 \begin{inparaenum}[\itshape a\upshape)]
771 \item o grupo de processos é fechado e estático;
772 \item a sequencia das mensagens é decidida por acordo dos
773 destinatários, utilizando o algoritmo de consenso Paxos.
774 \end{inparaenum}
776 O mecanismo de tolerância a falhas do sistema é fornecido pelo
777 \textit{broadcast} de ordem total uniforme, o qual garante que ainda
778 os processos com falhas vão receber todas as mensagens no mesmo
779 ordem. É possível, porém não prático, que sejam armazenadas todas as
780 mensagens enviadas pelo \textit{broadcast} e, no caso de falhas, estas
781 sejam entregues novamente ao processo recuperado. Ao invés, cada nó
782 vai armazenar \textit{checkpoints} em períodos regulais. Não
783 precisasse utilizar protocolos de \textit{checkpoint} distribuídos
784 tais como os apresentados em~\cite{Chandy:1985:DSD:214451.214456,
785 Koo:1986:CRD:324493.325074} já que, a principal motivação do uso
786 deles, é garantir a consistência dos estados armazenados através do
787 sistema, mas neste caso não precisa; o \textit{broadcast} garanta a
788 consistência das mensagens entregues às replicas, e o algoritmo de
789 consenso fornece o mecanismo de coordenação e sincronização dos
790 estados.
792 \begin{table}[h]
793 \small
794 \centering
795 \begin{tabular}{|l|p{5cm}|l|p{5cm}|}
796 \hline
797 \(\Pi\) & Conjunto de processos do sistema. &
798 \(\Pi_{local}\) & Conjunto de processos que armazenam localmente seus \textit{checkpoints}. \\
799 \(\Pi_{remote}\) & Conjunto de processos que armazenam remotamente seus \textit{checkpoints}. &
800 \(\Pi_{storage}\) & Conjunto de processos que armazenam localmente \textit{checkpoints} remotos, além dos próprios. \\
801 \(\Pi'_{storage}\) & Conjunto de processos externos que armazenam localmente \textit{checkpoints} remotos. &
802 \(P_{storage}\) & \(\Pi_{storage} \cup \Pi'_{storage}\). \\
803 \(States_i\) & Conjunto de estados do processo \(p_i\). &
804 \(S_i(t)\) & Estado do processo \(p_i\) no tempo \(t\). \\
805 \(\mathcal{M}_b\) & Conjunto das mensagens dos algoritmos (\textit{broadcast} e consenso). &
806 \(\mathcal{M}_s\) & Conjunto das mensagens de armazenamento dos \textit{checkpoints}. \\
807 \hline
808 \end{tabular}
809 \caption{Notação adicional.}
810 \label{tab:notacion_proposta}
811 \end{table}
813 Vamos definir mais formalmente o sistema; a
814 tabela~\ref{tab:notacion_proposta} contém o resumo da notação
815 utilizada adicional à já definida na tabela~\ref{tab:notacao}. Seja
816 \(\Pi = \{p_1, \ldots, p_n\}\) um conjunto de \(n\) processos que
817 conformam o sistema, i.e.\ participam do \textit{broadcast} de ordem
818 total. Cada processo do sistema é modelado como uma maquina de
819 estados, onde \(States_i\) é o conjunto (não necessariamente finito)
820 de estados do processo \(p_i\). Seja \(S_i\) uma função de
821 \(\mathcal{T}\) a \(States_i\), tal que \(S_i(t)\) representa o estado
822 do processo \(i\) ao tempo \(t\); o estado especial \(\bot\)
823 representa inatividade, e.g.\ \(S_i(t) = \bot \iff p_i \in F(t)\). Os
824 processos só mudam de estado pelo intercambio de mensagens \(m \in
825 \mathcal{M}\), ou pelos eventos de falha e recuperação.
827 O \textit{checkpoint} do processo \(p_i\) no tempo \(t\) é definido
828 como a copia não modificável do estado \(S_i(t)\). A operação que os
829 gera é atômica~\cite{Randell:1978:RIC:356725.356729} e só pode-se
830 executar no tempo \(t\) se \(S_i(t) \neq \bot\). Formalmente, a
831 recuperação, ou reconstrução~\cite{Okun:2002:NSR:829526.831119}, no
832 tempo \(t'\) do processo \(p_i\) é uma operação especial, executável
833 se \(p_i \in F(t')\), que transforma do estado inicial \(S_i(0)\) ao
834 estado \(S_i(t)\) armazenado pelo \textit{checkpoint} gerado no tempo
835 \(t\), tal que \(t'> t\). O procedimento descrito só volta o processo
836 a seu último estado armazenado; a responsabilidade da atualização
837 deste até o estado atual das demais réplicas é delegada ao algoritmo
838 de consenso. Os \textit{checkpoints} são gerados a intervalos
839 regulais.
841 Sejam \(\Pi_{local}\), \(\Pi_{remote}\) e \(\Pi_{storage}\), três
842 subconjuntos disjuntos do \(\Pi\) tais que sua união é igual a
843 este. Se \(p \in \Pi_{local}\), o processo \(p\) armazena seus
844 \textit{checkpoints} em sua memoria estável local. Se \(p \in
845 \Pi_{remote}\), o processo \(p\) delega a responsabilidade do
846 armazenamento a outros processos, enviando-lhes os
847 \textit{checkpoints}. Se \(p \in \Pi_{storage}\), o processo \(p\)
848 armazena seus \textit{checkpoints} em sua memoria estável local, além
849 de armazenar \textit{checkpoints} de processos remotos em suas duas
850 memórias: a estável e a volátil. Além dos processos já definidos,
851 existem um conjunto de processos \(\Pi'_{storage}\) que não participam
852 do \textit{broadcast} de ordem total, e portanto não são replicas do
853 sistema, i.e.\ \(\Pi_{storage} \cap \Pi = \emptyset\): se \(p \in
854 \Pi'_{storage}\), o processo \(p\) é um repositorio, e tem a única
855 função de armazenar \textit{checkpoints} de processos remotos em suas
856 duas memorias: a estável é a volátil. Existe uma relação entre os
857 processos que delegam o armazenamento de seus \textit{checkpoints},
858 \(\Pi_{remote}\), e aqueles que assumem a responsabilidade,
859 representados pelo conjunto de processos \(P_{storage} = \Pi_{storage}
860 \cup \Pi'_{storage}\)~: seja \(Store\) uma relação de \(\Pi_{remote}\)
861 a \(2^{P_{storage}}\), tal que \(Store(p)\) representa o conjunto de
862 processos em \(P_{storage}\) que armazenam os \textit{checkpoints} de
863 \(p\); diz-se que \(j\) é um \textit{store} de \(p\) se somente se \(j
864 \in Store(p)\). Todos os processos de armazenamento devem de ser o
865 \textit{store} de pelo menos um processo remoto, i.e.\ \(\forall j \in
866 P_{storage} \exists p \in \Pi_{remote} (j \in Store(p))\), e todo
867 processo remoto tem que armazenar seus \textit{checkpoints} em pelo
868 menos um \textit{store}, i.e.\ \(\forall p \in \Pi_{remote} (Store(p)
869 \neq \emptyset)\).
871 As mensagens válidas são de dois classes: sejam \(\mathcal{M}_b\) e
872 \(\mathcal{M}_s\) dois subconjuntos disjuntos de \(\mathcal{M}\), tais
873 que \(\mathcal{M}_b \cap \mathcal{M}_s = \emptyset \wedge
874 \mathcal{M}_b \cup \mathcal{M}_s = \mathcal{M}\). \(\mathcal{M}_b\) é
875 o conjunto de todas as mensagens válidas do sistema que estão
876 relacionadas com o progresso dos algoritmos de consenso e de
877 \textit{broadcast} de ordem total uniforme; os remetentes e
878 destinatários destas mensagens são processos que participam do
879 consenso, i.e.\ \(\forall m \in \mathcal{M}_b (sender(m) \in \Pi \wedge
880 Dest(m) \subseteq \Pi)\). \(\mathcal{M}_s\) é o conjunto de todas as
881 mensagens válidas do sistema que transmitem valores de
882 \textit{checkpoint} entre os processos que participam do armazenamento
883 remoto de dados, i.e.\ \(\forall m \in \mathcal{M}_s(sender(m) \in
884 (\Pi_{remote} \cup P_{storage}) \wedge Dest(m) \in (\Pi_{remote} \cup
885 P_{storage}))\).
887 \begin{figure}[h]
888 \centering
889 \includegraphics[width=120mm]{images/system_arch}
890 \caption{Arquitetura do sistema}
891 \label{fig:arquitetura}
892 \end{figure}
894 O objetivo desta pesquisa é encontrar a melhor configuração em termos
895 de desempenho num sistema com as caraterísticas do descrito na
896 figura~\ref{fig:arquitetura}. As medidas de desempenho utilizadas são:
897 \begin{inparaenum}[\itshape a\upshape)]
898 \item \textit{disponibilidade}, ratio entre o tempo que a aplicação
899 está operacional e o tempo total de execução;
900 \item \textit{perfomability}, é o ratio entre o desempenho promédio da
901 aplicação (AWIPS) durante o período sem falhas e o desempenho
902 promédio durante o período de recuperação; está medida quantifica o
903 impacto das falhas no desempenho da aplicação;
904 \item \textit{precisão}, ratio entre o número de solicitações com erro
905 e o total destas durante a execução;
906 \item \textit{autonomia}, ratio entre o número de intervenções humanas
907 precisadas para o reinicio das replicas e o número de falhas no
908 sistema.
909 \end{inparaenum}
910 \todo{Os parâmetros de desempenho supostos são os mesmos que no
911 trabalho de tréplica do 2009\cite{buzato09}}
913 As possiveis configurações do sistema são:
915 \begin{itemize}
916 \item \(\Pi_{local} = \Pi\), está é a configuração atual de
917 Treplica. Todos os processo armazenam seus
918 \textit{checkpoints}, portanto o custo de recuperação do estado é
919 dominado pela latência da memoria estável, e o procedimento não gera
920 trafego de rede ou carga nos nós vizinhos adicional\footnote{É claro
921 que a falha de um processo vai gerar uma carga de trabalho
922 adicional aos demais membro do sistema, devido à redistribuição de
923 tarefas, mas é considerado um custo inerente ao modelo e portanto
924 não considerado nos cálculos.}
925 \item \(\Pi_{local} \neq \emptyset \wedge \Pi_{remoto} \neq \emptyset
926 \wedge \Pi_{storage} \neq \emptyset \wedge \Pi'_{storage} =
927 \emptyset \), alguns processos armazenam seus estados em processos
928 remotos que participam do \textit{broadcast}, portanto o custo de recuperação
929 desses processos é dominado pela latência de rede, e o procedimento
930 gera trafego de rede e carga adicional aos vizinhos, mas é uma
931 quantidade limitada aos processos que utilizam armazenamento remoto.
932 \item \(\Pi_{local} \neq \emptyset \wedge \Pi_{remoto} \neq \emptyset
933 \wedge \Pi_{storage} \neq \emptyset \wedge \Pi'_{storage} \neq
934 \emptyset \), alguns processos armazenam seus estados em processos
935 remotos que participam ou não do \textit{broadcast}, portanto o custo de
936 recuperação desses processos é dominado pela latência de rede, e o
937 procedimento gera trafego de rede e carga adicional aos vizinhos,
938 mas é uma quantidade menor à opção anterior, já que o tráfego e a
939 carga gerada aos nós repositório não tem impacto sob o desempenho do
940 sistema.
941 \item \(\Pi_{local} \neq \emptyset \wedge \Pi_{remoto} \neq \emptyset
942 \wedge \Pi_{storage} = \emptyset \wedge \Pi'_{storage} \neq
943 \emptyset \), alguns processos armazenam seus estados em processos remotos
944 que não participam do \textit{broadcast}, portanto o custo de recuperação
945 desses processos é dominado pela latência de rede, e o procedimento
946 não gera trafego de rede ou carga adicional aos vizinhos.
947 \item \(\Pi_{local} = \emptyset \wedge \Pi_{remoto} \neq \emptyset
948 \wedge \Pi_{storage} \neq \emptyset \wedge \Pi'_{storage} =
949 \emptyset \), todos os processos armazenam seus estados em processos
950 remotos que participam do \textit{broadcast}, portanto o custo de recuperação
951 está dominado pela latência de rede, e o procedimento gera trafego
952 de rede e carga adicional aos vizinhos.
953 \item \(\Pi_{local} = \emptyset \wedge \Pi_{remoto} \neq \emptyset
954 \wedge \Pi_{storage} \neq \emptyset \wedge \Pi'_{storage} \neq
955 \emptyset \), todos os processos armazenam seus estados em processos
956 remotos que participam ou não do \textit{broadcast}, portanto o
957 custo de recuperação está dominado pela latência de rede, e o
958 procedimento gera trafego de rede e carga adicional aos vizinhos,
959 mas é uma quantidade menor à proposta anterior.
960 \item \(\Pi_{local} = \emptyset \wedge \Pi_{remoto} \neq \emptyset
961 \wedge \Pi_{storage} = \emptyset \wedge \Pi'_{storage} \neq
962 \emptyset \), todos os processos armazenam seus estados em processos
963 remotos que não participam do \textit{broadcast}, portanto o custo
964 de recuperação está dominado pela latência de rede, e o procedimento
965 não gera trafego de rede ou carga adicional aos vizinhos.
966 \end{itemize}
968 A avaliação das opções tem que considerar não só a melhor opção, sinão
969 qual é a proporção de cada conjunto de processo que gera o resulta
970 mais ótimo. Um aspecto importante a se considerar é o desempenho das
971 soluções sob as distintas classes de processos em relação as falhas:
972 ativo, eventualmente ativo, eventualmente inativo e intestável (ver
973 seção~\ref{sec:notacao}). Portanto, além de implementar os mecanismos
974 necessários para dar suporte às distintas classes de processos, é
975 preciso a implementação de detetores de falhas no modelo proposto por
976 Aguilera et al.~\cite{springerlink:aguilera98} (ver
977 seção~\ref{sec:detetores}), que possam fornecer melhor informação
978 sobre os processos bons, ruins é instáveis.
980 % LAS TECNICAS PROPUESTAS TAMBIEN HAN SIDO HECHAS PARA EL AMBIENTE
981 % HPC. [ver paper de Bautista Gomez] REVISAR ARTICULO DE ISLENE
983 % As alternativas a avaliar são as seguintes:
985 % % hay que tener en consideracion que en este caso no se asume las
986 % % fallas de disco dentro de la evaluacion. El metodo necesario para
987 % % soportar esa situacion seria, por ejemplo, el uso de un sistema de
988 % % archivos distribuido con replicacion, como hdfs. Aunque el impacto
989 % % sobre el desempenho del sistema no es, necesariamente, despreciable,
990 % % puede asumirse que afecta de manera uniforme a todos los nodos del
991 % % sistema que utilizan la memoria estable.
994 \section{Metodologia Científica}
995 \label{sec:metodologia}
997 \todo{qual é o conteúdo apropiado para esta seção?}
999 \subsection{Tarefas e cronograma}
1000 \label{sec:planodetrabalho}
1002 Esta seção detalha as tarefas planejadas para o desenvolvimento do
1003 Mestrado e o conograma proposto (Tabela~\ref{projtimetable}):
1004 \todo[noline]{o conteudo é correcto e completo? o calendário de
1005 atividades?}
1007 \begin{enumerate}
1008 \addtolength{\itemsep}{-0.35\baselineskip}
1010 % Ago-Julho 2010
1011 \item \label{t1} Créditos em disciplinas
1013 % Abril-Julho 2010
1014 \item \label{t2} Revisão bibliográfica
1016 % Maio-Ago 2010
1017 \item \label{t3} Estudo dirigido
1019 % Jul-Ago 2010
1020 \item \label{t4} Elaboração do projeto de mestrado
1022 % Ago 2010 - Jul 2011
1023 \item \label{t5} Estudo comparativo de algoritmos
1025 % Jan 2011 - Dez 2011
1026 \item \label{t6} Proposta, análise e prova de algoritmos.
1028 % Dez 2011 - Dez 2011
1029 \item \label{t7} Implementação da solução sobre a plataforma
1030 Tréplica~\cite{vieira08a}. Testes de desempenho da solução com
1031 diversas cargas de trabalho, tanto na presença como na ausência de
1032 falhas de processos.
1034 % Mai 2011 - Jan 2012
1035 \item \label{t8} Escrita da Dissertação de Mestrado
1037 % Fev 2012 - Mar 2012
1038 \item \label{t9} Defesa da Dissertação de Mestrado
1040 % Dez 2010 - Mar 2012
1041 \item \label{t10} Escrita e submissão de artigos para publicação
1043 \end{enumerate}
1045 \begin{table}[h]
1046 \begin{center}
1047 \setlength{\tabcolsep}{1.5pt}
1048 \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
1049 & \multicolumn{5}{c|}{\scriptsize 2010} & \multicolumn{12}{c|}{\scriptsize 2011} & \multicolumn{7}{c|}{\scriptsize 2012} \\ \cline{2-25}
1050 {\small Tarefas } &
1051 \rotatebox{90}{\scriptsize ago } &
1052 \rotatebox{90}{\scriptsize set } &
1053 \rotatebox{90}{\scriptsize out } &
1054 \rotatebox{90}{\scriptsize nov } &
1055 \rotatebox{90}{\scriptsize dez } &
1056 \rotatebox{90}{\scriptsize jan } &
1057 \rotatebox{90}{\scriptsize fev } &
1058 \rotatebox{90}{\scriptsize mar } &
1059 \rotatebox{90}{\scriptsize abr } &
1060 \rotatebox{90}{\scriptsize mai } &
1061 \rotatebox{90}{\scriptsize jun } &
1062 \rotatebox{90}{\scriptsize jul } &
1063 \rotatebox{90}{\scriptsize ago } &
1064 \rotatebox{90}{\scriptsize set } &
1065 \rotatebox{90}{\scriptsize out } &
1066 \rotatebox{90}{\scriptsize nov } &
1067 \rotatebox{90}{\scriptsize dez } &
1068 \rotatebox{90}{\scriptsize jan } &
1069 \rotatebox{90}{\scriptsize fev } &
1070 \rotatebox{90}{\scriptsize mar } &
1071 \rotatebox{90}{\scriptsize abr } &
1072 \rotatebox{90}{\scriptsize mai } &
1073 \rotatebox{90}{\scriptsize jun } &
1074 \rotatebox{90}{\scriptsize jul } \\ \hline
1076 \ \~ref{t1} & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & & & & & & & & & & & & & \\ \hline
1077 \ \~ref{t2} & & \f & \f & \f & \f & \f & \f & & & & & & & & & & & & & & & & & \\ \hline
1078 \ \~ref{t3} & & & & \f & \f & \f & \f & & & & & & & & & & & & & & & & & \\ \hline
1079 \ \~ref{t4} & & & & \f & \f & \f & \f & & & & & & & & & & & & & & & & & \\ \hline
1080 \ \~ref{t5} & & & & & & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & & & & & & & \\ \hline
1081 \ \~ref{t6} & & & & & & & & & & & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & & \\ \hline
1082 \ \~ref{t7} & & & & & & & & & & & & & & & & & \f & \f & \f & \f & \f & \f & & \\ \hline
1083 \ \~ref{t8} & & & & & & & & & & & & & & & \f & \f & \f & \f & \f & \f & \f & \f & \f & \\ \hline
1084 \ \~ref{t9} & & & & & & & & & & & & & & & & & & & & & & & \f & \f \\ \hline
1085 \ \~ref{t10} & & & & & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f & \f \\ \hline
1086 \end{tabular}
1087 \caption{Cronograma do projeto}
1088 \label{projtimetable}
1089 \end{center}
1090 \end{table}
1093 \begin{small}
1094 \phantomsection
1095 \addcontentsline{toc}{section}{\bibname}
1096 \bibliographystyle{plain}
1097 \bibliography{mscMonografia,bibliography}
1098 \end{small}
1100 \end{document}