Korzystanie z wtyczek

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Edge Microgateway w wersji 3.1.5 i nowszych

Odbiorcy

Ten temat jest przeznaczony dla operatorów Edge Microgateway, którzy chcą używać istniejących wtyczek zainstalowanych z mikrobramą. Omawiany jest w nim również szczegółowo sposób zwiększenia limitu i największego zatrzymania (oba wtyczki są dołączone do instalacji). Jeśli jesteś deweloperem i chcesz tworzyć nowe wtyczki, przeczytaj artykuł o programowaniu 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 przez Edge Microgateway, co umożliwia mikrobramę ich automatyczne wykrywanie i ładowanie. Edge Microgateway zawiera kilka istniejących wtyczek. Możesz też tworzyć niestandardowe wtyczki, zgodnie z opisem w sekcji Tworzenie wtyczek niestandardowych.

Istniejące wtyczki dołączone do Edge Microgateway

Podczas instalacji do Edge Microgateway jest dostarczanych kilka istniejących wtyczek. Do metod tych należą:

Wtyczka Ta opcja jest domyślnie włączona. Opis
Analytics Tak Wysyła dane analityczne z Edge Microgateway do Apigee Edge.
oauth Tak Dodaje token OAuth i weryfikację klucza interfejsu API do Edge Microgateway. Zobacz Konfigurowanie i konfigurowanie Edge Microgateway.
limit Nie Wymusza limit w przypadku żądań wysyłanych do Edge Microgateway. Wykorzystuje Apigee Edge do przechowywania limitów i zarządzania nimi. Zobacz Korzystanie z wtyczki do obsługi limitów.
spikearrest Nie Chroni przed nagłym wzrostem natężenia ruchu i atakami typu DoS. Więcej informacji znajdziesz w artykule Korzystanie z wtyczki do aresztowania przyrostowego.
nagłówek-wielkie litery Nie Komentowany przykładowy serwer proxy, który ma służyć jako wskazówka ułatwiająca programistom pisanie niestandardowych wtyczek. Zobacz przykładową wtyczkę Edge Microgateway.
Zbieranie-żądań Nie Przed przekazaniem danych do następnego modułu obsługi w łańcuchu wtyczek gromadzi dane żądania w jednym obiekcie. Ta opcja jest przydatna do pisania wtyczek przekształcania, które muszą działać na pojedynczym, skumulowanym obiekcie treści żądania.
kumuluj-odpowiedź Nie Przed przekazaniem danych do kolejnego modułu obsługi w łańcuchu wtyczek kumuluje on dane odpowiedzi w jednym obiekcie. Ta opcja jest przydatna do pisania wtyczek przekształcania, które muszą działać na pojedynczym obiekcie z treścią odpowiedzi.
przekształć duże litery Nie Przekształca dane żądań lub odpowiedzi. Ta wtyczka reprezentuje sprawdzoną metodę implementacji wtyczki przekształcania. Przykładowa wtyczka przeprowadza proste przekształcenie (konwertuje dane żądań lub odpowiedzi na wielkie litery). Można ją jednak łatwo dostosować do wykonywania innych rodzajów przekształceń, np. z XML na JSON.
json2xml Nie Przekształca dane żądań lub odpowiedzi na podstawie nagłówków akceptacji lub zawartości typu content-type. Szczegółowe informacje znajdziesz w dokumentacji wtyczki na GitHubie.
pamięć-limitu Nie Wymusza limit w przypadku żądań wysyłanych do Edge Microgateway. Zapisuje limity w pamięci lokalnej i zarządza nimi.
healthcheck Nie Zwraca informacje o procesie Edge Microgateway – wykorzystania pamięci, wykorzystania procesora itp. Aby użyć wtyczki, wywołaj adres URL /healthcheck w instancji Edge Microgateway. Ta wtyczka to przykład, którego możesz użyć do zaimplementowania własnej wtyczki do kontroli stanu.

Gdzie znaleźć istniejące wtyczki

