Korzystanie z wtyczek

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

Edge Microgateway w wersji 3.2.x

Odbiorcy

Ten temat jest przeznaczony dla operatorów Edge Microgateway, którzy chcą używać istniejących wtyczek zainstalowanych w mikrobramie. Opisuje też szczegółowo wtyczki do ograniczania nagłych wzrostów i do limitów (obie są uwzględnione w instalacji). Jeśli jesteś deweloperem i chcesz tworzyć nowe wtyczki, zapoznaj się z sekcją 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.

Wtyczki dołączone do Edge Microgateway

Podczas instalacji Edge Microgateway udostępnia kilka istniejących wtyczek. Obejmują one:

Wtyczka Ta opcja jest domyślnie włączona. Opis
Analytics Tak Wysyła dane analityczne z Edge Microgateway do Apigee Edge.
oauth Tak Dodaje do Edge Microgateway weryfikację tokena OAuth i klucza interfejsu API. Zobacz Konfigurowanie Edge Microgateway.
quota Nie Wymusza limit żądań do Edge Microgateway. Używa Apigee Edge do przechowywania limitów i zarządzania nimi. Zobacz Korzystanie z wtyczki limitu.
spikearrest Nie Ochrona przed nagłymi wzrostami ruchu i atakami DoS. Zobacz Korzystanie z wtyczki Spike Arrest.
header-uppercase Nie Przykładowy serwer proxy z komentarzami, który ma pomóc deweloperom w pisaniu wtyczek niestandardowych. Zobacz przykładową wtyczkę Edge Microgateway.
accumulate-request Nie Gromadzi dane żądania w jednym obiekcie, zanim przekaże je do następnego modułu obsługi w łańcuchu wtyczek. Przydatne do pisania wtyczek przekształcających, które muszą działać na pojedynczym, zgromadzonym obiekcie treści żądania.
accumulate-response Nie Gromadzi dane odpowiedzi w jednym obiekcie, zanim przekaże je do następnego modułu obsługi w łańcuchu wtyczek. Przydatne do pisania wtyczek przekształcających, które muszą działać na pojedynczym, zgromadzonym obiekcie zawartości odpowiedzi.
transform-uppercase Nie Przekształca dane żądania lub odpowiedzi. Ta wtyczka to przykład sprawdzonej metody implementacji wtyczki przekształcającej. Przykładowa wtyczka wykonuje proste przekształcenie (konwertuje dane żądania lub odpowiedzi na wielkie litery), ale można ją łatwo dostosować do wykonywania innych rodzajów przekształceń, np. z 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.
quota-memory Nie Wymusza limit żądań do Edge Microgateway. Przechowuje limity w pamięci lokalnej i zarządza nimi.
healthcheck 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 jest przykładem, którego możesz użyć do wdrożenia 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, zapoznaj się z artykułem Gdzie jest zainstalowana usługa Edge Microgateway.

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

Dodawanie i konfigurowanie wtyczek

Aby dodać i skonfigurować wtyczki, postępuj zgodnie z tym wzorcem:

  1. Zatrzymaj Edge Microgateway.
  2. Otwórz plik konfiguracji Edge Microgateway. Więcej informacji o opcjach znajdziesz w sekcji Wprowadzanie zmian w konfiguracji.
  3. Dodaj wtyczkę do elementu plugins:sequence w pliku konfiguracji 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, aby skonfigurować wtyczkę spike arrest: Więcej informacji znajdziesz w artykule Korzystanie z wtyczki do wykrywania nagłych wzrostów.
    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 konfiguracji został edytowany.

Konfiguracja specyficzna dla wtyczki

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

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

gdzie [prefix] to katalog z prefiksem npm. Jeśli nie możesz znaleźć tego katalogu, zapoznaj się z artykułem Gdzie jest zainstalowana usługa Edge Microgateway.

plugins/<plugin_name>/config/default.yaml. Na przykład możesz umieścić ten blok w plugins/spikearrest/config/default.yaml, a zastąpi on wszystkie inne ustawienia konfiguracji.

spikearrest:
   timeUnit: hour   
   allow: 10000   
   buffersize: 0

