GH GambleHub

Kształtowanie i przebieg ruchu

1) Dlaczego to wszystko

Kształtowanie i routing - podstawa zarządzanej dostępności i przewidywalnego opóźnienia:
  • Stabilność: nie dawaj „hałaśliwych sąsiadów” do punktacji kanałów.
  • Sprawiedliwość: priorytety i kwoty między najemcami/klasami.
  • Wydajność: wysyłamy żądanie do miejsca, gdzie jest przetwarzane szybciej/taniej.
  • Kontrola zmian: uwolnienia kanarkowe/ważone bez ryzyka.
  • Oszczędności: optymalizacja kosztów wyjścia/wyjścia i CDN-cache-hitrate.

2) Podstawowe pojęcia

2. 1 Kształtowanie ruchu vs policja

Kształtowanie - wyrównuje ruch poprzez buforowanie i wysyłanie pakietów w tempie docelowym (wygładzanie „wybuchów”).
Policja - „karze” ekscesy (kropla/oznakowanie) bez buforowania. Trudniejsze, ale tańsze.

2. 2 Klasy, kolejki i dyscypliny

Kolejki priorytetowe (PRIO), WFQ/DRR (sprawiedliwy przydział), HTB (kontyngenty hierarchiczne), CoDel/RED (kontrola bloku buforowego), ECN (brak sygnału zatorów).
Na L7 - „kolejki” w postaci limitów/połączeń/bajtów RPS i pul priorytetowych.

2. 3 Algorytmy ograniczające

Wiadro Token (n żetony dodane z szybkością r; żądanie „spędza” k żetony).
Nieszczelne wiadro (stały odpływ; dobre do wygładzania).
Globalne/lokalne limity: lokalne - szybkie, globalne - targi (Redis/etcd/per-najemca).

3) QoS na L3/L4

3. 1 DSCP/ToS i klasy usług

Pakiety etykiet według typu ruchu (interaktywny, backend RPC, zadania w tle).
W centrach danych negocjuj politykę DSCP z tkaniną/chmurą sieciową.

3. 2 Linux tc: HTB + fq_codel (miniaturka)

bash
Clearing tc qdisc del dev eth0 root 2 >/dev/null         true

Корневая HTB с 1Gbit tc qdisc add dev eth0 root handle 1: htb default 30 tc class add dev eth0 parent 1: classid 1:1 htb rate 1gbit

Класс latency-critical 200Mbit tc class add dev eth0 parent 1:1 classid 1:10 htb rate 200mbit ceil 1gbit prio 0 tc qdisc add dev eth0 parent 1:10 handle 10: fq_codel

Класс background 100Mbit tc class add dev eth0 parent 1:1 classid 1:30 htb rate 100mbit ceil 1gbit prio 2 tc qdisc add dev eth0 parent 1:30 handle 30: fq_codel

3. 3 ECN/RED/BBR

ECN zmniejsza spadki w szczytach; RED/CoDel ogranicza buforowanie.
BBR (zamiast Cubic) często zmniejsza opóźnienia p99, zwłaszcza na szczycie WAN/ciężkich kolejek.

4) Routing L7 (HTTP/gRPC/WS)

4. 1 Kryteria routingu

Ścieżki/metody ('/api/v1/', 'POST'), nagłówki (wersja kliencka, flagi funkcji, nagłówek kanaryjski), pliki cookie (A/B, lepkie), znaczki JWT (lokator/rola), geo/ASN, okna czasowe, obciążenie (wykrywanie zewnętrzne).
Protokół: HTTP/2 (multipleksowanie), HTTP/3/QUIC (odporność na utratę pakietów), gRPC (strumienie bi-di), WebSocket (długotrwałe połączenia).

4. 2 Ważony podział/uwolnienia kanarkowe

Root 'v1: 95%', 'v2: 5%', automatyczny wzrost z „zielonymi” metrykami.
Odcięcia: błędy/opóźnienia/niezmienne w biznesie.

Wysłannik (szkic)

yaml route:
weighted_clusters:
clusters:
- name: svc-v1 weight: 95
- name: svc-v2 weight: 5

Istio

yaml apiVersion: networking. istio. io/v1beta1 kind: VirtualService spec:
hosts: ["svc"]
http:
- route:
- destination: { host: svc, subset: v1, weight: 95 }
- destination: { host: svc, subset: v2, weight: 5 }

4. 3 Sesje lepkie i konsekwentne hashing

Powinowactwo sesji przez identyfikator cookie/IP/JWT.
Konsekwentne hashing dla klastrów pamięci podręcznej, shardy usługi, bramki limitu stawki.

