English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

gość
1 / ?
powrót do lekcji

Co stoi przed niemal każdym Serwisem Web

Witamy

Jeśli wpiszesz example.com w przeglądarce, prawdopodobnie nigdy nie osiągniesz maszyny, która faktycznie uruchamia aplikację. Dostaniesz się do maszyny, która przekierowuje żądanie do jednej, która robi to. Ta maszyna przekierowująca nosi nazwę: wsert pośredni.

Ten lekcja nauczysz się, co robi werset pośredni, dlaczego niemal każdy publiczny serwis web ukrywa się za nim oraz co trzy zadania warstwa brzegowa wykonuje jednocześnie.

Po zakończeniu będziesz rozumieć:

- Różnicę między klientem, pośrednikiem i pochodzeniem

- Dlaczego pośrednik przed pochodzeniem chroni, skaluje i pozwala wymieniać elementy bez tego, aby ktoś zauważył

- Trzy zadania wykonywane jednocześnie przez werset pośredni: ukrywanie pochodzenia, zakończenie TLS i rozkład obciążenia między replikami

- Jak żądanie podróżuje od przeglądarki do pośrednika, a następnie do górnej strony i z powrotem, krok po kroku

Po zakończeniu będziesz racjonalnie argumentować o umieszczeniu pośredników, oddzielnym zainteresowaniu na brzegu i dlaczego sterty pośrednie wielokrotnie, podczas gdy pojedyncze pochodzenie nie robi tego.

Werset Pośredni vs Werset Przedrostowy

Dwie Kierunki Pośredników

Obydwa rodzaje pośredników stoją między dwiema stronami i przekazują ruch. Różnią się którą stronę reprezentują.

Werset przedrostowy: stoi przed grupą serwera. Świat zewnętrzny (klienci) rozmawia z adresem pośrednika; klienci nie wiedzą, że prawdziwy serwis ukrywa się za nim. Niemal każdy publiczny serwis web używa tego.

Werset pośredni: stoi przed grupą klientów. Serwery zewnętrzne (klientów) rozmawiają z adresem pośrednika; serwery nie wiedzą, że klienty ukrywają się za nim. Wszystkie korporacyjne wyjścia pośredników, filtry treści i SOCKS pasują do tego.

Mnemonika: werset pośredni ukrywa klientów przed serwerami. Werset przedrostowy ukrywa serwery przed klientami.

Dlaczego warto znać kierunek? Praca, tryby awaria, a także granica bezpieczeństwa różnią się. Werset pośredni obawia się, z kim jego użytkownicy się skontaktują; werset przedrostowy obawia się, z kim kontaktuje się jego serwery.

Klient wysyłający ruch przez obie rodzaje pośredników podróżuje: klient -> werset pośredni -> internet -> werset przedrostowy -> pochodzenie.

Mała firma prowadzi aplikację do rozmów. Chce, aby każde żądanie z zewnątrz trafiło do maszyny, która ukrywa rzeczywiste serwery chat za nią. Jakiego rodzaju pośrednik potrzebują i do czego zewnętrzny użytkownik się połączy?

Dlaczego Tyle Żyje na Krawędzi

Warstwa Krawędziowa Zarabia na Łyku

Reverse proxy wykonuje trzy prace jednocześnie. Każda z nich usprawiedliwia warstwę; wykonywanie wszystkich trzech na tej samej adresie wyjaśnia, dlaczego niemal każda produkcyjna architektura weba ma tę samą formę na froncie.

Praca 1: Ukrywaj początek. Proxy odpowiada na publiczny IP. Tyle serwery tylne znajdują się na prywatnych IP, których internet nie może dotrzeć. Atakujący, który chce uderzyć w początek, musi najpierw zakłócić proxy.

Praca 2: Zakończ TLS. Proxy posiada certyfikat dla example.com i odkodowuje przychodzące żądania HTTPS. Serwery tylne komunikują się z proxy w prostym HTTP (lub prostszym TLS wewnętrznym) przez zaufane segmenty sieci. Polityka aktualizacji, odnawiania certyfikatów oraz szyfrowania znajduje się w jednym miejscu.

Praca 3: Rozdziel ładunek. Proxy wybiera, która z serwerów tylnych obsłuży każde żądanie. Serwery tylne za jednym proxy tworzą pulę; proxy wybiera jedną na żądanie, stosując strategię (w rondzie, najmniej połączeń, hasz na nagłówku). Dodanie zdolności oznacza dodanie serwera do puli, a nie mówienie każdemu klientowi nowego adresu.

Każda praca to mała programista. Wspólnie wyjaśniają, dlaczego warstwa tak prosta jak 'Caddy przed aplikacją Pythona' ma większy wpływ na projekt niż sama aplikacja Python.

Reverse proxy wykonujący trzy prace: ukrywanie początku, zakończanie TLS, rozdzielanie ładunku

Projektowanie dla Wszystkich Trzech

