Korzystanie z wtyczek

Wyświetlasz dokumentację Apigee Edge.
Przejdź do dokumentacji Apigee X.
info

Edge Microgateway w wersji 3.0.x

Odbiorcy

Ten temat jest przeznaczony dla operatorów Edge Microgateway, którzy chcą korzystać z istniejących wtyczek, które są zainstalowane razem z mikrobramą. Omówiono w nim też szczegółowo wtyczki do ochrony przed nagłymi wzrostami ruchu i limitów (obie są dostępne w ramach instalacji). Jeśli jesteś deweloperem, który chce tworzyć nowe wtyczki, przeczytaj artykuł Tworzenie wtyczek niestandardowych.

Co to jest wtyczka Edge Microgateway?

Wtyczka to moduł Node.js, który dodaje funkcje do Edge Microgateway. Moduły wtyczek mają spójny wzorzec i są przechowywane w lokalizacji znanej Edge Microgateway, co umożliwia mikrobramie automatyczne wykrywanie i wczytywanie tych modułów. Edge Microgateway zawiera kilka istniejących wtyczek. Możesz też tworzyć wtyczki niestandardowe, jak opisano w artykule Tworzenie wtyczek niestandardowych.

Istniejące wtyczki dołączone do Edge Microgateway

Podczas instalacji Edge Microgateway jest dostarczanych kilka istniejących wtyczek. Należą do nich:

Wtyczka Ta opcja jest domyślnie włączona. Opis
Analytics Tak Wysyła dane Analytics z Edge Microgateway do Apigee Edge.
OAuth Tak Dodaje do Edge Microgateway weryfikację tokena OAuth i klucza interfejsu API. Przeczytaj artykuł Konfigurowanie Edge Microgateway.
Limit Nie Wymusza limit żądań do Edge Microgateway. Do przechowywania limitów i zarządzania nimi używa Apigee Edge the quotas. Przeczytaj artykuł Korzystanie z wtyczki limitów.
Ochrona przed nagłymi wzrostami ruchu Nie Chroni przed nagłymi wzrostami ruchu i atakami DoS. Przeczytaj artykuł Korzystanie z wtyczki ochrony przed nagłymi wzrostami ruchu.
Nagłówek – wielkie litery Nie Przykładowy serwer proxy z komentarzami, który ma pomóc deweloperom w pisaniu wtyczek niestandardowych. Przeczytaj artykuł Edge Microgateway sample plugin.
Gromadzenie żądań Nie Gromadzi dane żądań w jednym obiekcie przed przekazaniem ich do następnego modułu obsługi w łańcuchu wtyczek. Przydatne do pisania wtyczek transformujących, które muszą działać na jednym, zgromadzonym obiekcie treści żądania.
Gromadzenie odpowiedzi Nie Gromadzi dane odpowiedzi w jednym obiekcie przed przekazaniem ich do następnego modułu obsługi w łańcuchu wtyczek. Przydatne do pisania wtyczek transformujących, które muszą działać na jednym, zgromadzonym obiekcie treści odpowiedzi.
Transformacja – wielkie litery Nie Przekształca dane żądania lub odpowiedzi. Ta wtyczka stanowi przykład najlepszej praktyki implementacji wtyczki transformującej. Przykładowa wtyczka wykonuje prostą transformację (konwertuje dane żądania lub odpowiedzi na wielkie litery), ale można ją łatwo dostosować do wykonywania innych rodzajów transformacji, np. XML na JSON.
JSON2XML Nie Przekształca dane żądania lub odpowiedzi na podstawie nagłówków Accept lub Content-Type. Szczegółowe informacje znajdziesz w dokumentacji wtyczki w GitHubie.
Limit – pamięć Nie Wymusza limit żądań do Edge Microgateway. Przechowuje limity i zarządza nimi w pamięci lokalnej.
Sprawdzanie stanu Nie Zwraca informacje o procesie Edge Microgateway – wykorzystanie pamięci, wykorzystanie procesora itp. Aby użyć wtyczki, wywołaj adres URL /healthcheck w instancji Edge Microgateway. Ta wtyczka ma być przykładem, którego możesz użyć do zaimplementowania własnej wtyczki sprawdzającej stan.

