PostgreSQL Performance & Query Optimization · Lekcja

Skalowanie odczytu za pomocą Hot Standby i równoważenia obciążenia

Dowiedz się, jak przenosić ruch odczytu do replik podrzędnych z replikacją strumieniową, rozumieć opóźnienie replikacji oraz kierować zapytania między węzłem głównym a replikami w celu horyzontalnego skalowania odczytu.

Lekcja 4 z 413 kroki

Skalowanie odczytu za pomocą Hot Standby i równoważenia obciążenia to bezpłatna lekcja PostgreSQL Performance & Query Optimization 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 PostgreSQL Performance & Query Optimization, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PostgreSQL Performance & Query Optimization zawiera 4 lekcji w sumie.

Dlaczego skalować odczyty?

Pojedynczy primary może stać się wąskim gardłem, gdy rośnie ruch z przewagą odczytów. Kierowanie instrukcji SELECT do replik do odczytu odciąża primary, który może obsługiwać zapisy, a także pozwala horyzontalnie skalować odczyty przez dodawanie kolejnych standby.

Podstawy hot standby

Hot standby to replika strumieniowa, która przyjmuje zapytania tylko do odczytu, jednocześnie ciągle stosując zmiany otrzymywane z primary. Dzięki write-ahead log (WAL) pozostaje niemal zsynchronizowana.

Włączanie zapytań odczytujących na standby

Na serwerze standby parametr hot_standby musi być włączony (współcześnie jest to ustawienie domyślne), aby serwer odpowiadał na zapytania zamiast tylko po cichu odtwarzać WAL.

SHOW hot_standby;

Wykrywanie trybu odzyskiwania

Aplikacja może sprawdzić na dowolnym węźle, czy jest on standby tylko do odczytu. Wynik true oznacza, że nie należy kierować tutaj zapisów.

SELECT pg_is_in_recovery();

Zrozumienie opóźnienia replikacji

Serwery standby stosują WAL z niewielkim opóźnieniem względem primary, dlatego odczyt może nie uwzględniać ostatniego zapisu. Ta różnica to opóźnienie replikacji. W przypadku większości odczytów nie stanowi ono problemu, ale przepływy read-after-write wymagają ostrożności.

Pomiar opóźnienia

Na serwerze standby należy porównać, jak bardzo odtwarzanie jest opóźnione względem ostatniej odebranej pozycji WAL, aby oszacować opóźnienie czasowe.

SELECT now() - pg_last_xact_replay_timestamp() AS replay_lag;

Kierowanie ruchu w aplikacji

Najprostszy wzorzec polega na utrzymywaniu dwóch puli połączeń: jednej z primary do zapisów i jednej z replikami do odczytów. Aplikacja wybiera pulę na podstawie rodzaju operacji.

Spójność read-after-write

Bezpośrednio po zapisaniu danych przez użytkownika odczyt z opóźnionej repliki może zwrócić nieaktualne wyniki. Możliwe rozwiązania:

  • Przez krótki czas kierować kolejne odczyty tego użytkownika do primary
  • Czekać, aż replika nadrobi zmiany do pozycji WAL odpowiadającej zapisowi

Równoważenie obciążenia między replikami

Pooler lub proxy, takie jak PgBouncer, Pgpool-II albo HAProxy, może rozdzielać połączenia odczytujące między kilka serwerów standby, rozkładając obciążenie i zapewniając przełączenie awaryjne, jeśli jedna z replik przestanie działać.

Kompromisy i ograniczenia

Repliki do odczytu są potężnym rozwiązaniem, ale nie działają magicznie:

  • Nie zwiększają przepustowości zapisów
  • Opóźnienie oznacza eventual consistency, a nie natychmiastową spójność na replikach
  • Długie zapytania na serwerze standby mogą kolidować z odtwarzaniem WAL

Planując kierowanie ruchu, należy uwzględnić te ograniczenia.

Monitorowanie replikacji z primary

Primary udostępnia w widoku statystyk informacje o każdym połączonym serwerze standby, w tym o opóźnieniu każdego z nich. Należy to obserwować, aby wykryć replikę, która niebezpiecznie pozostaje w tyle.

SELECT client_addr, state,
       replay_lag
FROM pg_stat_replication;

Szybki sprawdzian

Proszę sprawdzić swoją wiedzę na temat skalowania odczytów.

Podsumowanie

Opanowali Państwo skalowanie odczytów:

  • Hot standby obsługuje zapytania tylko do odczytu podczas odtwarzania WAL
  • pg_is_in_recovery() identyfikuje serwer standby
  • Opóźnienie replikacji oznacza, że repliki mogą zawierać nieco nieaktualne dane
  • Zapisy należy kierować do primary, a odczyty do replik; trzeba obsłużyć przepływy read-after-write
  • Proxy pozwala równoważyć obciążenie i przełączać ruch awaryjnie między replikami
Bezpłatny start

Ucz się SQL dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
22
Lekcje
88

Często zadawane pytania

Czy lekcja „Skalowanie odczytu za pomocą Hot Standby i równoważenia obciążenia” jest bezpłatna?

Tak — pełny tekst „Skalowanie odczytu za pomocą Hot Standby i równoważenia obciążenia” 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 PostgreSQL Performance & Query Optimization, przejdź na CoddyKit PRO. Kurs PostgreSQL Performance & Query Optimization zawiera 4 lekcji w sumie.

Co nauczysz się w „Skalowanie odczytu za pomocą Hot Standby i równoważenia obciążenia”?

Dowiedz się, jak przenosić ruch odczytu do replik podrzędnych z replikacją strumieniową, rozumieć opóźnienie replikacji oraz kierować zapytania między węzłem głównym a replikami w celu horyzontalnego… Ćwiczysz PostgreSQL Performance & Query Optimization 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ąć PostgreSQL Performance & Query Optimization?

Nie wymagamy żadnego doświadczenia. PostgreSQL Performance & Query Optimization 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 „Skalowanie odczytu za pomocą Hot Standby i równoważenia obciążenia”?

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 PostgreSQL Performance & Query Optimization?

Tak. Każda lekcja PostgreSQL Performance & Query Optimization 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. Pula połączeń z PgBouncer
  2. Strategie replikacji (strumieniowa, logiczna)
  3. Sharding i rozproszony PostgreSQL
  4. Skalowanie odczytu za pomocą Hot Standby i równoważenia obciążenia
← Powrót do PostgreSQL Performance & Query Optimization