Korzystanie z wtyczki do zapobiegania nagłym wzrostom

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

Dodawanie wtyczki Spike Arrest

Zobacz 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

  • timeUnit: jak często resetuje się okno wykonywania ochrony przed nagłymi wzrostami. Prawidłowe wartości to sekunda lub minuta.
  • allow: maksymalna liczba żądań, które można wysłać w jednostce czasu. Zobacz też Jeśli uruchamiasz wiele procesów Edge Micro.
  • bufferSize: (opcjonalny, domyślnie = 0) jeśli bufferSize > 0, mechanizm ochrony przed nagłymi wzrostami przechowuje w buforze tę liczbę żądań. Gdy tylko pojawi się kolejne „okno” wykonania, najpierw zostaną przetworzone żądania w buforze. Zobacz też Dodawanie bufora.

Jak działa ochrona przed nagłymi skokami napięcia?

Ochrona przed nagłymi wzrostami ruchu to ogólne zabezpieczenie przed takimi wzrostami, a nie sposób na ograniczenie ruchu do określonej liczby żądań. Twoje interfejsy API i backend mogą obsługiwać określoną ilość ruchu, a zasady ograniczania nagłych wzrostów pomagają wygładzić ruch do ogólnych wartości, które chcesz osiągnąć.

Zachowanie związane z zapobieganiem nagłym wzrostom czasu działania różni się od tego, czego można się spodziewać na podstawie wprowadzonych wartości dosłownych na minutę lub na sekundę.

Załóżmy na przykład, że określisz szybkość 30 żądań na minutę:

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 zostaną one wysłane w ciągu minuty. Jednak zasady nie wymuszają tego ustawienia w ten sposób. 30 żądań w ciągu 1 sekundy można w niektórych środowiskach uznać za niewielki skok.

Co się wtedy dzieje? Aby zapobiec nagłym wzrostom, funkcja ograniczania nagłych wzrostów wygładza dozwolony ruch, dzieląc ustawienia na mniejsze przedziały w ten sposób:

Stawki za minutę

Stawki za minutę są uśredniane w przedziałach sekundowych dozwolonych żądań. Na przykład 30 żądań na minutę jest wygładzanych w ten sposób:

60 sekund (1 minuta) / 30 = 2-sekundowe interwały, czyli około 1 żądania co 2 sekundy. Drugie żądanie w ciągu 2 sekund zostanie odrzucone. 31 żądanie w ciągu minuty również się nie powiedzie.

Stawki sekundowe

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

1000 milisekund (1 sekunda) / 10 = odstępy 100 milisekund, czyli około 1 żądania co 100 milisekund . Drugie żądanie w ciągu 100 ms zostanie odrzucone. Nie uda się też zrealizować 11 żądania w ciągu sekundy.

Gdy limit zostanie przekroczony

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

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

Dodawanie czasu między spotkaniami

Możesz dodać do zasad 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. Zamiast tego żądania są buforowane (do określonej liczby), a następnie przetwarzane, gdy tylko pojawi się kolejne odpowiednie okno wykonania. Domyślna wartość bufferSize to 0.

Jeśli uruchomionych jest wiele procesów Edge Micro

Liczba dozwolonych żądań zależy od liczby uruchomionych procesów roboczych Edge Micro. Zasada Spike Arrest oblicza dopuszczalną liczbę żądań na proces instancji roboczej. Domyślnie liczba procesów Edge Micro jest równa liczbie procesorów na maszynie, na której jest zainstalowany Edge Micro. Możesz jednak skonfigurować liczbę procesów instancji roboczych podczas uruchamiania Edge Micro za pomocą opcji --processes w poleceniu start. Jeśli na przykład chcesz, aby ochrona przed nagłym wzrostem natężenia ruchu była aktywowana po 100 żądaniach w danym okresie, a uruchamiasz Edge Microgateway z opcją --processes 4, ustaw w konfiguracji ochrony przed nagłym wzrostem natężenia ruchu wartość allow: 25. Podsumowując, ogólna zasada brzmi: ustaw parametr allow config na wartość „pożądana liczba zatrzymań skoków / liczba procesów”.

