Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. info
Edge Microgateway w wersji 3.3.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ępniana jest pewna liczba wtyczek. W tabeli poniżej znajdziesz opis niektórych 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 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:
- Zatrzymaj Edge Microgateway.
- Otwórz plik konfiguracji Edge Microgateway. Więcej informacji o opcjach znajdziesz w sekcji Wprowadzanie zmian w konfiguracji.
- Dodaj wtyczkę do elementu
plugins:sequencew 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
- 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
- Zapisz plik.
- 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ę
Limity na minutę są wygładzane do przedziałów 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.
- Zaloguj się na konto organizacji Apigee Edge.
- W interfejsie Edge otwórz usługę powiązaną z proxy obsługującym mikrobramę, do którego chcesz zastosować limit.
- W interfejsie wybierz Produkty w menu Opublikuj.
- Otwórz usługę zawierającą interfejs API, do którego chcesz zastosować limit.
- Kliknij Edytuj.
- W polu Limit określ interwał limitu. Na przykład 100 żądań co minutę. lub 50 000 żądań co 2 godziny.

- Kliknij Zapisz.
- 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
isHTTPStatusTooManyRequestEnabled: true
...| Opcja | Opis |
|---|---|
bufferSize |
(Liczba całkowita) Konfiguracja 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: |
isHTTPStatusTooManyRequestEnabled |
Konfiguruje wtyczkę limitu, aby w przypadku naruszenia limitu zwracała stan odpowiedzi HTTP 429 zamiast stanu 403.
Domyślnie:
Jeśli flaga ma wartość
Aby zmienić domyślny stan zwracany HTTP na edgemicro: ... quotas: isHTTPStatusTooManyRequestEnabled: true |
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 odpowiedziach dotyczących limitu rejestrować identyfikator MP (procesora wiadomości).
Aby korzystać z tej funkcji, musisz skonfigurować te ustawienia: edgemicro: ... quotas: useDebugMpId: true ...
Gdy parametr {
"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: 10000Ta 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
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.