Gdzie znaleźć istniejące wtyczki

Istniejące wtyczki dołączone do Edge Microgateway znajdują się tutaj, gdzie [prefix] to katalog prefiksu npm. Jeśli nie możesz znaleźć tego katalogu, przeczytaj artykuł Gdzie jest zainstalowana Edge Microgateway.

[prefix]/lib/node_modules/edgemicro/node_modules/microgateway-plugins

Dodawanie i konfigurowanie wtyczek

Aby dodać i skonfigurować wtyczki, wykonaj te czynności:

  1. Zatrzymaj Edge Microgateway.
  2. Otwórz plik konfiguracji Edge Microgateway. Szczegółowe informacje znajdziesz w artykule Wprowadzanie zmian w konfiguracji opcji.
  3. Dodaj wtyczkę do elementu plugins:sequence w pliku konfiguracyjnym w ten sposób. Wtyczki są wykonywane w kolejności, w jakiej występują na tej liście.
edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
     level: info
     dir: /var/tmp
     stats_log_interval: 60
  plugins:
     dir: ../plugins
     sequence:   
     - oauth
     - plugin-name
  1. Skonfiguruj wtyczkę. Niektóre wtyczki mają opcjonalne parametry, które możesz skonfigurować w pliku konfiguracyjnym. Możesz na przykład dodać ten fragment kodu, aby skonfigurować wtyczkę ochrony przed nagłymi wzrostami ruchu. Więcej informacji znajdziesz w artykule Korzystanie z wtyczki ochrony przed nagłymi wzrostami ruchu.
    edgemicro:
      home: ../gateway
      port: 8000
      max_connections: -1
      max_connections_hard: -1
      logging:
        level: info
        dir: /var/tmp
        stats_log_interval: 60
      plugins:
        dir: ../plugins
        sequence:
          - oauth
          - spikearrest
    spikearrest:
       timeUnit: minute
       allow: 10
  1. Zapisz plik.
  2. Uruchom ponownie lub przeładuj Edge Microgateway w zależności od tego, który plik konfiguracyjny został edytowany.

Konfiguracja specyficzna dla wtyczki

Możesz zastąpić parametry wtyczki określone w pliku konfiguracyjnym, tworząc konfigurację specyficzną dla wtyczki w tym katalogu:

[prefix]/lib/node_modules/edgemicro/node_modules/microgateway-plugins/config

gdzie [prefix] to katalog prefiksu npm. Jeśli nie możesz znaleźć tego katalogu, przeczytaj artykuł Gdzie jest zainstalowana Edge Microgateway.

plugins/<plugin_name>/config/default.yaml. Możesz na przykład umieścić ten blok w plugins/spikearrest/config/default.yaml. Zastąpi on wszystkie inne ustawienia konfiguracji.

spikearrest:
   timeUnit: hour   
   allow: 10000   
   buffersize: 0

Korzystanie z wtyczki ochrony przed nagłymi wzrostami ruchu

Wtyczka ochrony przed nagłymi wzrostami ruchu chroni przed nagłymi wzrostami ruchu. Ogranicza liczbę żądań przetwarzanych przez instancję Edge Microgateway.

Dodawanie wtyczki ochrony przed nagłymi wzrostami ruchu

Przeczytaj artykuł Dodawanie i konfigurowanie wtyczek.

Przykładowa konfiguracja ochrony przed nagłymi wzrostami ruchu

edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: info
    dir: /var/tmp
    stats_log_interval: 60
  plugins:
    dir: ../plugins
    sequence:
      - oauth
      - spikearrest
spikearrest:
   timeUnit: minute
   allow: 10
   bufferSize: 5