Tutaj znajdują się istniejące wtyczki dołączone do Edge Microgateway ([prefix] to katalog prefiksu npm). Jeśli nie możesz znaleźć tego katalogu, zobacz Gdzie jest zainstalowana 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. Szczegółowe informacje znajdziesz w sekcji Wprowadzanie zmian w konfiguracji.
  3. Dodaj wtyczkę do elementu plugins:sequence pliku konfiguracyjnego w podany niżej sposób. Wtyczki są stosowane 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żna skonfigurować w pliku konfiguracyjnym. Możesz na przykład dodać ten fragment, aby skonfigurować wtyczkę do zatrzymywania nagłych zdarzeń. Więcej informacji znajdziesz w artykule o korzystaniu z wtyczki do aresztowania.
    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. Ponownie uruchom lub załaduj ponownie Edge Microgateway, w zależności od edytowanego pliku konfiguracji.

Konfiguracja specyficzna dla wtyczki

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

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

gdzie [prefix] to katalog prefiksów npm. Jeśli nie możesz znaleźć tego katalogu, zobacz Gdzie jest zainstalowana Edge Microgateway.

plugins/<plugin_name>/config/default.yaml. Możesz na przykład umieścić ten blok w elemencie plugins/spikearrest/config/default.yaml, który zastąpi wszystkie inne ustawienia konfiguracji.

spikearrest:
   timeUnit: hour   
   allow: 10000   
   buffersize: 0

Korzystanie z wtyczki do aresztowania skokowego

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

Dodawanie wtyczki do szybkiego zatrzymania

Zobacz Dodawanie i konfigurowanie wtyczek.

Przykładowa konfiguracja zatrzymania szybkiego 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 zatrzymania szybkiego ruchu

  • timeUnit: jak często resetuje się okres wykonywania tymczasowego przechowywania danych. Prawidłowe wartości to sekunda lub minuta.
  • allow: maksymalna liczba żądań dozwolonych w danej jednostce czasu. Zapoznaj się też z artykułem Jeśli używasz wielu procesów Edge Micro.
  • bufferSize: (opcjonalny, domyślnie = 0) jeśli rozmiar bufora > 0 powoduje, że nagłe aresztowanie przechowuje tę liczbę żądań w buforze. Po upływie następnego „okna” wykonania żądania zbuforowane zostaną najpierw przetworzone. Zobacz też Dodawanie bufora.

Na czym polega aresztowanie osób postronnych?

Gwałtowne zatrzymanie ruchu to raczej sposób ochrony przed nagłymi wzrostami ruchu, a nie sposób ograniczenia ruchu do określonej liczby żądań. Twoje interfejsy API i backend mogą obsłużyć określoną ilość ruchu, a zasada zatrzymania nagłego zwiększenia ruchu pozwala płynniej osiągnąć pożądane ogólne wartości.

Sposób zatrzymania nagłego żądania w środowisku wykonawczym różni się od tego, czego możesz się spodziewać po wpisanych wartościach na minutę lub sekundę.

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

spikearrest:
   timeUnit: minute
   allow: 30

Podczas testów możesz wydawało się, że możesz wysłać 30 żądań w ciągu 1 sekundy, o ile przychodzą w ciągu minuty. Jednak zasada egzekwuje to ustawienie w inny sposób. Jeśli się nad tym zastanowisz, w niektórych środowiskach 30 żądań w ciągu 1 sekundy możesz uznać za minimalny wzrost.

Co wtedy właściwie się dzieje? Aby zapobiec zachowaniu podobnego do nagłych wzrostów, aresztowanie skokowe wygładza dozwolony ruch, dzieląc ustawienia na mniejsze przedziały czasowe w następujący sposób:

Stawki za minutę

Stawki za minutę są wygładzone do dozwolonych przedziałów czasu w sekundach. Na przykład 30 żądań na minutę jest wygładzone w taki sposób:

