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.
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
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
- Pula połączeń z PgBouncer
- Strategie replikacji (strumieniowa, logiczna)
- Sharding i rozproszony PostgreSQL
- Skalowanie odczytu za pomocą Hot Standby i równoważenia obciążenia