Opcje konfiguracji ochrony przed nagłymi wzrostami ruchu

  • timeUnit: jak często resetuje się okno wykonywania ochrony przed nagłymi wzrostami ruchu. Prawidłowe wartości to second lub minute.
  • allow: maksymalna liczba żądań dozwolonych w czasie timeUnit. Przeczytaj też artykuł Jeśli używasz wielu procesów Edge Micro.
  • bufferSize: (opcjonalnie, wartość domyślna to 0) jeśli bufferSize > 0, ochrona przed nagłymi wzrostami ruchu przechowuje tę liczbę żądań w buforze. Gdy tylko pojawi się następne „okno” wykonywania, żądania w buforze zostaną przetworzone jako pierwsze. Przeczytaj też artykuł Dodawanie bufora.

Jak działa ochrona przed nagłymi wzrostami ruchu?

Ochronę przed nagłymi wzrostami ruchu należy traktować jako sposób na ogólną ochronę przed nagłymi wzrostami ruchu, a nie jako sposób na ograniczenie ruchu do określonej liczby żądań. Twoje interfejsy API i backend mogą obsługiwać określoną ilość ruchu, a zasada ochrony przed nagłymi wzrostami ruchu pomaga w wygładzaniu ruchu do ogólnych wartości które Cię interesują.

Działanie ochrony przed nagłymi wzrostami ruchu w czasie działania różni się od tego, czego można się spodziewać po dosłownych wartościach na minutę lub na sekundę.

Załóżmy na przykład, że określisz limit 30 żądań na minutę w ten sposób:

spikearrest:
   timeUnit: minute
   allow: 30

Podczas testowania możesz sądzić, że możesz wysłać 30 żądań w ciągu 1 sekundy, o ile mieszczą się one w ciągu minuty. Ale zasada nie wymusza tego ustawienia w ten sposób. Jeśli się nad tym zastanowisz, 30 żądań w ciągu 1 sekundy można w niektórych środowiskach uznać za mini-wzrost.

Co się wtedy dzieje? Aby zapobiec nagłym wzrostom ruchu, ochrona przed nagłymi wzrostami ruchu wygładza dozwolony ruch, dzieląc ustawienia na mniejsze przedziały, w ten sposób:

Limity na minutę

Limity na minutę są wygładzane do przedziałów dozwolonych żądań w sekundach. Na przykład 30 żądań na minutę jest wygładzane w ten sposób:

60 sekund (1 minuta) / 30 = 2-sekundowe przedziały, czyli około 1 żądanie dozwolone co 2 sekundy. A Drugie żądanie w ciągu 2 sekund zakończy się niepowodzeniem. Nie powiedzie się też 31. żądanie w ciągu minuty.

Limity na sekundę

Limity na sekundę są wygładzane do przedziałów dozwolonych żądań w milisekundach. Na przykład, 10 żądań na sekundę jest wygładzane w ten sposób:

1000 milisekund (1 sekunda) / 10 = 100-milisekundowe przedziały, czyli około 1 żądanie dozwolone co 100 milisekund . Drugie żądanie w ciągu 100 ms zakończy się niepowodzeniem. Nie powiedzie się też 11. żądanie w ciągu sekundy.

Gdy limit zostanie przekroczony

Jeśli liczba żądań przekroczy limit w określonym przedziale czasu, ochrona przed nagłymi wzrostami ruchu zwróci ten komunikat o błędzie ze stanem HTTP 503:

{"error": "spike arrest policy violated"}

Dodawanie bufora

Możesz dodać do zasady bufor. Załóżmy, że ustawisz bufor na 10. Zobaczysz, że interfejs API nie zwraca błędu od razu po przekroczeniu limitu ochrony przed nagłymi wzrostami ruchu. Zamiast tego żądania są buforowane (do określonej liczby), a żądania w buforze są przetwarzane, gdy tylko będzie dostępne następne odpowiednie okno wykonywania. Domyślna wartość bufferSize to 0.

