Odciążanie funkcjonalności usług udostępnionych lub specjalnych na serwerze proxy bramy. Ten wzorzec może uprościć tworzenie aplikacji dzięki przeniesieniu funkcjonalności usług udostępnionych, takiej jak korzystanie z certyfikatów SSL, z innych części aplikacji do bramy.
Kontekst i problem
Niektóre funkcje, często używane w wielu usługach, wymagają konfiguracji, zarządzania i konserwacji. Jeśli usługa udostępniona lub specjalna jest rozpowszechniana w każdym wdrożeniu aplikacji, zwiększa to narzut administracyjny oraz prawdopodobieństwo wystąpienia błędu wdrożenia. Wszelkie aktualizacje funkcji udostępnionej muszą zostać wdrożone we wszystkich usługach, które współużytkują tę funkcję.
Prawidłowe rozwiązywanie problemów z zabezpieczeniami (walidacja tokenów, szyfrowanie, zarządzanie certyfikatami SSL) i wykonywanie innych złożonych zadań może wymagać wysoce specjalistycznych umiejętności od członków zespołu. Na przykład certyfikat, którego potrzebuje aplikacja, musi zostać skonfigurowany i wdrożony we wszystkich wystąpieniach aplikacji. Każde nowe wdrożenie wymaga zarządzania certyfikatem w celu zapobieżenia jego wygaśnięciu. Wszystkie pospolite certyfikaty, które wkrótce wygasną, muszą zostać zaktualizowane, przetestowane i zweryfikowane w każdym wdrożeniu aplikacji.
Wdrożenie innych typowych usług, takich jak uwierzytelnianie, autoryzacja, rejestrowanie, monitorowanie lub ograniczanie przepustowości, w wielu wdrożeniach może być trudne, podobnie jak zarządzanie nimi. Lepszym rozwiązaniem może być skonsolidowanie tego typu funkcjonalności, aby ograniczyć obciążenie i ryzyko wystąpienia błędów.
Rozwiązanie
Odciążaj niektóre funkcje do bramy, szczególnie kwestie związane z zarządzaniem certyfikatami, uwierzytelnianiem, kończeniem żądań SSL, monitorowaniem, tłumaczeniem protokołu lub ograniczaniem przepustowości.
Na poniższym diagramie przedstawiono bramę, która przerywa przychodzące połączenia SSL. Żąda danych w imieniu oryginalnego obiektu żądającego z dowolnego serwera HTTP nadrzędnego bramy.
Oto zalety tego wzorca:
Uproszczenie tworzenia usług dzięki pozbyciu się konieczności rozpowszechniania i obsługiwania zasobów pomocniczych, takich jak certyfikaty serwera internetowego i konfiguracja bezpiecznych witryn internetowych. Prostsza konfiguracja ułatwia zarządzanie, skalowanie oraz wykonywanie uaktualnień usług.
Dedykowane zespoły mogą implementować funkcje wymagające specjalistycznej wiedzy, na przykład zabezpieczenia. Dzięki temu główny zespół może skupić się na funkcjonalności aplikacji, pozostawiając specjalistyczne, przekrojowe zagadnienia odpowiednim ekspertom.
Zapewnienie pewnego poziomu spójności rejestrowania oraz monitorowania żądań i odpowiedzi. Nawet jeśli usługa nie ma odpowiednich instrumentów, można skonfigurować bramę pod kątem zapewnienia minimalnego poziomu monitorowania i rejestrowania.
Problemy i kwestie do rozważenia
- Upewnij się, że brama jest wysoce dostępna i odporna na awarie. Unikaj pojedynczych punktów awarii, uruchamiając wiele wystąpień bramy.
- Brama powinna zostać zaprojektowana pod kątem wymagań aplikacji i punktów końcowych dotyczących pojemności i skalowania. Zadbaj o to, aby brama nie stanowiła wąskiego gardła dla aplikacji i aby była wystarczająco skalowalna.
- W ramach odciążania przenoś tylko te funkcje, które są używane przez całą aplikację, takie jak zabezpieczenia lub transfer danych.
- Logika biznesowa nigdy nie powinna być odciążona do bramy.
- Jeśli musisz śledzić transakcje, weź pod uwagę generowanie identyfikatorów korelacji dla celów rejestrowania.
Kiedy używać tego wzorca
Użyj tego wzorca, gdy:
- We wdrożeniu aplikacji jest obecne jakieś przekrojowe zagadnienie, takie jak certyfikaty SSL lub szyfrowanie.
- Występuje funkcja typowa dla wdrożeń aplikacji, które mogą mieć różne wymagania dotyczące zasobów, na przykład pamięci, pojemności magazynu lub połączeń sieciowych.
- Chcesz przenieść odpowiedzialność za zadania, takie jak bezpieczeństwo sieci, ograniczanie przepustowości lub kwestie związane z granicą sieci, na bardziej wyspecjalizowany zespół.
Ten wzorzec może być nieodpowiedni, jeśli wprowadza sprzężenie między usługami.
Projekt obciążenia
Architekt powinien ocenić, w jaki sposób wzorzec odciążania bramy może być używany w projekcie obciążenia, aby sprostać celom i zasadom opisanym w filarach platformy Azure Well-Architected Framework. Na przykład:
Filar | Jak ten wzorzec obsługuje cele filaru |
---|---|
Decyzje projektowe dotyczące niezawodności pomagają obciążeniu stać się odporne na awarię i zapewnić, że zostanie przywrócony do w pełni funkcjonalnego stanu po wystąpieniu awarii. | Odciążanie tej odpowiedzialności za bramę zmniejsza złożoność kodu aplikacji w węzłach zaplecza. W niektórych przypadkach odciążanie całkowicie zastępuje funkcjonalność funkcją zapewnianą przez niezawodną platformę. - RE:01 Prostota i wydajność |
Decyzje dotyczące projektowania zabezpieczeń pomagają zapewnić poufność, integralność i dostępność danych i systemów obciążenia. | Dodanie bramy do przepływu żądań umożliwia scentralizowanie funkcji zabezpieczeń, takich jak zapory aplikacji internetowej i połączenia TLS z klientami. Wszystkie odciążone funkcje udostępniane przez platformę oferują już zwiększone zabezpieczenia. - SE:06 Kontrolki sieci - SE:08 Wzmacnianie zabezpieczeń zasobów |
Optymalizacja kosztów koncentruje się na utrzymaniu i poprawie zwrotu obciążenia z inwestycji. | Ten wzorzec umożliwia przekierowywanie kosztów z zasobów, które zostaną wydane na węzeł do implementacji bramy. Koszty w modelu scentralizowanego przetwarzania są często niższe niż koszty modelu rozproszonego. - CO:14 Konsolidacja |
Doskonałość operacyjna pomaga zapewnić jakość obciążeń dzięki ustandaryzowanym procesom i spójności zespołu. | W tym wzorcu konfiguracja i utrzymanie odciążonej funkcji jest z pojedynczego punktu zamiast zarządzania nią z wielu węzłów. - OE:04 Narzędzia i procesy |
Wydajność pomaga wydajnie sprostać zapotrzebowaniu dzięki optymalizacjom skalowania, danych, kodu. | Dodanie bramy odciążającej do procesu żądania umożliwia użycie mniejszej ilości zasobów na węzeł, ponieważ funkcje są scentralizowane w bramie. Implementację funkcji odciążonego można zoptymalizować niezależnie od kodu aplikacji. Odciążone funkcje udostępniane przez platformę prawdopodobnie będą wysoce wydajne. - PE:03 Wybieranie usług |
Podobnie jak w przypadku każdej decyzji projektowej, należy rozważyć wszelkie kompromisy w stosunku do celów innych filarów, które mogą zostać wprowadzone przy użyciu tego wzorca.
Przykład
W następującej konfiguracji użyto serwera Nginx jako urządzenia odciążającego SSL. Jej zadanie polega na zakończeniu przychodzącego połączenia SSL i przekazaniu go do jednego z trzech nadrzędnych serwerów HTTP.
upstream iis {
server 10.3.0.10 max_fails=3 fail_timeout=15s;
server 10.3.0.20 max_fails=3 fail_timeout=15s;
server 10.3.0.30 max_fails=3 fail_timeout=15s;
}
server {
listen 443;
ssl on;
ssl_certificate /etc/nginx/ssl/domain.cer;
ssl_certificate_key /etc/nginx/ssl/domain.key;
location / {
set $targ iis;
proxy_pass http://$targ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
}
}
Na platformie Azure można to osiągnąć, konfigurując kończenie żądań SSL w usłudze Application Gateway.