Twoja ekipa prowadzi mały API na pojedynczym procesie Pythona, który słucha na porcie 8000 na pojedynczej VM. Ruch wzrósł tak, że jedna VM nie może utrzymywać, a przegląd bezpieczeństwa wykazał, że VM ma publiczny IP i swoje certyfikaty TLS.

Zdecydowałeś, że wstawię reverse proxy przed. Narysujmy układ: gdzie wskazuje DNS, gdzie certyfikat żyje, jak ładunek dociera do tylnej bazy, a co się zmienia w oryginalnej VM?

Przejdź przez nową architekturę. Zróbmy się z czterema elementami: cel dla DNS, lokalizacja zakończenia TLS, strategia rozdziału ładunku i to, co oryginalna VM traci lub zachowuje.

Zamiana składnika bez, żeby ktokolwiek nie zauważył

Odpowiednik Swobodny

Stara adwokat-filozofia z zakresu nauki o komputerach mówi: każde zadanie można rozwiązać przez dodanie kolejnej warstwy odwołania (oprócz zadania z zbyt dużą liczbą warstw odwołania). Wirtualny serwer proxy to jedno z najbardziej użytecznych odwołań w systemach rozproszonych.

Co kupuje Cię:

- Zamienne tylne elementy. Przenieś aplikację z Python na Go? Przeniesiesz się z jednego centrum danych na inne? Wdropisz nową wersję z zerowym czasem przestoju? Każde z tych zdarzeń dzieje się za stabilną publiczną adresą. Nic się nie zmienia dla użytkowników.

- Odrębne skalowanie. Kolej proxy skaluje się na podstawie pasma i CPU na poziomie TLS. Tylne elementy skalują się na podstawie pracy aplikacji. Każde rozwija się na własnej osi, ponieważ żyją na różnych maszynach.

- Zamknięcie awarii. Złe wdrozenie na tylnej maszynie nie wyłączy publicznego adresu. Proxy nadal działa; wprowadzasz poprawkę lub cofasz zmiany; świat ponownie nawiązuje połączenie, gdy tylne urządzenie odzyskuje się.

- Zagadnienia przecinające w jednym miejscu. Ograniczanie szybkości, blokowanie przez region, rejestrowanie żądań, modyfikowanie nagłówków, kopiowanie, kompresja odpowiedzi: to wszystko występuje na proxy. Kody backendu pozostaje skupiony na aplikacji.

Bez proxy każde z tych problemów musi istnieć w procesie aplikacji. Z proxy istnieją na jednej warstwie, którą jeden zespół zarządza.

Koszt: kolejna warstwa do zarządzania. Doświadczający zespoły akceptują koszty, ponieważ warstwa proxy sama jest stanowa i skaluje się w poziomie; zastąpienie jednego proxy dwoma nie wymaga żadnej koordynacji.

Przełączanie się między niebieskim a zielonym za pośrednictwem proxy

Twoja ekipa realizuje wersję 1 API na trzech maszynach tylnej (błękitnej puli) za pomocą proxy wirtualnego serwera. Chcesz wdrożyć wersję 2 z możliwością szybkiego cofnięcia się, gdy coś się stanie, w mniej niż trzydzieści sekund.

Wyruszysz z trzema nowymi maszynami tylnej (zielona pulka) działającą wersję 2, obok puli niebieskiej, ale jeszcze nie kierujesz do nich żadnego ruchu.

Wyjaśnij, w jaki sposób wirtualny serwer proxy pozwala Ci przełączyć się z niebieskiego na zielone oraz szybko cofnąć się do wersji, a także wyjaśnij, co nie byłoby możliwe, gdyby aplikacja bezpośrednio była dostępna dla klientów bez proxy.

Od Przeglądarki do Tylnej Siaty i Z powrotem

Przeprowadź Jedne Pytanie od początku do końca

Śledź pojedynczy HTTPS GET https://api.example.com/users/42 przez odwrotnej proxy przed pulą tylnej siatki.

Krok 1: Rozwiązywanie DNS. Przeglądarka zapytuje o rozwiązywanie DNS api.example.com. Rozwiązywanie DNS zwraca publiczny adres IP proxy (na przykład 203.0.113.10). Przeglądarka otwiera połączenie TCP z 203.0.113.10:443.

Krok 2: Rękojmia TLS. Proxy prezentuje swój certyfikat dla api.example.com. Przeglądarka weryfikuje certyfikat, dwa strony zgadzają się na klucz sesyjnej, & kanał szyfrowany otwiera się.

Krok 3: Zapytanie HTTP wewnętrznie TLS. Przeglądarka wysyła GET /users/42 HTTP/1.1\nHost: api.example.com\n.... Proxy odszyfrowuje bajty żądania.

Krok 4: Wybór tylnej siatki. Proxy sprawdza swoją pulę tylnej siatki dla api.example.com i wybiera jeden backend (na przykład 10.0.0.21:8000) stosując swoją strategię równoważenia obciążenia.

