Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Edge Microgateway wersja 3.3.x
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 Edge Microgateway jest dostępnych kilka wtyczek. W tabeli poniżej opisujemy niektóre z najczęściej używanych wtyczek.
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:
- Zatrzymaj Edge Microgateway.
- Otwórz plik konfiguracji Edge Microgateway. Szczegółowe informacje znajdziesz w sekcji Wprowadzanie zmian w konfiguracji.
- 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
- 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
- Zapisz plik.
- 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.
- Zaloguj się na konto organizacji Apigee Edge.
- W interfejsie użytkownika Edge otwórz usługę powiązaną z rozpoznawanym przez mikrobramą serwerem proxy, do którego chcesz zastosować limit.
- W interfejsie wybierz Produkty z menu Opublikuj.
- Otwórz usługę zawierającą interfejs API, do którego chcesz zastosować limit.
- Kliknij Edytuj.
- 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.
- Kliknij Zapisz.
- 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 isHTTPStatusTooManyRequestEnabled: true ...
Option | Opis |
---|---|
bufferSize |
(Liczba całkowita) Konfiguracja 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 |
isHTTPStatusTooManyRequestEnabled |
Konfiguruje wtyczkę limitów, aby w przypadku naruszenia limitu zwracała stan odpowiedzi HTTP 429 zamiast 403.
Wartość domyślna:
Jeśli flaga jest ustawiona na
Aby zmienić domyślny stan zwracania HTTP na edgemicro: ... quotas: isHTTPStatusTooManyRequestEnabled: true... |
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ść { "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: trueSzczegół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.