Korzystanie z wtyczki dotyczącej limitu

Limit określa liczbę wiadomości z żądaniami, które aplikacja może przesył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. Zobacz też Jaka jest różnica między ochroną przed nagłymi wzrostami a limitem?

Dodawanie wtyczki limitu

Zobacz Dodawanie i konfigurowanie wtyczek.

Konfigurowanie usługi w Apigee Edge

Limity konfiguruje się w interfejsie Apigee Edge, w którym konfiguruje się usługi API. Musisz wiedzieć, który produkt zawiera serwer proxy obsługujący mikrobramę, który chcesz ograniczyć za pomocą limitu. Ten produkt musi zostać dodany do aplikacji programisty. Gdy wywołujesz interfejs API, który jest uwierzytelniany za pomocą kluczy w aplikacji programisty, do tych wywołań interfejsu API stosowany jest limit.

  1. Zaloguj się na konto organizacji Apigee Edge.
  2. W interfejsie Edge otwórz usługę powiązaną z proxy obsługującym mikrobramę, do którego chcesz zastosować limit.
    1. W interfejsie wybierz Produkty 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 produkt został dodany do aplikacji programisty. Aby wykonywać uwierzytelnione wywołania interfejsu API, potrzebujesz kluczy z tej aplikacji.

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ę limitu, 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
...
Opcja Opis
bufferSize

(Liczba całkowita) Konfiguracja bufferSize umożliwia dostosowanie częstotliwości synchronizacji limitu Edge Microgateway z Apigee Edge. Aby zrozumieć bufferSize, zapoznaj się z tym przykładowym ustawieniem:

quotas:
 bufferSize:
  minute: 500
  default: 10000
 useDebugMpId: true
 failOpen: true

Domyślnie mikrobrama synchronizuje licznik limitu z Apigee Edge co 5 sekund, jeśli interwał limitu jest ustawiony na „minutę”. Powyższa konfiguracja oznacza, że jeśli interwał limitu w produkcie API jest ustawiony na „minutę”, Edge Microgateway będzie synchronizować się z Edge, aby uzyskać bieżącą liczbę limitu po każdych 500 żądaniach lub po 5 sekundach, w zależności od tego, co nastąpi wcześniej. Więcej informacji znajdziesz w artykule Wyjaśnienie sposobu zliczania limitów.

Dozwolone jednostki czasu to: minute, hour, day, week, monthdefault.

failOpen Jeśli ta funkcja jest włączona, a wystąpi błąd przetwarzania limitu lub żądanie „zastosuj limit” wysłane do Edge nie zaktualizuje zdalnych liczników limitów, limit będzie przetwarzany tylko na podstawie lokalnych wartości, dopóki nie nastąpi kolejna udana synchronizacja zdalnego limitu. W obu tych przypadkach w obiekcie żądania ustawiana jest flaga quota-failed-open.

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

edgemicro:
...
quotas:
  failOpen: true
...
useDebugMpId Ustaw tę flagę na true, aby włączyć logowanie identyfikatora MP (procesora wiadomości) w odpowiedziach dotyczących limitu.

Aby korzystać z tej funkcji, musisz skonfigurować te ustawienia:

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

Gdy parametr useDebugMpId jest ustawiony, odpowiedzi dotyczące limitu 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 Jeśli ustawisz wartość true, wtyczka będzie używać Redis jako pamięci zapasowej limitu. Więcej informacji znajdziesz w artykule Używanie pamięci Redis jako bazy danych limitów.

Jak zliczane są limity

Domyślnie mikrobrama synchronizuje licznik limitu z Apigee Edge co 5 sekund, jeśli interwał limitu jest ustawiony na „minutę”. Jeśli interwał jest ustawiony na poziomie wyższym niż „minuta”, np. „tydzień” lub „miesiąc”, domyślny okres odświeżania wynosi 1 minutę.

Pamiętaj, że interwały limitów określasz w usługach API zdefiniowanych w Apigee Edge. Przedziały limitu określają, ile żądań jest dozwolonych w ciągu minuty, godziny, dnia, tygodnia lub miesiąca. Na przykład usługa A może mieć interwał limitu wynoszący 100 żądań na minutę, a usługa B może mieć interwał limitu wynoszący 10 000 żądań na godzinę.