Krok 5: Zapytanie w górę. Proxy otwiera (lub wykorzystuje ponownie) proste połączenie HTTP z 10.0.0.21:8000 i przekierowuje żądanie. Proxy może modyfikować nagłówki podczas przepływu: dodać X-Forwarded-For: <client-ip>, ustawić Host: poprawnie, usunąć nagłówki takie jak Connection.

Krok 6: Obliczenia tylnej siatki. Aplikacja tylnej siatki czyta żądanie, wyszukuje w bazie danych, buduje odpowiedź JSON.

Krok 7: Odpowiedź w górę. Tylne siaty wysyła odpowiedź z powrotem do proxy jako proste HTTP.

Krok 8: Ostateczna odpowiedź brzegowa. Proxy może modyfikować lub kompresować odpowiedź, szyfrować ją z powrotem przez sesję TLS i wysłać ją do przeglądarki.

Krok 9: Życie cyklu połączenia. Sesja TLS pozostaje zwykle otwarta dla następnego żądania (HTTP/2 multiplexuje wiele żądań na jednym połączeniu). Połączenie proxy-tylnej siatki często puluje dla ponownego wykorzystania.

Każda publiczna usługa internetowa realizuje pewną wariację tego kształtu. Znamienie kroków pozwala na rozumowanie o tym, gdzie opóźnienia gromadzą się, gdzie logowanie należy umieścić, & gdzie błąd może ukryć się.

Cykl życia żądania: przeglądarka, DNS, proxy, TLS, tylnej siatki, odpowiedź

Gdzie Minęło Czas?

Użyownik skarży się, że API wydaje się wolne. Zmierzysz i znajdziesz, że żądanie zajmuje 850 ms od początku do końca. Rejestrator serwera na stronie backendu pokazuje, że aplikacja obsłużyła żądanie w 40 ms. Rejestrator proxy pokazuje, że proxy wydało 50 ms na swoją stronę pracy (rękojma TLS + routingu + pisanie odpowiedzi).

Gdzie poszło kolejne 760 ms? Wymień co najmniej dwóch kandydatów, którzy mieszkają poza proxy i czasem przetwarzania serwera, oraz wyjaśnij, w jaki sposób każdy z nich pojawiłby się w pomiarach.

Projektowanie Minimalnej Krawędzi dla Nowego Usługi

Synteza

Nauczysz się różnicę między forward a reverse proxy, trzy zadania, które reverse proxy wykonuje jednocześnie, dlaczego ukrywanie źródła przynosi zysk każdorazowo, gdy trzeba coś zmienić, oraz jak żądanie przepływa krok po kroku przez krawędź.

Teraz zastosuj to.

Mała grupa planuje wprowadzenie nowej usługi o nazwie notes.example.com. Użytkownicy będą czytać i wprowadzać swoje notatki. Drużyna będzie prowadzić dwa wirtualne maszyny backendowe podczas startu i spodziewa się wzrostu do dziesięciu w przyszłości roku. Chcą HTTPS dla użytkowników, stopniowe wprowadzenie nowych wersji oraz brak udostępniania publicznych adresów IP backendów.

Zaprojektuj architekturę krawędziową dla notes.example.com. Zwróć uwagę na to, w jakim miejscu wskazówka DNS, gdzie żyje certyfikat TLS, jak żądania docierają do backendu, jakie zmiany zachodzą, gdy rosną z dwóch do dziesięciu backendów, oraz na jedną przeciwstawność przeciwstawności (ograniczenie szybkości, protokół rejestracji, przekształcanie nagłówków itp.), którą dodałbyś na krawędzi, a nie w środku aplikacji.

Krok Następny Kursu

Krok Następny Kursu

Ten lekcja ustaliła kształt warstwy krawędziowej. Cztery kolejne lekcje w tym kursie rozwijają ją:

- Skalowanie Poziome Niezależne: dlaczego strefa proxy (& tyle backendów za nią) mnoży się tanio, & matematyka dla rozmiaru liczb replik w okresie wzrostu.

- Rozdział Przepływu / Wyjściowego: dlaczego pojedyncza skrzynka proxy obsługująca obie strony - wpływające & wyjściowe - kończy się w nieoczekiwany sposób, & jak podzielić warstwy.

- Tryby Awarii & Promień Eksplozji: jak pojedyncze zmiany konfiguracyjne przenikają się w awarię, & jak pisać bezwinne zadania działające na zapobieżenie powtarzającym się problemom.

- Narzędzia do Obserwacji & Pojemność: co i jak pomiarów na krańcu przepływu, aby dowiedzieć się, że coś jest złamane przed użytkownikami.

Każde lekcja samodzielnie. Wspólnie dają Ci mentalny model floty skalującej się w sieci.

Dodatkowa lekcja: geometry_of_proxies_and_origins przekształca wszystko z tej lekcji w kierunkowy graf & bada, co teoria grafów mówi o ścieżce żądania.

Brawo. Dalej.