0Pricing
SQL Academy · Lekcja

Repliki tylko do odczytu i kierowanie połączeniami

Kierować ruch tylko do odczytu do replik za pomocą PgBouncer lub inteligentnego sterownika i akceptować kompromis w postaci nieaktualności danych

Repliki tylko do odczytu i kierowanie połączeniami to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Dlaczego repliki odczytowe?

Obciążenia z przewagą odczytów mogą przekierowywać zapytania SELECT do replik:

  • Serwer główny obsługuje zapisy
  • Repliki obsługują większość odczytów
  • Horyzontalne skalowanie odczytu bez shardingu

Zastrzeżenie dotyczące spójności ostatecznej

Repliki mają opóźnienie względem serwera głównego. Użytkownik, który właśnie złożył zamówienie, może jeszcze nie zobaczyć go na replice. Można wtedy:

  • Kierować odczyty po zapisie do serwera głównego
  • Poczekać, aż replika nadrobi opóźnienie
  • Zapisać stan po operacji zapisu w pamięci podręcznej aplikacji

Strategie routingu

  1. Routing na poziomie aplikacji — kod aplikacji wybiera serwer główny lub replikę
  2. Routing na poziomie sterownika — JDBC, pgjdbc i pgxpool zapewniają pule ze świadomością serwera głównego i repliki
  3. Routing na poziomie proxy — pgpool, pgbouncer lub HAProxy z wykrywaniem odczytów i zapisów

Routing na poziomie aplikacji

Dwie pule połączeń — po jednej dla każdej roli:

const primary = new Pool({ host: 'primary', ... });
const replica = new Pool({ host: 'replica', ... });

// reads go to replica:
await replica.query('SELECT ...');

// writes (and read-your-writes) go to primary:
await primary.query('INSERT ...');

PgPool-II

Proxy analizujące SQL i kierujące zapytania SELECT do replik, a operacje zapisu do primary. Obsługuje równoważenie obciążenia i pulę połączeń:

# pgpool.conf
backend_hostname0 = 'primary'
backend_hostname1 = 'replica1'
load_balance_mode = on

HAProxy z kontrolami pg_isready

HAProxy nie rozumie SQL, ale może kierować ruch na podstawie portu — jeden frontend do zapisów (do primary), a drugi do odczytów (do replik z kontrolami stanu):

frontend writes
  bind *:5432
  default_backend primary_pool

frontend reads
  bind *:5433
  default_backend replicas_pool
  balance roundrobin

Endpointy AWS RDS

RDS udostępnia jeden endpoint zapisu oraz endpoint odczytu, który równoważy obciążenie między wszystkimi replikami — to najprostsze rozwiązanie w chmurze.

Uwzględnianie opóźnienia replikacji

Należy monitorować opóźnienie i unikać kierowania ruchu do replik, które są zbyt daleko w tyle:

-- On primary:
SELECT client_addr, replay_lag FROM pg_stat_replication;

-- HAProxy / pgpool can use a custom health check that fails if replay_lag > threshold.

Wzorzec przypiętej sesji

Aby zapewnić funkcję „odczyt własnych zapisów”, należy przypiąć sesję użytkownika do primary na N sekund po zapisie. Można też oznaczyć zapis jego LSN i zaczekać na odtworzenie go przez replikę przed obsłużeniem odczytu.

Oczekiwanie na podstawie LSN

Po zapisie należy pobrać LSN, a przed odczytem z repliki zaczekać, aż replika odtworzy dane do tego LSN:

-- After write on primary:
SELECT pg_current_wal_lsn();        -- save this

-- Before read on replica:
SELECT pg_last_wal_replay_lsn() >= $saved_lsn;
-- spin or wait until true

Pamięć podręczna jako replika

Czasami Redis / Memcache pełni funkcję „repliki” na potrzeby skalowania odczytów — w przypadku często używanych kluczy jest znacznie szybszy niż kolejna instancja Postgresa.

Kiedy NIE używać replik

Jeśli obciążenie jest zdominowane przez zapisy, repliki zazwyczaj tylko zwiększają koszty, nie zapewniając większej szybkości. Jeśli odczyty z primary są już szybkie, repliki mogą nie być potrzebne.

Odzyskiwanie po awarii a skalowanie odczytu

Repliki przeznaczone do przełączania po awarii HA to coś innego niż repliki służące do skalowania odczytów. Często używa się obu rodzajów.

Podsumowanie

Repliki odczytu skalują odczyty, ale wiąże się z nimi opóźnienie.

  • Routing na poziomie aplikacji, sterownika lub proxy
  • Opóźnienie replikacji = spójność ostateczna
  • Przypięcie do primary lub oczekiwanie na LSN zapewnia odczyt własnych zapisów
  • Należy monitorować opóźnienie i wracać do primary, jeśli replika jest zbyt daleko w tyle

Szybkie sprawdzenie

Użytkownik publikuje komentarz i natychmiast odświeża stronę. Strona odczytuje dane z repliki, ale nie wyświetla komentarza. Na czym polega problem i jakie jest jedno możliwe rozwiązanie?

Często zadawane pytania

Czy lekcja „Repliki tylko do odczytu i kierowanie połączeniami” jest bezpłatna?

Tak — pełny tekst „Repliki tylko do odczytu i kierowanie połączeniami” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Repliki tylko do odczytu i kierowanie połączeniami”?

Kierować ruch tylko do odczytu do replik za pomocą PgBouncer lub inteligentnego sterownika i akceptować kompromis w postaci nieaktualności danych Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Repliki tylko do odczytu i kierowanie połączeniami”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Replikacja strumieniowa i WAL
  2. Replikacja logiczna na potrzeby shardingu
  3. Failover i wybór lidera (Patroni, Stolon)
  4. Repliki tylko do odczytu i kierowanie połączeniami
← Powrót do SQL Academy