Nginx

nginx upstream api {
hash $cookie_user_id consistent;
server 10. 0. 0. 1;
server 10. 0. 0. 2;
}

4. 4 Trasa geo- i opóźnienia

GeoIP/ASN na krawędzi (CDN/krawędź) → najbliższy POP/region.
Świadomość opóźnienia: okresowe próbki zdrowia + pomiary RTT → ruch do „najszybszego” klastra.

4. 5 Wykrywanie zewnętrzne/łamanie obwodu

Wybicie „złych” przypadków: maksymalny procent wyrzutu, podstawowe błędy/opóźnienie.
Wyłącznik: granice połączeń/RPS/w kolejkach.

5) Kształtowanie ruchu na poziomie stos bramy/zacieru

5. 1 Ograniczenie stawki

Lokalne (per-pod): tanie, ale nie fair inter-repliki.
Globalny (Redis/etcd): ważność na najemcę/klucz API.
Politycy: na trasę, na metodę, na najemcę, wybuch.

Wysłannik RLS (szkic)

yaml typed_per_filter_config:
envoy. filters. http. ratelimit:
"@type": type. googleapis. com/envoy. extensions. filters. http. ratelimit. v3. RateLimit domain: "api"
rate_limit_service:
grpc_service: { envoy_grpc: { cluster_name: rate_limit_cluster } }

5. 2 Sprawiedliwość i priorytety

Pule priorytetowe są interaktywne> system> tło.
Równoważniki DRR/WFQ dla L7: kwoty/wagi na klienta/najemcę.

5. 3 Przeciążenie i ochrona

Załadunek: awaria/degradacja w przypadku przekroczenia budżetów.
Współzależność adaptacyjna: dynamika limitów od p50/p95/kolejka-len.
Backpressure po stronie serwera: 429/503 + Retry-After.

6) poziom eBPF i CNI

6. 1 Cyl/eBPF

Filtrowanie/routing w jądrze: mniej przełączników kontekstowych, cienkie zasady L3-L7.
Maglev hashing do stabilnej dystrybucji.
Programy eBPF dla per-pod QoS (haki TC/XDP).

6. 2 Polityka Calico/

polityki dostępu do L3/L4, podstawowe klasy priorytetowe, integracja z Kubernetes QoS (Guaranteed/Burstable/KeyEffort).

7) Bramki krawędzi/CDN i API

CDN: klucze pamięci podręcznej (zapytanie normalizacyjne/nagłówki), stale-while-revalidate, ochrona pochodzenia (limit szybkości/filtry bot).
Bramki API: uwierzytelnianie, kontyngenty/plany taryfowe (na konsumenta), ograniczenia SLA, routing geograficzny, wersja API.
WAF: filtrowanie na krawędzi, aby nie marnować procesora jądra.

8) Autobusy asynchroniczne/strumieniowe

Kafka/NATS/Pulsar: kontyngenty producenta/konsumenta, limit wielkości partii, ciśnienie wsteczne przez opóźnienie.
Routing zdarzeń: najemca/idempotency-key, migotanie przegród dla jednolitości.
Dokładnie raz „skuteczny raz”: producenci transakcji + siniaki idempotentne.

9) Timeouts, retreats, backoff

Terminy końcowe: klient <proxy <service (nie na odwrót).
Retrai: Ograniczona liczba z jitterized wykładnicze backoff, ale bez burz.
Idempotencja jest obowiązkowa w rekolekcjach; w przeciwnym razie - SAGA/rekompensata.
Żądania zabezpieczane/równoległe (ostrożność): poprawia p99, zwiększa ogólny ruch.

10) Obserwowalność i SLO

10. 1 Metryka

rate_limit_hits, requests_queued, shed_requests_total, latency_ms{p50,p95,p99}, error_ratio, retry_attempts, outlier_ejections, queue_time_ms.

Klasy: klasa = interaktywnysystemtło, najemca, trasa.

10. 2 Odwzorowanie

Identyfikator korelacji skanowania; oznaczać przęsła z typ przyczyny: 'retry' shed 'przepustnica' kolejka '.
Linki do przekładek/zabezpieczeń w celu zrozumienia wpływu na podsystemy.

10. 3 Dzienniki/raporty

Podsumowanie kropli/przelewów/limitów, mapy ciepła na trasie.
Oddzielne panele dla wskaźnika uczciwości.

10. 4 przykłady SLO

