gRPC vs REST в iGaming
1) iGaming համատեքստը 'ինչու՞ ընդհանրապես ընտրել արձանագրություն
IGaming պլատֆորմը միաժամանակ ծառայում է
իրական ժամանակն է 'գործակիցների ֆիդները, լայվային տոկոսադրույքները, կուպոնի/խաղի կարգավիճակների սթրիմինգը, խաղացողի սահմանները, ակնթարթային արգելափակումները։
գործարքները 'դեպոզիտ/եզրակացություն, վճարումների հաշվարկը, բոնուսները, KYC/AML, տիկետներ աջակցություն։
Գործընկերներ/W2V 2019 'խաղերի պրովայդերներ, հիբրիդային դարպասներ, աֆֆիլիատներ, կարգավորիչներ։
Արձանագրությունից կախված է p99 լատինականությունը, որը տեղադրված է գագաթների տակ (խաղեր, ֆիններ), ինտեգրման հարմարությունը և գործողության արժեքը։
2) Հակիրճ 'ինչ է REST և gRPC։
REST/HTTP/JSON 'մարդկային, համընդհանուր։ Հիանալի աշխատում է զննարկիչների/բջջային PPK-ի հետ, CDN-ն է, հեշտ է։
GRPC (HTTP/2 + Systobuf) 'երկուական պայմանագրեր, հաճախորդների ավտոմատ արտադրություն, uni/bi-medional striming, անիմացիա, խիստ սխեմաներ։ Ցանցային ծառայությունը նրա տարրն է։
3) Որտե՞ ղ է տեղին iGaming-ում
GRPC - ուժեղ կողմերը
Live-fids-ը և tracking-ը 'գործակիցների հոսքը, խաղի իրադարձությունները, լիմիտները (streaming/bidi)։
Ներքին միկրովայրկյաններ 'ռիսկի շարժիչ, գնորդ, հակաֆրոդի սկորինգ, հավասարակշռություն/դրամապանակ, p99/CPU պահանջներ։
RPS-ի մեծ շրջանառությունը կարճ հաղորդագրություններով (ցածր գինը բայթ, փոքր GC-pressure)։
Խիստ պայմանագրեր թիմերի և տարբերակների միջև (Drobuf backward-compat)։
REST - ուժեղ կողմերը
Հանրային և գործընկերային API 'պարզ ինտեգրում (curl/Postman), գործընկերներ առանց gRPC ապակու։
Զննարկչի ճակատը 'national, առանց վիզաների; cash/ETag/304/CDN աջակցություն։
Երկար գոյատևող ռեսուրսներ ՝ ռուսական և խաղեր, պրոֆիլներ, հաշվետվություններ, կազմաձևեր։
Կարգավորող հեռացումը 'JSON/CSV-համատեղելիությունը առանց կողպեքների։
4) Լատենտ և թողունակություն
GRPC-ն ավելի տնտեսական է, քան ծանրաբեռնվածությունը (Delobuf) և սերիզացիայի/դեսերիլիզացիայի ծախսերը, հաղթում է կարճ և հաճախակի զանգերի վրա։
REST/JSON ավելացնում է 30-200 տոկոսը ծանրաբեռնվածության համար, բայց շահում է քեշի և CDN-ի շնորհիվ հանրային GET-ում։
Առաջարկություն ՝ DC/wwww.w.w.w.ru - gRPC լռելյայն; դուրս - REST, բացի իրական ժամանակից։
5) Իրական ժամանակը 'լայվ տոկոսադրույքները և գնանշումները
Տարբերակները
GRPC server streaming/bidi 'անընդհատ հոսք զբոսաշրջիկների համար, backpressure, պատուհանի վերահսկողություն։
GRPC-Web-ը (Envoy-ի միջոցով) զննարկչի համար, եթե անհրաժեշտ է երկուական արձանագրություն առջևում։
Windows Socket/SSE + REST: Երբ gRPC-Web էկոհամակարգը չի համապատասխանում կամ մաքուր զննարկչի կարիք ունի առանց վիզաների։
Pattern: ներսում - gRPC strimes գնորդից մինչև API/edge; Դուրս - No Socket/SSE առջևի համար, REST CRUD-ի համար։
6) Իդեմպոտենտալությունը, կարգուկանոնը և առաքման երաշխիքները
REST: «Idempotency-Key» -ի համար POST-ի դարպասի վրա, կրկին ներկայացում թայմաուտում։ բանալին Redis/BD c TTL-ում է։
GRPC ՝ հաճախորդի/հավասարակշռության մակարդակում + idempotent մեթոդներ («retriable _ status _ codes») և sequence/տարբերակումը սթրիմինգի հաղորդագրություններում։
Հաշվարկելու համար օգտագործեք Inbox/Winbox + UPS.RU սինգլը (տե՛ ս դեդուպլյացիայի և կարգի մասին հոդվածներ) - արձանագրությունը ինքնին չի տալիս բիզնես ազդեցության երաշխիքներ։
7) Անվտանգություն և ընկերակցություն
Տրանսպորտը ՝ TFC/mTSA և mesh, և edge; GRPC-ում ավելի հեշտ է պահել mTSA (SPIFFE/SPIRE) ամենուր։
Վավերացում. Երկու տարբերակները աջակցում են OAuth2/OIDC (JWT 'Authorization: Bearer'), gRPC-ի համար 'մետատվյալներ։
Ստորագրություններ/NMAS 'ավելի հաճախ B2B-ի REST ինտեգրացիաներում։
PII/լոգիստիկան 'երկուական payload gRPC-ն ավելի բարդ է, քան պատահականորեն «թափել» լույսերի մեջ, բայց ամեն դեպքում օգտագործել քողարկումը։
Կարգավորողները հաճախ պահանջում են մարդկային արտանետումներ 'REST/JSON ավելի հարմար։
8) Դիտողությունն ու շահագործումը
Երկու ձևաչափերը հիանալի աշխատում են OpenTelemetry-ի հետ '«traceparent» (REST )/gRPC-interseptors։
GRPC-ն տալիս է հարուստ կարգավիճակներ/թրեյլերներ։ REST-ը HTTP-ի և CDN/WAF շերտերի սովորական կոդերն են։
Դարպասի վրա ՝ rate limiting/www.ta, circuit breaker, www.ier det.ru, fw.inj.ru - հավասարապես հասանելի (Envoy/Kong/NGINX/Traefik)։
9) Համատեղելիությունը և ճակատը
Մաքուր զննարկիչը չի ասում gRPC տուփից gRPC-Web կամ REST/WS/SSE։
Բջջային հաճախորդները (iOS/Android) - gRPC հաճախորդները հասանելի են, բայց MSK-ի չափը և սթորի քաղաքականությունը երբեմն մղում են REST-ին։
10) Խառը պարագծի ճարտարապետական արտոնագրերը
10. 1 «Կրկնակի ճակատների» ռազմավարություն
Ներսում (east-west) 'gRPC։
Արտաքին (north-south) 'REST + WS/SSE։
Transcoding edge (Envoy) 'մեկ backend, երկու հաճախորդ։
yaml
Envoy: REST ↔ gRPC transcoding (фрагмент)
typed_per_filter_config:
envoy.filters.http.grpc_json_transcoder:
"@type": type.googleapis.com/envoy.extensions.filters.http.grpc_json_transcoder.v3.GrpcJsonTranscoder proto_descriptor: "descriptors.pb"
services: ["betting.BetsService"]
print_options:
preserve_proto_field_names: true
10. 2 gRPC-Web
Envoy (gRPC-Web) wwww.gRPC ծառայություն։ Հարմար է ռուսական-վիջեթների և Ադմինական UI-ի համար։
11) API պայմանագրերը և էվոլյուցիան
Protobuf (gRPC)
Միայն ընդլայնեք հաղորդագրությունները (ավելացրեք դաշտերը նոր թեստերով), մի փոխեք սեմանտիկան և տեսակները։
proto syntax = "proto3";
package betting;
service BetsService {
rpc PlaceBet(PlaceBetRequest) returns (PlaceBetResponse);
rpc LiveOdds(EventsFilter) returns (stream OddsUpdate); // серверный стрим
}
message PlaceBetRequest {
string account_id = 1;
string event_id = 2;
double stake = 3;
string selection = 4;
string idempotency_key = 5;
}
OpenAPI (REST)
«/v1 »ճանապարհի տարբերությունը, նոր դաշտերը միայն օբյեկտիվ են։
yaml openapi: 3.0.3 info: { title: Bets API, version: "1.0" }
paths:
/v1/bets:
post:
operationId: placeBet parameters:
- in: header name: Idempotency-Key required: true schema: { type: string }
requestBody:
required: true content:
application/json:
schema:
$ref: '#/components/schemas/PlaceBetRequest'
responses:
'201': { description: Created }
components:
schemas:
PlaceBetRequest:
type: object required: [accountId, eventId, stake, selection]
properties:
accountId: { type: string }
eventId: { type: string }
stake: { type: number, format: double }
selection: { type: string }
12) Քեյսա iGaming: Ի՞ նչ ընտրել
13) Արտադրողական նրբություններ
Timauts/retrai
GRPC: «per _ try _ timeout», սահմանափակել «max _ attempions», միայն idempotent RPC-ի համար։
REST 'էքսպոնենցիալ backoff, ջիտթեր, 429/5xx-քաղաքական։
Մարմնի/մեթոդի սահմանափակումը
REST 'հարցման չափի սահմանափակումներ, «Entertent-Type»։
GRPC ՝ հաղորդագրությունների չափի սահմաններ, flow prol։
Քեշինգը
REST: `Cache-Control`, `ETag`.
GRPC: Կեշը հավելվածի/դարպասի մակարդակում (unary), սթրիմների համար 'դիպուկահարներ/կտրվածքներ։
Դիտարկումը
Պարտադիր են 'հարաբերակցության լոգ (request), սպան, սխալների չափումներ երթուղով/մեթոդով, p50/p95/p99 բաշխումը։
14) Anti-patterna
«Վերաշարադրել ամեն ինչ gRPC-ում» և փորձել ուղղակիորեն տալ ճակատը, առանց gRPC-Web/2019 դա կոտրում է զննարկիչը։
Հանրային վեբ-էնդպոինտները միայն gRPC-ն են, գործընկերները շեղվում են։
REST-Poling-ի միջոցով լայվ-ֆիդներ սթրիմ 'ցանցի/բեկանդի և դանդաղ գնանշումներ։
Հաճախորդի մակարդակում ոչ idempotent վիրահատություններ (տոկոսադրույքի/պարամետրերի ստեղծում)։
Ապավինել ֆիզիկական ժամանակին իրադարձությունների կարգի համար տարբերակների/sequence-ի փոխարեն։
15) Արձանագրության ընտրության չեկի ցուցակ
- Direaltime կամ CRUD/ավստրիական?
- Հաճախորդները 'զննարկիչ/գործընկերներ կամ միկրովայրկյաններ/բջջային SDK։
- Պահանջվում է սթրիմինգ (server/bidi)։
- Անհրաժեշտ է CDN/keshi պարագծի վրա։
- Ո՞ ր SLO-ն է p99-ում և սխալների բյուջեին։
- Կա՞ արդյոք կարգավորիչի պահանջները հաշվետվության ձևերին (JSON/CSV)։
- Idempotenty և Dedup Plance
- API դռան/mesh-ի ինտեգրումը պատրաստ է (mTSA, limits, հեռարձակում)։
- Տարբերակման և ինտեգրման ռազմավարությունը հաստատված է։
- Dashbords/alerta և թեստային պլեյբուսներ «խաղի օրվա» պիկի վրա պատրաստ են։
16) Մինի պլեյբուկները (Game Days)
Խաղը պիկ է 'կրկնապատկել RPS Live-ֆիդները p99 և հաղորդագրությունների կորուստները (strims)։
Պրովայդերի ձախողումը 'apstrim- ի անկումը' CB/www.ier-ը պետք է խցանվի, ճակատը պետք է քայքայվի վերջին կեղևի վրա։
Report-ը 'անջատել gRPC www.REST-ի հեռարձակումը, համոզվել, որ fallback (WS/SSE) աշխատում է։
Ցանցային ուշացումները/WAN: Արհեստականորեն բարձրացնել RTT-ը նախատեսվում է ստուգել թայմաուտների և backoff հարմարեցումը։
Մեծ մարմիններ (KYC) 'ստուգել սահմանները/բազմաթիվ բեռնումները, ամփոփել։
17) Արդյունքները
Շրջանակի ներսում 'gRPC-ը դեֆոլտ է արտադրողականության, խիստ շարժիչների և սթրիմինգի համար։
Պարագծի վրա 'REST (և WS/SSE real-time UI) - դեֆոլտ լայն կոդավորման համար։
Մենք կարոտում ենք աշխարհները API-կողպեքների միջոցով (transcoding, limits, վավերացում) և www.mesh (mTRC, քաղաքական գործչի)։
Հաջողությունը խառը ճարտարապետության մեջ է, հստակ տարբերությամբ 'ստրիմինգ/ցածր լատենտ ներսում, հարմարավետության և համընդհանուր դրսից։