Konfiguracja YAML wtyczki Edge Microgateway quotanie ustawia interwału limitu, ale umożliwia dostosowanie częstotliwości, z jaką lokalna instancja Edge Microgateway synchronizuje liczbę limitów z Apigee Edge.

Załóżmy na przykład, że w Apigee Edge zdefiniowano 3 usługi API z tymi interwałami limitów:

  • Produkt A ma limit 100 żądań na minutę.
  • Usługa B ma limit 5000 żądań na godzinę.
  • Usługa C ma limit 1 000 000 żądań miesięcznie.

Jak skonfigurować wtyczkę quota Edge Microgateway, biorąc pod uwagę te ustawienia limitów? Zgodnie ze sprawdzoną metodą skonfiguruj Edge Microgateway z interwałami synchronizacji, które są krótsze niż interwały limitów określone w produktach API. Na przykład:

quotas:
    bufferSize:
      hour: 2000
      minute: 50
      month: 1
      default: 10000

Ta konfiguracja określa te interwały synchronizacji dla opisanych wcześniej produktów interfejsu API:

  • Produkt A jest ustawiony na interwał „minuta”. Edge Microgateway synchronizuje się z Edge po każdej 50. prośbie lub co 5 sekund, w zależności od tego, co nastąpi wcześniej.
  • Produkt B jest ustawiony na interwał „godzina”. Edge Microgateway będzie synchronizować się z Edge po każdym 2000 żądaniu lub co minutę, w zależności od tego, co nastąpi wcześniej.
  • Produkt C jest ustawiony na interwał „miesiąc”. Edge Microgateway będzie synchronizować się z Edge po każdym żądaniu lub co minutę, w zależności od tego, co nastąpi wcześniej.

Za każdym razem, gdy instancja mikrobramy synchronizuje się z Edge, liczba limitów mikrobramy jest ustawiana na pobraną liczbę limitów.

Ustawienia bufferSize umożliwiają dostosowanie sposobu synchronizacji licznika limitu z Edge. W przypadku dużego natężenia ruchu ustawienia bufferSize umożliwiają synchronizację licznika bufora przed wywołaniem domyślnej synchronizacji opartej na czasie.

Omówienie zakresu limitu

Liczba przydziałów jest ograniczona do środowiska w organizacji. Aby osiągnąć ten zakres, Edge Microgateway tworzy identyfikator limitu, który jest kombinacją „org + env + appName + productName”.

Używanie Redis jako pamięci zapasowej na potrzeby limitu

Aby używać Redis jako pamięci zapasowej na potrzeby limitów, zastosuj tę samą konfigurację co w przypadku funkcji Synchronizer. Poniżej znajdziesz podstawową konfigurację wymaganą do używania Redis do przechowywania limitów:

edgemicro:
  redisHost: localhost
  redisPort: 6379
  redisDb: 2
  redisPassword: codemaster

quotas:
  useRedis: true
Szczegółowe informacje o parametrach edgemicro.redis* znajdziesz w artykule Korzystanie z synchronizatora.

Testowanie wtyczki limitu

Po przekroczeniu limitu klientowi zwracany jest stan HTTP 403 wraz z tym komunikatem:

{"error": "exceeded quota"}

Jaka jest różnica między ograniczeniem nagłych wzrostów a limitem?

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

Zasady dotyczące limitów służą do egzekwowania umów biznesowych lub gwarancji jakości usług z deweloperami i partnerami, a nie do zarządzania ruchem operacyjnym. Na przykład limit może być używany do ograniczania ruchu w przypadku bezpłatnej usługi, a jednocześnie umożliwiać pełny dostęp klientom, którzy za nią płacą.

Używaj ograniczania nagłych skoków natężenia ruchu, aby chronić się przed nagłymi wzrostami natężenia ruchu związanego z interfejsami API. Zwykle służy do zapobiegania możliwym atakom DDoS lub innym złośliwym atakom.