"p99 ≤ 300 ms przy 95 procentowym obciążeniu; szopa ≤ 0. 1%; error_ratio ≤ 0. 5%».
„Co najmniej 95% kwoty jest gwarantowane klasie interaktywnej po przeciążeniu”.

11) Przykłady konfiguracji

11. 1 Nginx: limit szybkości + pęknięcie + podział kanaryjski

nginx map $http_x_canary $canary { default 0; 1 1; }

limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;

upstream api_v1 { server 10. 0. 0. 1; }
upstream api_v2 { server 10. 0. 0. 2; }

server {
location /api/ {
limit_req zone=perip burst=20 nodelay;
if ($canary) { proxy_pass http://api_v2; break; }
proxy_next_upstream error timeout http_502 http_503 http_504;
proxy_pass http://api_v1;
}
}

11. 2 Wysłannik: wyłącznik + wykrywanie zewnętrzne

yaml circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 1000 max_pending_requests: 500 max_requests: 2000 outlier_detection:
consecutive_5xx: 5 interval: 10s max_ejection_percent: 50 base_ejection_time: 30s

11. 3 Istio: najemca kwot (rezerwa na etykiecie)

yaml apiVersion: security. istio. io/v1 kind: AuthorizationPolicy spec:
selector: { matchLabels: { app: api } }
rules:
- when:
- key: request. headers[x-tenant]
values: ["gold"]
Next - RateLimitPolicy in the limit provider with a large quota pool for "gold."

11. 4 wskazówki Kubernetes QoS

Gwarantowane dla dna krytycznego (żądania = limity).
PodPriority & Preemption: Krytyczne dna spowoduje przesunięcie wąskich gardeł tła.
Topologia rozprzestrzenianie się ograniczeń: zagospodarowanie przestrzenne dla zrównoważonego rozwoju.

12) Anty-wzory

Globalny limit oczu → fałszywe 429/timeouts dla ważnych klientów.
Retrai bez jitter/idempotencja → burza.
Zamieszanie czasu (klient> serwer) → zamarza i „podwójna praca”.
Wspólne bufory/kolejki na prod i eksperymenty → zanieczyszczenie danych.
„Zawsze lepkie” bez zdrowego rozsądku → nierówne obciążenia/gorące węzły.
Wyłączone wykrywanie outlier → zgniła instancja psuje wskaźniki tygodnia.

13) Lista kontrolna wdrażania

  • Ruch segmentowy: klasy/najemcy/trasy.
  • Ustawić budżety docelowe na RPS/połączenia/bajty i p95/p99.
  • Włącz limit szybkości (lokalny + globalny), wyłącznik, wykrywanie odstępstw.
  • Skonfiguruj podział kanaryjski + auto rollback na metrykach.
  • Rekordowe timeouts/retrays z wykładniczym backoff + jitter.
  • Włączyć ECN/BBR (w stosownych przypadkach) i fq_codel/HTB do wyjścia.
  • Poszczególne baseny/bufory/kolejki do cienia i eksperymentów.
  • Deski rozdzielcze: mierniki granic, kolejek, opóźnień, uczciwości.
  • SLO i runbook: shedding/rollback/enable criteria.

14) FAQ

P: Co wybrać: kształtowanie lub policja?
Odp.: Dla niestandardowych ścieżek - kształtowanie (anty-aliasing bez kropli). Dla klas usług „tło „/” luzem „- policja w celu ochrony przepływów krytycznych.

P: Jak uniknąć burz odwrotu?
Odp.: Jitterized backoff, limit prób, idempotencja, wiersze serwera 'Retry-After', globalne kwoty.

P: Lepki czy hashing?
Odp.: Sticky - gdy sesja jest potrzebna/pamięć podręczna jest lokalna dla użytkownika; hashing - gdy potrzebujesz jednolitości i stabilności odlotu.

P: Co daje HTTP/3/QUIC?
Odp.: Bez zamków TCP HOL, lepsza tolerancja strat, szybsze odzyskiwanie - znacznie zmniejsza ogony p99/p999.

15) Kwoty całkowite

Efektywne kształtowanie i routing L7 to spójny zestaw polityk: priorytety i kwoty, sprawiedliwa dystrybucja, bezpieczne limity i inteligentne trasy, poparte obserwowalnością i SLO. Stosując opisane praktyki (HTB/fq_codel/ECN na niższych poziomach i Envoy/Istio/Nginx/eBPF na górze), otrzymasz przewidywalne ogony opóźnienia, odporność na przeciążenie i kontrolowane, bezpieczne uwolnienia.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Telegram
@Gamble_GC
Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.