60 sekund (1 minuta) / 30 = interwały 2-sekundowe, czyli około 1 żądania co 2 sekundy. Drugie żądanie w ciągu 2 sekund zakończy się niepowodzeniem. Poza tym 31 żądanie w ciągu minuty zakończy się niepowodzeniem.

Stawki za sekundę

Stawki za sekundę są wygładzone w żądaniach dozwolonych w odstępach milisekundowych. Na przykład 10 żądań na sekundę jest wygładzone w taki sposób:

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

Po przekroczeniu limitu

Jeśli liczba żądań przekracza limit w określonym przedziale czasu, zatrzymanie zagrożenia zwraca 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 ustawiasz bufor na 10. Interfejs API nie zwraca błędu od razu, gdy przekroczysz limit maksymalnej liczby zatrzymań. Są one zamiast tego buforowane (do podanej liczby), a te zbuforowane 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. Nagłe aresztowanie oblicza dozwoloną liczbę żądań na proces instancji roboczej. Domyślnie liczba procesów Edge Micro jest równa liczbie procesorów na komputerze, na którym zainstalowano Edge Micro. Liczbę procesów instancji roboczych możesz jednak skonfigurować po uruchomieniu Edge Micro za pomocą opcji --processes w poleceniu start. Jeśli na przykład chcesz, aby nagły wzrost liczby żądań wyzwalało się przy 100 żądaniach w danym okresie, a jeśli uruchomisz Edge Microgateway z opcją --processes 4, ustaw allow: 25 w konfiguracji tymczasowego przechowywania danych. Podsumowując, ogólną zasadą jest ustawienie parametru konfiguracji allow na wartość „pożądana liczba przypadków zatrzymania / liczba procesów”.

Korzystanie z wtyczki limitu

Limit określa liczbę wiadomości z żądaniami, które aplikacja może przesłać do interfejsu API w ciągu godziny, dnia, tygodnia lub miesiąca. Po osiągnięciu limitu przez aplikację kolejne wywołania interfejsu API są odrzucane. Zobacz też Jaka jest różnica między nagłym aresztowaniem a limitem?

Dodawanie wtyczki limitu

Zobacz Dodawanie i konfigurowanie wtyczek.

Konfiguracja usługi w Apigee Edge

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

  1. Zaloguj się na konto organizacji Apigee Edge.
  2. W interfejsie użytkownika Edge otwórz usługę powiązaną z rozpoznawanym przez mikrobramą serwerem proxy, do którego chcesz zastosować limit.
    1. W interfejsie wybierz Produkty z 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 odstęp czasu między limitami. Na przykład 100 żądań co minutę. lub 50 tys. żądań co 2 godziny.

  1. Kliknij Zapisz.
  2. Upewnij się, że usługa została dodana do aplikacji dewelopera. Aby wykonywać uwierzytelnione wywołania interfejsu API, będą Ci potrzebne klucze 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 konfiguracji, 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
...
Option Opis
bufferSize

(Liczba całkowita) Konfiguracja bufferSize pozwala dostosować częstotliwość, z jaką Edge Microgateway synchronizuje liczbę limitów z Apigee Edge. Aby lepiej zrozumieć funkcję bufferSize, zapoznaj się z tą przykładową konfiguracją:

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

Domyślnie mikrobrama synchronizuje swój licznik limitów z Apigee Edge co 5 sekund, jeśli interwał limitu jest ustawiony na „minutę”. Powyższa konfiguracja mówi, że jeśli interwał limitu jest ustawiony w usłudze API na minutę, Edge Microgateway będzie się synchronizować z Edge, aby uzyskać aktualną liczbę żądań co 500 żądań lub po 5 sekundach, w zależności od tego, co nastąpi wcześniej. Więcej informacji znajdziesz w artykule o sposobie liczenia limitów.

Dozwolone jednostki czasu to minute, hour, day, week, month i default.

