Socket strims և իրադարձություններ
TL; DR
Աշխատանքային հոսքը = վստահելի ջրանցք (WFC) + ամփոփված օֆսեթներ + idempotent իրադարձություններ + խիստ լիմիտներ և backpressure։ Արեք 'JWT-վավերացում, տոպիկայի, heartbeats, seq/www.set + resume-tocen, at-lement-once + dedup։ Մասշտաբի համար 'շարդինգը user/tenae, sticky-routing և հերթը (Kafka/NATS/Redis Streams) որպես ճշմարտության աղբյուր։
1) iGaming բիզնես քեյսերը (որ իրականում սթրիմ է)
Հավասարակշռություն/լիմիտներ 'հավասարակշռության ակնթարթային փոփոխություններ, RG լիմիտներ, արգելափակումներ։
Տոկոսադրույքները/արդյունքները 'հաստատումը, կարգավիճակը, հաղթողների հաշվարկը։
Մրցույթներ/առաջնորդներ 'դիրքեր, թայմերներ, մրցանակային իրադարձություններ։
Վճարումները 'payout/refund, KYC/AML դրոշները, որպես ծանուցումներ (իսկ քննադատությունը մնում է REST + webhuki)։
Ծառայության իրադարձությունները 'չաթի հաղորդագրությունները, push-բանները, նստաշրջանի արձանները, maintena.ru։
2) Արձանագրություն և միացում
Միայն WFC (TFC 1։ 2+/1. 3). Առավելագույն 1 ակտիվ միացում սարքի/ստեղնաշարի վրա լռելյայն։
Ping/Pong: Հաճախորդը «ping» է յուրաքանչյուր 20-30 վրկ, թայմաութ պատասխանը 10 վրկ: Սերվերը միանում է 3 թայմաուտով անընդմեջ։
Ֆինլանդիա '«permessage-entlate», շրջանակի չափի սահմանը (օրինակ ՝ 3864 KB)։
Ծանրաբեռնվածության ձևաչափը 'JSON արտաքին, Disobuf/WingPack ներքին/բջջային համար։
3) Վավերացում և հեղինակային իրավունք
Handshaik-ից JWT-ի հետ query/header-ում («Sec-Express Socket-Eurocol »/« Authorization»), TTL-ը կարճ է (6515 րոպե), refresh-ը out-band-band (REST)։
Tenant-scoped claims: `sub`, `tenant`, `scopes`, `risk_flags`.
ACL-ը տեղանունների/ալիքների վրա 'բաժանորդագրություն միայն թույլատրված «topic» (օրինակ ՝ «user: » id', «» tournament: «id +,» «game:»)։
Միացության փոխներարկումը հոսանքի երկարությամբ '«փափուկ պատուհան» 60 վրկ։
4) Ստորագրման մոդել
Connection-ից հետո հաճախորդը ուղարկում է թիմերին
json
{ "op":"subscribe", "topics":["user:123", "tournament:456"], "resume_from":"1748852201:987654" }
{ "op":"unsubscribe", "topics":["tournament:456"] }
«resume _ from» - օֆսեթ (տե՛ ս 355), եթե հաճախորդը վերականգնում է կապը։
Սերվերը պատասխանում է ack/nack-ին, որը չի անցել ACL-ը '«nack» -ի հետ։
5) Առաքման և ամփոփման երաշխիքները
Նպատակը 'at-leport-once-once-ը ալիքի վրա + հաճախորդի մոտ։
Յուրաքանչյուր իրադարձություն ունի «կուսակցության» (սովորաբար user/room) և գլոբալ «event _ id» -ի համար։
Ռի կոնեկտում հաճախորդը փոխանցում է "resume _ from" = վերջին ապացուցված "seq" (կամ "www.set 'brocker)։ Սերվերը ավելացնում է բաց թողված իրադարձությունները «ճշմարտության աղբյուրից» (Kafka/NATS/Redis Streams)։
Եթե լագը գերազանցում է retention (օրինակ, 24 ժամ) - սերվերը ուղարկում է «www.apshot» վիճակը և նոր «seq»։
Սեմանտիկան հաճախորդի մոտ
Պահել 'lance _ seq '/' event _ id' durable պահեստում (IndexeddDB/Keychain)։
Dedup 'event _ id', բաց թողնել իրադարձությունները 'seq www.l.l.ru _ seq ", հայտնաբերել անցքեր (gap) wwwww.ru ավտոմեքենայի' resync 'crupshot հարցումը։
6) Հաղորդագրության սխեման (envelope)
json
{
"ts": "2025-11-03T12:34:56. 789Z",
"topic": "user:123",
"seq": "1748852201:987654", // partition:offset
"event_id": "01HF..", // UUID/KSUID
"type": "balance. updated",
"data": { "currency":"EUR", "delta"--5. 00, "balance":125. 37 },
"trace_id": "4e3f.., "//for correlation
"signature": "base64 (hmac (...)) "//optional for partners
}
"Type '- հիբրիդային տաքսոնոմիա (տե՛ ս իրադարձությունների բառարանը)։
PII/PCI - բացառել/քողարկել դարպասի մակարդակում։
7) Backpressure, քվոտաներ և պաշտպանություն «թանկ» հաճախորդներից։
Serverts Client: per-connectionsend-queue-ի հետ «սայթաքող պատուհանի» հետ։ Լոպենը «աղմկոտ» տոպիկայի կամ ww.conn.ru ստորագրությունների հավաքումն է '«1013 »/« policy _ violation» կոդով։
Client no Server: limits 'www.scribe/unsubscribe "(օրինակ ՝ 10/վրկ), տոպիկների ցուցակի սահմանափակումը (3.50), նվազագույն ռուսական ռուբլիա։
Rate limits-ը IP/tenae/բանալին։ Աննոմալիան ժամանակավոր արգելափակում է։
Priority: Կենսական կարևոր իրադարձություններ (հավասարակշռություն, RG-limits) գերակա հերթն է։
8) Պաշտպանություն և անվտանգություն
WAF/բոտ պրոֆիլը handshaik-endpointe-ում, Origin-ի թույլատրված ցանկը։
MTSA-ի միջև edge-ի և strem-հանգույցների միջև։
DoS-պաշտպանություն 'MSN-cookies L4-ում, L4-ում, Limits-ի բաց WS/wwwww.keep-alive-ի համար։
Anti-replay: «timestamp» -ը ազդանշանային ստորագրության մեջ բեռը (գործընկերների համար) թույլատրելի պատուհանի հետ 5 ռուբլով
Վարձակալների մեկուսացումը 'ֆիզիկական/տրամաբանական շարդացիա, բանալիներ/հոսանքներ per-tenae։
9) Տեղափոխական ճարտարապետությունը
Դարպասը (edge) 'TMS տերմինայթ, authN/Z, քվոտաներ, փոխանցման միկրոակտիվացում։
Stream-2019 'stateless-workers sticky-routing-ով' hash (user _ id)% N '։
Իրադարձությունների բրոքերը ՝ Kafka/NATS/Redis Streams-ը ճշմարտության և ռելեի բուֆերի աղբյուրն է։
State-ծառայություն 'պահպանում է դիպուկահարները (bal.ru, դիրքերը մրցույթի մեջ)։
Multiregion: 71-71; GSLB-ը մոտակա տարածքում։ home-region տեղադրված է լոգինի մեջ; ֆեյլովերի դեպքում '«սառը» ամփոփում այլ տարածաշրջանից։
10) Կարգը, ներդաշնակությունը, գաղափարախոսությունը
Պատվիրումը երաշխավորված է կուսակցության ներսում (user/room), ոչ գլոբալ։
Կոնսիստենցիա 'իրադարձությունը կարող է գալ ավելի շուտ, քան REST պատասխանը։ UX-ը պետք է կարողանա ապրել միջանկյալ վիճակի հետ (optimistic UI + reconciliation)։
Idempotention: կրկնվող «event _ id» -ը չի փոխում հաճախորդի վիճակը։
11) Սխալներ, reconna.ru և «փոթորիկ»
Փակման իրականացումը '«1000» (normal), «1007» (policy), «1011» (ental), «1013» (serverload)։
Հաճախորդի էքսպոնենցիալ backoff + jitter: 1s, 2s, 4s... մաքս 30s.
Զանգվածային ռեկոնեկտների ժամանակ («thundering herd») սերվերը տալիս է «retry _ after» և «մոխրագույն» պատասխաններ, որոնք հուշում են օգտագործել SSE fallback read-only-ի համար։
12) Քեշը և դիպուկահարները
Յուրաքանչյուր բաժանորդագրություն կարող է սկսել իրական վիճակից, ապա 'իրադարձությունների հոսքը։
Սխեմայի տարբերակումը «բանաձև _ version» և համատեղելիությունը (դաշտերի ընդլայնումը հաճախորդներին չի կոտրում)։
13) Դիտարկումը և SLO-ն
Մետրիկները
Միացություններ ՝ ակտիվ, տեղադրված/վայրկյան, վարձակալների բաշխումը/տարածաշրջանները։
Առաքում ՝ p50/p95 ձգձգումներ բրոկերից մինչև հաճախորդը, drop-rate, resend-rate։
Տե՛ ս 'հաջողակ ամփոփումների մասնաբաժինը առանց կեղևի, gap-դետեկտորի։
Սխալները ՝ 4xx/5xx-ը Handshaike-ում, փակման, լիմիթ-հիթերի վրա։
Մոսկվա: RPS հրամաններ 'www.scribe ", հերթերի չափը, CPU/NET։
SLO կենտրոններ
WS p95-ի տեղադրումը 500 մզ է (տարածաշրջանի ներսում)։
End-to-end latency իրադարձությունները p95-300 ms (user-partium)։
Resume success ≥ 99%, message loss = 0 (по at-least-once).
Uptime strim-endpointa 3699։ 95%.
14) Սխեմաների և տարբերակների կառավարում
Տանտերերի, օրինակների և սեմանտիկայի հետ կապված իրադարձությունների բառարան։
«Փափուկ» էվոլյուցիա 'միայն օպորտիկ դաշտերի ավելացումը։ հեռացումը '«@ deprecated» ժամանակահատվածից հետո։
Պայմանագրային թեստեր հաճախորդների SDK-ի դեմ, JSON Schema/Eurobuf-ում։
15) Պլեյբուկները (ներկառուցել ձեր ընդհանուր պլեյբուկում)
Latency-ի աճը 'խմբաքանակները անցնել պահեստային բջիջների վրա, մեծացնել batch չափը բրոկերից, ներառել կենսական կարևոր իրադարձությունների գերակայությունը։
Ռեքոննեկտների փոթորիկը 'ակտիվացնել «retry _ after», ժամանակավորապես բարձրացնել handshake-ի սահմանները, ներառել SSE ֆոլբեկը։
Հոսանքների արտահոսքը 'JWKS-ի լուծարումը, տուժած հոսանքների արձագանքը, re-auth-ի հարկադիր reconnations։
Բրոքերի կուսակցության կորուստը 'տեղափոխումը դիպուկահարների ռեժիմին, վերականգնումից հետո։
16) API մինի-ճշգրտումը (պարզեցված)
Handshake (HTTP GET → WS):
GET /ws? tenant=acme&client=web
Headers:
Authorization: Bearer <JWT>
X-Trace-Id: <uuid>
Հաճախորդի թիմերը
json
{ "op":"subscribe", "topics":["user:123"], "resume_from":"1748852201:42" }
{ "op":"unsubscribe", "topics":["user:123"] }
{ "op":"ping", "ts":"2025-11-03T12:34:56Z" }
Սերվերային պատասխանները
json
{ "op":"ack", "id":"subscribe:user:123" }
{ "op":"event", "topic":"user:123", "seq":"1748852201:43", "type":"balance. updated", "data":{...} }
{ "op":"snapshot", "topic":"user:123", "seq":"1748852201:42", "state":{...} }
{ "op":"error", "code":"acl_denied", "reason":"no access to topic tournament:456" }
{ "op":"pong", "ts":"..." }
17) UAT chek թերթ
- Ամփոփենք օֆսեթից հաճախորդի 1/10/60 րոպեից հետո։
- Dedup 'նույն «event _ id» -ի կրկնվող առաքումը չի փոխում վիճակը։
- Gap-դետեկտորը տեղադրվում է ավտոմատ 'www.apshot "և հավասարեցում։
- Քվոտաները և backpressure: բեռնված հաճախորդը ստանում է policy-www.conn.ru։
- Multiregion: failover տարածաշրջանի պահպանությամբ։
- Lenta.ru: Token-rocker, որն ավարտվում է JWT-ից, ACL-ից դուրս գնալու փորձը։
- RG/իրադարձությունների հավասարակշռությունը գալիս է ավելի շուտ/REST-ից հետո, UI-ն ճիշտ «կարում է»։
18) Հաճախակի սխալներ
Ոչ "seq/www.set" և "- մենք կորցնում ենք իրադարձությունները և վստահությունը։
Քննադատական վճարային թիմերի խառնուրդը WS մուտացիաներում 'օգտագործեք REST-ը։
Backpressure/quot-ի բացակայությունը հիշողության «կասեցված» միացությունն է և լավինը։
Համաշխարհային կարգուկանոնը թանկ է և կարիք չունի։ բավականին կարգուկանոն է կուսակցության մեջ։
PII տրամաբանությունը իրադարձությունների մեջ 'մասնագիտության խախտումներ և PCI/GDPR։
Իրադարձությունների և տարբերակման բառարանի բացակայությունը կոտրվում է հաճախորդների կողմից։
Ռեզյումե
Socket-strims-ը տալիս է UX և ռուսական ազդանշաններ, եթե դրանք կառուցված են որպես ամփոփված, պաշտպանված և սահմանափակ ջրանցք 'WFC + mTRK/JWT, ACL տոպիկի վրա, seq/www.set + resume, at-leport-once' s, dedeupupup/jup/bpututup/bputututum/dum/jutum/jutum/jum/jutum/jute/jutum/jutum/jum/jum/j, բրոքերը որպես ճշմարտության աղբյուր, դիտարկումը և SLO-ն։ Այսպիսով, սթրիմները մնում են արագ օգտագործողի համար և կառավարվում են պլատֆորմի համար 'առանց անվտանգության և փողի փոխզիջումների։