Jeśli używasz wielu procesów Edge Micro

Liczba dozwolonych żądań zależy od liczby uruchomionych procesów roboczych Edge Micro, które są uruchomione. Ochrona przed nagłymi wzrostami ruchu oblicza dopuszczalną liczbę żądań na proces roboczy. Domyślnie, liczba procesów Edge Micro jest równa liczbie procesorów na maszynie, na której jest zainstalowana Edge Micro. Możesz jednak skonfigurować liczbę procesów roboczych podczas uruchamiania Edge Micro za pomocą opcji --processes w poleceniu start. Jeśli na przykład chcesz, aby ochrona przed nagłymi wzrostami ruchu była wyzwalana przy 100 żądaniach w danym okresie, a Edge Microgateway uruchamiasz z opcją --processes 4, ustaw allow: 25 w konfiguracji ochrony przed nagłymi wzrostami ruchu. Podsumowując, ogólna zasada jest taka, aby ustawić parametr konfiguracji allow na wartość „pożądana liczba ochrony przed nagłymi wzrostami ruchu / liczba procesów”.

Korzystanie z wtyczki limitów

Limit określa liczbę wiadomości z żądaniami, które aplikacja może wysłać do interfejsu API w ciągu godziny, dnia, tygodnia lub miesiąca. Gdy aplikacja osiągnie limit, kolejne wywołania interfejsu API zostaną odrzucone. Przeczytaj też artykuł Jaka jest różnica między ochroną przed nagłymi wzrostami ruchu a limitami?.

Dodawanie wtyczki limitów

Przeczytaj artykuł Dodawanie i konfigurowanie wtyczek.

Konfiguracja usługi w Apigee Edge

Limity konfigurujesz w interfejsie Apigee Edge, w którym konfigurujesz usługi API. Musisz wiedzieć która usługa zawiera serwer proxy obsługujący mikrobramę, który chcesz ograniczyć limitem. Tę usługę należy dodać do aplikacji dewelopera. Gdy wykonujesz wywołania interfejsu API, które są uwierzytelniane za pomocą kluczy w aplikacji dewelopera, limit zostanie zastosowany do tych wywołań.

  1. Zaloguj się na konto organizacji Apigee Edge.
  2. W interfejsie Edge otwórz usługę powiązaną z serwerem proxy obsługującym mikrobramę, do którego chcesz zastosować limit.
    1. W interfejsie wybierz Usługi w menu Opublikuj.
    2. Otwórz usługę zawierającą interfejs API, do którego chcesz zastosować limit.
    3. Kliknij Edytuj.
    4. W polu Limit określ interwał limitu. Na przykład 100 żądań co minutę. Lub 50 000 żądań co 2 godziny.

  1. Kliknij Zapisz.
  2. Upewnij się, że usługa jest dodana do aplikacji dewelopera. Będziesz potrzebować kluczy z tej aplikacji, aby wykonywać uwierzytelnione wywołania interfejsu API.

Przykładowa konfiguracja limitu

edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: info
    dir: /var/tmp
    stats_log_interval: 60
  plugins:
    dir: ../plugins
    sequence:
      - oauth
      - quota

Opcje konfiguracji limitu

Aby skonfigurować wtyczkę limitów, dodaj element quotas do pliku konfiguracyjnego, jak pokazano w tym przykładzie:

edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: info
    dir: /var/tmp
    stats_log_interval: 60
  plugins:
    dir: ../plugins
    sequence:
      - oauth
      - quota
quotas:
  bufferSize:
    hour: 20000
    minute: 500
    month: 1
    default: 10000
  useDebugMpId: true
  failOpen: true
  useRedis: true
  redisHost: localhost
  redisPort: 6379
  redisDb: 1