failOpen Gdy ta funkcja jest włączona i jeśli wystąpi błąd przetwarzania limitu lub żądanie „zastosowania limitu” do Edge nie zaktualizuje zdalnych liczników limitów, limit będzie przetwarzany na podstawie liczników lokalnych tylko do następnej udanej synchronizacji limitów zdalnych. W obu tych przypadkach w obiekcie żądania jest ustawiona flaga quota-failed-open.

Aby włączyć funkcję nieudanego otwarcia limitu, ustaw tę 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 ustawić tę konfigurację:

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

Gdy ustawiona jest wartość useDebugMpId, odpowiedzi dotyczące limitu z Edge będą zawierać identyfikator MP i będą rejestrowane 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 ma wartość true, wtyczka używa Redis do przechowywania kopii zapasowych limitów. Więcej informacji znajdziesz w sekcji Używanie magazynu kopii zapasowych Redis na potrzeby limitu.

Jak liczone są limity

Domyślnie mikrobrama synchronizuje swój licznik limitów z Apigee Edge co 5 sekund, jeśli interwał limitu jest ustawiony na „minutę”. Jeśli interwał jest ustawiony na poziom wyższy niż „minuta”, na przykład „tydzień” lub „miesiąc”, domyślny okres odświeżania to 1 minuta.

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

Konfiguracja YAML wtyczki Edge Microgateway quota nie ustawia interwału limitów. Pozwala to dostosować częstotliwość, z jaką lokalna instancja Edge Microgateway synchronizuje liczbę limitów z Apigee Edge.

Załóżmy na przykład, że w Apigee Edge zdefiniowane są 3 usługi API z następującymi interwałami limitów:

  • W usłudze A obowiązuje limit 100 żądań na minutę
  • W usłudze B obowiązuje limit 5000 żądań na godzinę
  • W usłudze C obowiązuje limit 1 000 000 żądań miesięcznie

Jak należy skonfigurować wtyczkę quota Edge Microgateway? Sprawdzoną metodą jest skonfigurowanie Edge Microgateway z interwałami synchronizacji krótszymi niż odstępy limitów określone w usługach interfejsów 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 usług API:

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

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

Ustawienia bufferSize pozwalają dostosować sposób synchronizacji licznika limitów z Edge. W sytuacjach o dużym natężeniu ruchu ustawienia bufferSize umożliwiają synchronizację licznika bufora przed uruchomieniem domyślnej synchronizacji na podstawie czasu.

Informacje o zakresie limitu

Liczba limitów jest ograniczona do środowiska w organizacji. Aby osiągnąć ten zakres, Edge Microgateway tworzy identyfikator limitu będący kombinacją wartości „org + env + appName + productName”.

Korzystanie z magazynu kopii zapasowych Redis na potrzeby limitu

Aby na potrzeby limitu używać magazynu kopii zapasowej Redis, użyj tej samej konfiguracji, która została użyta w przypadku funkcji synchronizatora. Poniżej znajdziesz podstawową konfigurację wymaganą do korzystania z Redis jako miejsca na dane:

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 do klienta zostanie zwrócony kod HTTP 403 z komunikatem:

{"error": "exceeded quota"}

Jaka jest różnica między nagłym aresztowaniem a limitem?

Ważne jest, by 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 przesłać do interfejsu API w ciągu godziny, dnia, tygodnia lub miesiąca. Zasada limitu wymusza limity wykorzystania w aplikacjach klienckich przez utrzymywanie rozproszonego licznika, który zlicza żądania przychodzące.

Korzystaj z zasad dotyczących limitów, aby egzekwować umowy biznesowe lub gwarancje jakości usług z deweloperami i partnerami, a nie do operacyjnego zarządzania ruchem. Limit może służyć na przykład do ograniczenia ruchu w bezpłatnej usłudze przy jednoczesnym zapewnieniu pełnego dostępu klientom płacącym.

Użyj tymczasowego aresztowania, aby chronić się przed nagłym wzrostem natężenia ruchu przez interfejs API. Gwałtowne aresztowanie zwykle ma na celu powstrzymanie ofiar DDoS i innych złośliwych ataków.