API դարպաս և միկրոավտիզացիա
1) API դարպասի դերը ճարտարապետության մեջ
API-դարպասը L7 բաղադրիչն է սահմանին (edge), որը
մուտքագրող (HTTTP2/HTTP3, Master Socket, gRPC);
անցնում է կանոններով (host/path/headers/method/query/geo/քաշի/առողջության);
օգտագործում է քաղաքական գործիչներ 'վավերացում/հեղինակային, rate limiting, WAF, SNS, կեշինգ;
կատարում է փոխակերպումներ (վերնագրերի/մարմինների նորմալացում, gRPC no JSON, GraphQL stitching);
ապահովում է կայունություն (timeouts, retries, circuit-breaker, medier detae);
տալիս է դիտարկումը և բիլինգը (լոգներ, մետրեր, հետքեր, քվոտաներ);
ակտիվացնում է ներքին տեղաբանությունը (www.mesh, մասնավոր ծառայություններ)։
Հաճախ օգտագործվում է զույգում 'Edge/API-Gateway + Ingress/Mesh (Envoy/Istio/Linkerd) - առաջինը լուծում է արտաքին քաղաքականությունը, երկրորդը' east-west։
2) Տիպիկ տեղաբանություններ
Միակ գլոբալ դարպասը (CDN/edge POP no L7 gateway ռուսական ծառայություններ) պարզապես կենտրոնացված քաղաքականություններ են։
Տարածաշրջանային կողպեքները (per-region) + խելացի միկրոօրգանիզացիա գեո/լատենտ։
Multi-tena.ru: Ընտրված/ենթաբաժիններ/բանալիներ, քվոտաներ և սահմանափակումներ վարձողի վրա։
Hybrid: on-24m + cloud, private link/peering, մասնավոր backends API դարպասի համար։
3) L7 ուղղորդման կանոնները
Չափանիշները
Host/Path: `api. example. com` → `/v1/orders/`.
Headers: `X-Client`, `X-Region`, `User-Agent`, `Accept`.
Method/Content-Type: JSON/Delo/GraphQL տարբերությունը։
Query/Fragram: Զգուշորեն ազդում է քեշ/տարբերակների վրա։
Geo/Latency: ամենամոտ ROR/տարածաշրջանը, failover դեգրադացիայի ժամանակ։
Weighted/Canary: բաշխումը 90/10, 50/50, sticky cookie-ով։
Session affinity: hash-based բանալին/tokena (կոկիկ մասշտաբով)։
Օրինակ (NGINX Ingress, կանարյան քաշը)
yaml nginx. ingress. kubernetes. io/canary: "true"
nginx. ingress. kubernetes. io/canary-weight: "10" # 10% traffic to new backend
Օրինակ (Envoy, header-based routing)
yaml match: { prefix: "/orders", headers: [{name: "X-Experiment", exact_match: "new"}] }
route: { cluster: orders-v2 }
4) Արձանագրություններ և համատեղելիություն
REST/JSON - դեֆոլտ, նկարագրել OpenAPI-ը/հաճախորդների վալիդացիայի համար։
GRPC-ն binar Coro-ն է HTTP/2-ի վերևում։ արտաքին հաճախորդների համար օգտագործեք gRPC-JSON transcoding։
GraphQL-ը համախմբում է ծառայությունները։ պարագծի վրա վերահսկեք complexity/հարցումների խորությունը։
Windows Socket/SSE - երկբևեռ/2019; հաշվի առեք sticky և timeouts։
HTTP/2/3 (QUIC) - բազմաբնույթ/արագ մեկնարկը; WAF/2019-ի հետ համատեղելիությունը։
5) Անվտանգություն 'վավերացում և հեղինակային իրավունք
5. 1 Տրանսպորտ
TLS 1. 2 + պարագծի վրա, HSTS, OCMS stapling, PSA։
MTSA-ի համար V2V/ներքին API և մեքենաներ-մեքենա։
IP allowlist/denylist, գեո սահմանափակումներ։
5. 2 Կիրառական մակարդակ
OAuth2/OIDC: bearer-tocens JWT, ստորագրության/էքսպիրացիայի/լսարանի ստուգում։
NMAS/ստորագրություն '+ կանոնականացված տող + ստորագրություն (AWS նման) - պաշտպանություն փոխարինումից, կրկնօրինակից (nonce/time պատուհան)։
API բանալիներ 'միայն որպես ռուսական; իրավունքները 'RBAC/ABAC/սկաուտների միջոցով։
SYS 'ակնհայտ allow-origin, pre-flit kash։
WAF: ազդանշաններ (OWASP API Top 10), անորմալիա, բոտ պաշտպանություն, ռեկուրսիվ JSON դաշտեր։
DDoS/Abuse: connational limiting, token-bucket/Leaky bucket, բերստ + միջին արագություն, դինամիկ բանա։
Օրինակ (Kong, OIDC և limiter)
yaml plugins:
- name: oidc config: { issuer: "...", client_id: "...", client_secret: "...", scopes: ["orders. read"] }
- name: rate-limiting config: { minute: 600, policy: local }
6) Վալիդացիան, փոխակերպումը և համատեղելիությունը
Սխեմաներ ՝ մարմնի/վերնագրերի/OpenAPI/JSON-Schema/Delobuf։
Փոխակերպումներ 'դաշտերի նորմալացում, PII դիմակավորում, հարաբերական վերնագրերի ավելացում («traceparent», «x-request-id»)։
Տարբերակումը '«Header: X-API-Version», «/v1 », ռեսուրս-տարբերակումը; deprecation policy и Sunset.
Backward-compat: միայն add դաշտը; խուսափեք «կոտրող» փոփոխություններից առանց նոր տարբերակի։
Idempotency: `Idempotency-Key` для POST; gateway-ը պահում է Redis-ում TTL-ի հետ։
7) Կայունություն ՝ քաղաքականություններ
Timeouts: connect/read/write; խելացի դեֆոլտներ (օրինակ ՝ 1s/5s/5s)։
Retries 'միայն անվտանգ և կուռքերի համար։ Ջիթթեր, exponential backoff, առավելագույն փորձեր։
Circuit breaker 'բացել սխալների/լատենտության դեպքում։ half-open փորձարկման համար։
Medier deta.ru-ը 'փամփուշտից վատ ինանսների դուրսբերումը։
Bulkhead/մրցակցություն 'սահմանափակումներ per-rope միաժամանակ հարցումների համար։
Failover: ակտիվ/պասիվ, զոնալ քայքայումը։
Shadow traffic: «մոխրագույն» progon V2 զուգահեռ V1 (առանց ազդեցության) համեմատության համար։
Օրինակ (Envoy circuit breaker)
yaml circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 1024 max_pending_requests: 2048 max_retries: 3
8) Քեշինգը և արտադրողականությունը
HTTP-кеш: `Cache-Control`, `ETag/If-None-Match`, `Vary`, `stale-while-revalidate`.
Edge-keshi/ROR: CDN կարգավիճակի և API-ի համար (idempotent GET)։
Compression: «gzip/ww.ru» (մի սեղմեք արդեն սեղմված)։
Request collapsing («coalescing»), նույն զուգահեռ հարցումների համադրություն։
Response shaping: դաշտեր/ֆիլտրեր, պագինացիա (cursor-based), չափի լիմիտներ։
9) Դիտողությունն ու շահագործումը
Метрики: `l7_req_total{route,method,code}`, `latency_ms{p50,p95,p99}`, `upstream_errors`, `retry_count`, `cb_state`, `429_rate`, `quota_usage{tenant}`.
Logs: կառուցվածքային, «trace _ id _ id», «user _ id/tenrone _ id», «client _ ip»։
Թրեյզները ՝ W3C Trace Disext («traceparent», «tracestate»), անհետացեք ապստրիմայում։
Աուդիտ 'ով է առաջացրել, թե ինչ իրավունքներով։ անփոփոխ դեղամիջոցներ զգայուն API-ի համար։
SLO/SLA: 24p99, սխալների բյուջե։ Ռութ մակարդակը ավելի լավ է, քան գլոբալ։
10) Աշխատանքային կարողությունների պլանի կառավարումը
Delta per-ten.ru/բանալին/հաճախորդների փամփուշտը, մինի/ժամ/օր։
Burst + sustained limita; leaky bucket-ի համար։
Fairness: ծանրաբեռնվածության դեպքում 'fox queuing-ը «առաջին հանդիպողի» փոխարեն։
Առաջնահերթություններ ՝ 108/քննադատական երթուղիներ առաջնահերթությամբ և ընտրված փամփուշտներով։
11) Փոփոխությունների և օրինագծերի կառավարումը
Canary/Blue-Green: Քաշային միկրոակտիվացում; ավտոմատ առաջխաղացում SLO (սխալներ/լատենտ)։
Feature gates/backend-դրոշները 'վերնագիր/tokena։
Shadowing/71-վալիդատորներ 'մարմինների/ստատուսների համեմատություն, ընդունիր դելտա։
Սթեյջինգներ 'ընտրված ֆորումներ/ճանապարհներ («staging»)։ ... api '), առանձին բանալիներ և քվոտաներ։
12) Միգրացիայի օրինակներ
12. 1 NGINX-ը հիմնական gateway-ն է, սահմանաչափով և կեշով։
nginx map $http_x_request_id $reqid { default $request_id; }
limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
server {
listen 443 ssl http2;
server_name api. example. com;
security add_header Strict-Transport-Security "max-age = 31536000" always;
location /v1/ {
limit_req zone=perip burst=30 nodelay;
proxy_set_header X-Request-ID $reqid;
proxy_set_header Authorization $http_authorization;
proxy_connect_timeout 1s;
proxy_read_timeout 5s;
proxy_cache api_cache;
proxy_cache_valid 200 10s;
proxy_cache_use_stale error timeout updating;
proxy_pass http://orders-v1;
}
}
12. 2 Envoy - քաշի և գետերի միկրոակտիվացում
yaml routes:
- match: { prefix: "/orders" }
route:
weighted_clusters:
clusters:
- name: orders-v1 weight: 90
- name: orders-v2 weight: 10 retry_policy:
retry_on: "5xx,reset,connect-failure"
num_retries: 2 per_try_timeout: 2s
12. 3 Traefik - midlwary և heders
yaml http:
middlewares:
secHeaders:
headers:
stsSeconds: 31536000 contentTypeNosniff: true routers:
api:
rule: "Host(`api. example. com`) && PathPrefix(`/v1`)"
service: svc-orders middlewares: ["secHeaders"]
13) Anti-patterna
Մեկ գլոբալ սահմանը բոլորի վրա '«լավ հարևանները» տառապում են աղմուկի պատճառով։
Retrai առանց idempotenty-ը պարունակում է էֆեկտներ (վճարումներ, էակներ)։
Անտեսելով «timeout »/« max body size» կախվածությունը/workers սպառումը։
Edge-քաղաքական և բիզնես տրամաբանության խառնուրդը դարպասի մեջ (պարագծի քաշումը)։
Սխեմաների վալիդացիայի բացակայությունը բացատրում է հաճախորդների փխրունությունը և «կոտրող» օրինագծերը։
Մերկ Black Socket-ը բացառությամբ auth/limits/idle-tima։
Գաղտնիքները վերնագրերում առանց ռոտացիայի; mTSA բացակայությունը ներքին B2B-ում։
14) Թեստային պլեյբուկները (Game Days)
Հարցումների փոթորիկը 'limiter/winta ստուգումը, 429 վարքագիծը, դեգրադացիան։
Մեկ միգրանտների կորուստը 'failover/քաշի կրճատում; SLO kanarek.
Բարդ պատասխաններ ՝ max body/timeouts; կրճատումը։
Միգրացիաներ/անոմալիաներ ՝ WAF կանոնները, rexurival JSON-ի արգելքը, GraphQL-ի մեծ խորությունները։
Ուղու ձախողումը '«traceparent» և սերմերի քարոզչության ստուգումը։
Գաղտնիքները ՝ կոդավորման/JWKS-ի լուծարումը, հոսանքների մաքրումը, clock-skew-ը։
15) Ներդրման չեկի ցուցակ
- Որոշված են օրինագծերը/ճանապարհները/տարբերակները, որը հրապարակվել է OpenAPI/Delo-ի կողմից։
- TFC/mTSA, HSTS, գաղտնի կառավարումը և լուծումը։
- Ներառում է վավերացում (OIDC/HMAC), RBAC/սկուտերներ, SNS։
- Limits/քվոտաներ per-tenae, արդար գծեր, 429-UX։
- Ծանրաբեռնվածություն/վերնագրեր, կանարյան պլան և rollback։
- Timeout/retry/circuit-breaker/medier։
- Սխեմաների, փոխակերպման, PII դիմակավորում։
- Edge-кеш/ETag, coalescing, gzip/br.
- Դիտարկումը 'չափումներ, լույսեր, հետքեր, դաշույններ և ալերտներ։
- Runbooks: Միջադեպեր, միգրացիայի վերացում, բլոկային թերթիկներ, «սև ուրբաթ»։
16) FAQ
Q 'Ինչպե՞ ս է API-նավը տարբերվում մեշի ծառայությունից։
A 'Glaze - north-south (արտաքին պարիմետրը, քաղաքականության միջոցով)։ Մեշը east-west է (MTSA/retrai)։ Հաճախ օգտագործվում են միասին։
Q 'Որտե՞ ղ իրականացնել auth' դարպասի կամ ծառայությունների մեջ։
A 'Երկու մակարդակները' դարպասը 'coarse-grained (վավերացում, հիմնական իրավունքները/քվոտաները), ծառայությունը' fine-grained (հիբրիդային դերեր/ատրիբուտներ)։
Q: Ե՞ րբ է անհրաժեշտ gRPC-JSON transcoding։
A: Երբ ներքին gRPC-ն է, իսկ արտաքին պահանջվում է REST/JSON և պարզ հաճախորդներ/զննարկիչներ։
Q 'Ինչպե՞ ս ընտրել տարբերակման ռազմավարությունը։
A 'Հանրային API-ի համար' "/vN '+ վերնագիր և երկար overlap։ Ներքին համար 'capability դրոշներ/կոդավորման սխեմա։
17) Արդյունքները
API-դարպասը ոչ միայն «պրոեկցիա» է, այլ քաղաքական և կայունության կենտրոն։ Ճիշտ միկրոօրգանիզացիան, անվտանգությունը, լիմիտները, վալիդացիան և դիտարկումը տալիս են ածխաջրածինների կանխատեսելիությունը և արագությունը։ Փորձարկեք ձեր արագացուցիչը, ոչ թե շիշը։