...
Opcja Opis
buffersize (Liczba całkowita) Rozmiar bufora do ustawienia dla określonego przedziału czasu. Dozwolone jednostki czasu to: hour, minute, day, week, month i default. (Dodano w wersji 3.0.9)
failOpen Gdy ta funkcja jest włączona, jeśli wystąpi błąd przetwarzania limitu lub jeśli żądanie "zastosuj limit" do Edge nie zaktualizuje zdalnych liczników limitów, limit będzie przetwarzany tylko na podstawie lokalnych liczników do czasu następnej udanej synchronizacji limitu zdalnego. W obu tych przypadkach w obiekcie żądania ustawiana jest flaga quota-failed-open. (Dodano w wersji 3.0.9)

Aby włączyć funkcję „fail open” limitu, ustaw tę konfigurację:

edgemicro:
...
quotas:
  failOpen: true
...
useDebugMpId Ustaw tę flagę na true, aby włączyć logowanie identyfikatora MP (procesora wiadomości) ID w odpowiedziach na limity. (Dodano w wersji 3.0.9)

Aby korzystać z tej funkcji, musisz zaktualizować swój edgemicro-auth serwer proxy do wersji 3.0.7 lub nowszej i ustawić tę konfigurację:

edgemicro:
...
quotas:
  useDebugMpId: true
...

Gdy ustawiona jest opcja useDebugMpId, odpowiedzi na limity z Edge będą zawierać identyfikator MP i będą logowane przez Edge Microgateway. Na przykład:

{
    "allowed": 20,
    "used": 3,
    "exceeded": 0,
    "available": 17,
    "expiryTime": 1570748640000,
    "timestamp": 1570748580323,
    "debugMpId": "6a12dd72-5c8a-4d39-b51d-2c64f953de6a"
}
useRedis (Wartość logiczna) Ustaw na true, aby używać modułu bazy danych limitów Redis. Gdy ta opcja jest ustawiona, limit jest ograniczony tylko do tych instancji Edge Microgateway, które łączą się z Redis. W przeciwnym razie licznik limitów jest globalny. Wartość domyślna: false (używany jest moduł redis-volos-apigee) (Dodano w wersji 3.0.10)
redisHost Host, na którym działa instancja Redis. Wartość domyślna: 127.0.0.1 (Dodano w wersji 3.0.10)
redisPort Port instancji Redis. Wartość domyślna: 6379 (Dodano w wersji 3.0.10)
redisDb Baza danych Redis do użycia. Wartość domyślna: 0 (Dodano w wersji 3.0.10)

Omówienie zakresu limitu

Liczba limitów jest ograniczona do usługi API. Jeśli aplikacja dewelopera ma kilka usług, limit jest ograniczony do każdej z nich. Aby osiągnąć ten zakres, Edge Microgateway tworzy identyfikator limitu, który jest połączeniem "appName + productName".

Testowanie wtyczki limitów

Gdy limit zostanie przekroczony, do klienta zostanie zwrócony stan HTTP 403 wraz z tym komunikatem:

{"error": "exceeded quota"}

Jaka jest różnica między ochroną przed nagłymi wzrostami ruchu a limitami?

Ważne jest, aby wybrać odpowiednie narzędzie do danego zadania. Zasady limitów konfigurują liczbę wiadomości z żądaniami, które aplikacja kliencka może wysłać do interfejsu API w ciągu godziny, dnia, tygodnia lub miesiąca. Zasada limitów wymusza limity zużycia w aplikacjach klienckich, utrzymując rozproszony licznik, który zlicza przychodzące żądania.

Zasady limitów używaj do egzekwowania umów handlowych lub umów SLA z deweloperami i partnerami, a nie do operacyjnego zarządzania ruchem. Limit może być na przykład używany do ograniczania ruchu w przypadku bezpłatnej usługi, a jednocześnie do zapewniania pełnego dostępu płacącym klientom.

Używaj ochrony przed nagłymi wzrostami ruchu, aby chronić się przed nagłymi wzrostami ruchu w interfejsie API. Ochrona przed nagłymi wzrostami ruchu jest zwykle używana do zapobiegania możliwym atakom DDoS lub innym złośliwym atakom.