Wzorzec odciążania bramy

Azure Application Gateway

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.

Diagram wzorca odciążania 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.