Spectra Notes

Template LaTeX (LuaLaTeX) para anotações estilo livro-texto editorial: capa, blocos coloridos arredondados, notas de margem e paleta diversa.

Category

Other

License

Free to use (MIT)

File

examples/showcase.tex

showcase.texRead-only preview
% Showcase — a real mini-chapter that exercises every Spectra element.
% Compile FROM THE REPO ROOT:  latexmk examples/showcase.tex
\documentclass{spectra}

\begin{document}

% Cover: bundled public-domain painting as the background (see CREDITS.md).
\capebg{assets/gradients/cover.jpg}
\makecape{Sistemas Distribuídos}{Anotações de estudo · 2026/1}{Seu Nome}

\tableofcontents
\clearpage

\section{Tempo e ordem}

Num sistema distribuído não existe um relógio global confiável. Cada máquina tem seu
próprio relógio, e eles derivam entre si. Por isso não podemos ordenar eventos de
máquinas diferentes só comparando \emph{timestamps} de parede: dois eventos com a
mesma hora podem ter acontecido em ordens distintas do ponto de vista causal.

\spcmargin[Causalidade]{Se um evento pode ter influenciado outro, dizemos que há uma
relação \emph{happens-before}.}
A saída é abandonar o tempo físico como fonte de verdade e trabalhar com \emph{ordem
causal}. Relógios lógicos capturam ``o evento A aconteceu antes do evento B'' sem
precisar que os relógios estejam sincronizados.

\begin{definition}[Relógio de Lamport]
Um contador inteiro por processo. Antes de cada evento local, incrementa. Ao enviar
uma mensagem, anexa o contador; ao receber, faz $C \leftarrow \max(C, C_{msg}) + 1$.
Garante que se $A$ \emph{happens-before} $B$, então $C(A) < C(B)$.
\end{definition}

\begin{example}[Ordenando duas mensagens]
Processo~1 envia $m_1$ com carimbo $3$; processo~2, que estava em $1$, recebe e passa a
$\max(1,3)+1 = 4$. Qualquer evento seguinte em~2 terá carimbo maior que o envio de $m_1$.
\end{example}

\begin{warning}
A recíproca não vale: $C(A) < C(B)$ \textbf{não} implica que $A$ aconteceu antes de $B$.
Relógios de Lamport dão uma ordem total consistente, mas não detectam concorrência.
Para isso são precisos \emph{vector clocks}.
\end{warning}

\herobox[assets/gradients/hero.jpg]{Ordem sem relógio}{relógios lógicos capturam causalidade, não tempo de parede}

\section{Consistência}

Quando os dados estão replicados, ``consistência'' vira um espectro de garantias, da
mais forte (e mais cara) à mais fraca (e mais disponível). Escolher o modelo é decidir
quanto de anomalia a aplicação tolera em troca de latência e disponibilidade.

\begin{spctable}{colspec={l X[l] c}}
Modelo & O que garante & Custo \\
Linearizável & Toda leitura vê a escrita mais recente, como se fosse um só nó & Alto \\
Sequencial & Uma ordem global respeitada por todos, não necessariamente em tempo real & Médio \\
Causal & Escritas causalmente relacionadas são vistas na mesma ordem & Baixo \\
Eventual & As réplicas convergem se as escritas pararem & Mínimo \\
\end{spctable}

\begin{keyidea}
Consistência mais forte custa disponibilidade sob partição de rede. O teorema CAP
formaliza esse trade-off: sob partição, escolha entre responder (AP) ou ficar
consistente (CP).
\end{keyidea}

\begin{tip}
Comece pela consistência eventual e só endureça as garantias onde a aplicação
realmente doer. Endurecer cedo demais paga latência que talvez nunca fosse necessária.
\end{tip}

\begin{quotebox}[— Leslie Lamport]
Um sistema distribuído é aquele em que a falha de um computador que você nem sabia que
existia pode tornar o seu inútil.
\end{quotebox}

\section{Na prática}

O relógio de Lamport cabe em poucas linhas. O cuidado está em atualizar o contador em
todo ponto de envio e recebimento, sem esquecer nenhum caminho.

\begin{codebox}{python}{lamport.py}
class LamportClock:
    def __init__(self):
        self.t = 0

    def tick(self):
        self.t += 1
        return self.t

    def on_receive(self, received):
        self.t = max(self.t, received) + 1
        return self.t
\end{codebox}

\begin{checklist}
\item Ler o paper de Lamport (1978)
\item Implementar o relógio lógico
\item[\spctodo] Escrever teste de reentrega de mensagem
\item[\spctodo] Medir latência p99 sob partição
\end{checklist}

\begin{summary}
Sem relógio global, ordene por causalidade. Relógios de Lamport dão ordem total mas não
detectam concorrência. Consistência é um espectro; escolha o modelo pelo trade-off entre
garantia, latência e disponibilidade sob partição.
\end{summary}

\end{document}
Preview
Spectra Notes preview
Spectra Notes LaTeX Template | Bibby | Bibby AI