136 lines
5.1 KiB
TeX
136 lines
5.1 KiB
TeX
\section{Adatbázis replikáció}
|
||
|
||
\begin{frame}{Mi az adatbázis replikáció?}
|
||
\begin{block}{Definíció}
|
||
Az adatok \textbf{több adatbázis példány között} vannak másolva annak érdekében,
|
||
hogy növekedjen a \textbf{rendelkezésre állás}, \textbf{skálázhatóság} és
|
||
\textbf{hibatűrés}.
|
||
\end{block}
|
||
\begin{itemize}
|
||
\item Primary–Replica (master–slave) felépítés a leggyakoribb
|
||
\item A replikáció lehet \textbf{szinkron} vagy \textbf{aszinkron}
|
||
\item Read-heavy alkalmazásoknál különösen hasznos
|
||
\end{itemize}
|
||
\end{frame}
|
||
|
||
\begin{frame}{Miért jó a replikáció?}
|
||
\begin{block}{Főbb előnyök}
|
||
\begin{itemize}
|
||
\item \textbf{Nagyobb rendelkezésre állás}: hiba esetén átváltás (failover)
|
||
\item \textbf{Skálázás olvasásra}: több replica olvasási terhelést visz el
|
||
\item \textbf{Biztonsági másolat}: adatvesztés kockázatának csökkentése
|
||
\item \textbf{Földrajzi közelség}: alacsonyabb késleltetés regionális replikákkal
|
||
\end{itemize}
|
||
\end{block}
|
||
\end{frame}
|
||
|
||
\begin{frame}{Replikációs topológiák}
|
||
\begin{itemize}
|
||
\item \textbf{Primary–Replica}: egy írható csomópont, több olvasó
|
||
\item \textbf{Multi-primary}: több írható csomópont (konfliktuskezelés szükséges)
|
||
\item \textbf{Chain/Cascade}: láncolt replikák nagy földrajzi területre
|
||
\end{itemize}
|
||
\begin{alertblock}{Gyakorlatban}
|
||
A legtöbb backend szolgáltatásnál a Primary–Replica modell az alapértelmezett.
|
||
\end{alertblock}
|
||
\end{frame}
|
||
|
||
\begin{frame}{Szinkron replikáció}
|
||
\begin{block}{Hogyan működik?}
|
||
\begin{itemize}
|
||
\item Az írás \textbf{csak akkor sikeres}, ha a replika is visszaigazolta
|
||
\item Erős \textbf{konzisztencia} (nincs adatvesztés írás után)
|
||
\item A primary \textbf{vár} a replikákra → nagyobb latency
|
||
\end{itemize}
|
||
\end{block}
|
||
\begin{exampleblock}{Mikor jó?}
|
||
Pénzügyi, tranzakciós rendszerek, ahol az adatvesztés nem elfogadható.
|
||
\end{exampleblock}
|
||
\end{frame}
|
||
|
||
\begin{frame}{Szinkron replikáció előnyök / hátrányok}
|
||
\begin{columns}
|
||
\begin{column}{0.48\textwidth}
|
||
\begin{block}{Előnyök}
|
||
\begin{itemize}
|
||
\item Erős konzisztencia
|
||
\item Minimális adatvesztés
|
||
\item Egyszerűbb olvasási modell
|
||
\end{itemize}
|
||
\end{block}
|
||
\end{column}
|
||
\begin{column}{0.48\textwidth}
|
||
\begin{alertblock}{Hátrányok}
|
||
\begin{itemize}
|
||
\item Nagyobb válaszidő írásnál
|
||
\item Érzékenyebb hálózati késleltetésre
|
||
\item Replikák kiesése lassítja az írást
|
||
\end{itemize}
|
||
\end{alertblock}
|
||
\end{column}
|
||
\end{columns}
|
||
\end{frame}
|
||
|
||
\begin{frame}{Aszinkron replikáció}
|
||
\begin{block}{Hogyan működik?}
|
||
\begin{itemize}
|
||
\item Az írás \textbf{azonnal sikeres}, a replika később frissül
|
||
\item Jobb \textbf{teljesítmény} és alacsonyabb latency
|
||
\item \textbf{Időbeli eltérés} lehetséges (eventual consistency)
|
||
\end{itemize}
|
||
\end{block}
|
||
\begin{exampleblock}{Mikor jó?}
|
||
Nagy forgalmú rendszerek, ahol az olvasási skálázás fontosabb, mint a tökéletes
|
||
konzisztencia (pl. hírportál, analytics).
|
||
\end{exampleblock}
|
||
\end{frame}
|
||
|
||
\begin{frame}{Aszinkron replikáció előnyök / hátrányok}
|
||
\begin{columns}
|
||
\begin{column}{0.48\textwidth}
|
||
\begin{block}{Előnyök}
|
||
\begin{itemize}
|
||
\item Alacsonyabb írási késleltetés
|
||
\item Jobb skálázhatóság
|
||
\item Replikák nem lassítják az írást
|
||
\end{itemize}
|
||
\end{block}
|
||
\end{column}
|
||
\begin{column}{0.48\textwidth}
|
||
\begin{alertblock}{Hátrányok}
|
||
\begin{itemize}
|
||
\item Ideiglenes inkonzisztencia
|
||
\item Failover esetén adatvesztés kockázata
|
||
\item Komplexebb olvasási logika
|
||
\end{itemize}
|
||
\end{alertblock}
|
||
\end{column}
|
||
\end{columns}
|
||
\end{frame}
|
||
|
||
\begin{frame}{Szinkron vs. aszinkron – döntési szempontok}
|
||
\begin{itemize}
|
||
\item \textbf{Konzisztencia igény}: kritikus adatok → szinkron
|
||
\item \textbf{Teljesítmény igény}: magas throughput → aszinkron
|
||
\item \textbf{Hálózat megbízhatósága}: nagy latency → aszinkron
|
||
\item \textbf{Üzleti kockázat}: adatvesztés megengedett? → aszinkron
|
||
\end{itemize}
|
||
\begin{alertblock}{Ökölszabály}
|
||
Ha az írások számítanak jobban, válaszd a szinkront. Ha az olvasási skálázás
|
||
és az alacsony latency fontos, válaszd az aszinkront.
|
||
\end{alertblock}
|
||
\end{frame}
|
||
|
||
\begin{frame}{Hogyan használjuk a gyakorlatban?}
|
||
\begin{block}{Tipikus architektúra}
|
||
\begin{itemize}
|
||
\item \textbf{Primary} kezeli az írásokat
|
||
\item \textbf{Replica} kiszolgálja az olvasásokat
|
||
\item \textbf{Load balancer} irányítja az olvasást a replikákhoz
|
||
\end{itemize}
|
||
\end{block}
|
||
\begin{exampleblock}{ORM/Prisma oldal}
|
||
A legtöbb ORM-ben (így Prismában is) külön connection stringet használsz az
|
||
író és az olvasó adatbázisokhoz, vagy read-replica routert konfigurálsz.
|
||
\end{exampleblock}
|
||
\end{frame} |