Ինչպե՞ ս է կազմակերպվում խաղերի դարակաշարն ու թարմացումը առանց ընդմիջումների
Ինչու՞ zero-downtime ֆորումները կազինոյում
IGaming-ում ցանկացած «միկրոպաուզա» -ը կորցրած տոկոսադրույքներ, նստաշրջաններ և վստահություն է։ Թարմացումները պետք է տեղի ունենան աննկատ խաղացողի համար, դրույքաչափերը շարունակում են ընդունվել, սթրեսը չի փչանում, դրամապանակը և ժապավենը մնում են հետևողական, իսկ մետրերը չեն ցատկում։ Բանալին տարբերակների կարգապահությունն է, պարամետրերի համատեղելիությունը և հետադարձ հայացքները։
Օժանդակ սկզբունքներ
1. Համատեղելիությունը առաջ/առաջ։ Նոր տարբերակները պետք է հասկանան հին իրադարձությունները/դաշտերը, իսկ հին հաճախորդները պետք է ապահով անտեսեն նորերը։
2. Immutable-ասետներ։ Ստատիկան և խաղային ռեսուրսները տալիս են ծանր անուններով։ ֆայլերի «վերաշարադրումը»։
3. Գրելու/կարդալու ճանապարհի բաժանումը։ Դրամական վիրահատությունները (hold/settle) մեկուսացված են և ատոմները, UI/ասպետները փոխվում են ինքնուրույն։
4. Դիտարկումը որպես պայմանագիր։ Ռելիզը առանց թրեյսինգների/մետրի արգելք է։
5. Արձագանքը նույն նորմն է, ինչ թողարկումը։ Պատրաստի պատկերները, որոնք նկարագրվում են «երկու կողմերում», rollback կոճակը առանց ձեռքի շամանիզմի։
Zero-downtime ճարտարապետությունը գործնականում
1) Տարբերակներ և պայմանագրեր
SemVer-ը API/իրադարձությունների համար '"MAJOR-ը։ MINOR. PATCH "," eventVer/www.ractVer "դաշտը յուրաքանչյուր տարբերակում։
Expand no Migrate Windract-ը BD սխեմաների համար, նախ ավելացնում ենք դաշտերը/ինդեքսները (expand), ապա background-migrate (migrate), և միայն այն բանից հետո, երբ մենք անջատում ենք թոքերը (www.ract)։
Dance-write/Dance-read-ը կրիտիկական տրամաբանությունը փոխելիս (օրինակ բոնուսի հաշվարկը), որոշ ժամանակ մենք գրում ենք հին և նոր սեղաններ, համեմատում ենք։
2) Ասետներ և CDN
Բանդալներ/սպրեյտներ/տեքստեր ՝ "app. a1b2c3. js`, `paytable. 98f0. png ', վերնագրեր
Cache-Control: public, max-age=31536000, immutable
Դիմադրության մանիֆեստը սերվերի վրա/CDN-ում։ Մենք տեղափոխում ենք նոր մանիֆեստի հղումը, խաղացողները անմիջապես ստանում են թարմ UI, հին էջերը շարունակում են ապրել նախկին ֆայլերի հետ (առանց բիթային հղումների)։
Pro-purge-ի համար, որոնք հաճախ փոխվում են JSON-ը (wwwinds) + «stale-while-revalidate» փափուկ փոփոխության համար։
3) Ուլտրաձայնային ռազմավարությունները
Blue-Green-ը քննադատական բաղադրիչների համար (դրամապանակ/դահուկորդ/bridge), մենք պահում ենք երկու նույնական միջավայր, անցնում ենք ingress/վիրտուալ ծառայություն վայրկյանում։
Canary API/խաղային դարպասների համար '1-5 տոկոսը ռուսական SLO/fin-դելտա վերլուծությունը ավելացնում ենք մինչև 100 տոկոսը։
Feature flags-ի համար UI-ի և մեխանիկի համար 'միացրեք սեգմենտին, տարածաշրջանը կամ խաղը, առանց կոդի թողարկման։
4) Մոսկովյան խաղեր և RNG
Live (WebRTC/LL-HLS):- Մենք փոխում ենք պլեերը/օվերլեները առանձին վիդեո հոսքից (տարբեր ալգորիթմներ/ալգորիթմներ)։
- Թայմ համաժամեցիչը (Time server) և «փափուկ» փոխանցումը նոր ազդանշանի վրա։
- RNG/հաճախորդ
Խաղի նոր հավաքումը տրվում է որպես ռեսուրսի նոր տարբերակ։ Արդեն սկսող խաղացողները ավարտում են այն հին կլիենտով/կանոններով։
В `round. settled "մենք արձանագրում ենք" calcVer "-ը հաշվարկային շարժիչի տարբերակն է, որպեսզի հակասական փուլերը վերարտադրվեն" ինչպես եղավ "։
5) Մղձավանջը և դահուկորդը, ինչպես նաև փողը կոտրելը։
Մեկ գրող շարդի վրա։ Գրողի տեղափոխումը առանձին ընթացակարգ է (արգելափակումներով) և միայն AZ/տարածաշրջանի ներսում։
Բոլոր ճանապարհների վրա '"bet. place`, `round. settle`, `payout. request`, `cashier. webhook` — с `idempotencyKey`.
PITR-ը և shadow-ստուգումները 'կանացի հաշվարկման ժամանակ, մենք ավելացնում ենք «ստվերի» մեջ, իջեցնում ենք ագրեգատները (GGR/NGR) մինչև խթանումը։
Առանց անցյալի (ստանդարտ սցենար)
1. Պատրաստումը
Մրցույթի պայմանագիրը '«PATCH/MINOR/MAJOR», ձեռնարկության մատրիցը։- Expand-ը նախապես օգտագործվել է, տոմսերի ինդեքսը առցանց է։
- Ասետները բեռնված են CDN-ում, մանիֆեստը պատրաստ է։
2. Կանարյան սկիզբը (API/խաղային դարպաս)
1-5 տոկոսը։ Մենք տեսնում ենք p95/99 'bet։ place, «settle», «error _ rate», «VOID» աճը, անհավասարակշռությունը։
Ֆինանսական համեմատությունը վերահսկող խմբի հետ (դելտա <շեմն)։
3. Ընդլայնումը/փոխակերպումը
Մենք ավելացնում ենք մինչև 25/50/100 կամ տեղափոխում ենք Blue-Green փողի միջուկի վրա։
Միացրեք դրոշները (լոկալի/խաղեր/տարածքներ)։
4. Միգրացիա 'migrate "։
Ֆոնային ջոբները փոխանցում են տվյալները/առաջընթացները, միանում է dox-write-ը։- Հեռուստաչափությունը առաջնորդում է մետրի համընկնումը։
5. Օպտիմիզացիա և «www.ract»։
Մենք անջատում ենք լեգասի կարդալը, հեռացնում ենք «ստվերը» հաջորդ MINOR/MAJOR-ում։- Մենք թարմացնում ենք կոդերն ու սխեմաները/իրադարձությունները, փակում դեպրեքեյթը։
6. Մոսկվան և ռետրոն
POST-mortem/retro-ը նույնիսկ առանց պահանջների 'ինչ բարելավել SLO-ում, ալյուրներում, չեկի տերևներում։
Դիտարկումը և SLO-ն ֆորումի ընթացքում
SLI/SLO:- `bet. place p95 "(նպատակը 150-250 ms)," error _ rate "(<0)։ 3%), `round. settle p95` (≤2 с), `payout. 24it p95 "(38800 ms)։
- Live QoS: `webrtc_rtt_ms`, `dropped_frames`, `aborted_rounds`.
- Տարբերակիչ թեգերը ՝ "buildId '," semver "," www.ractVer "," calcVer "լոգարաններում և թրեյսում։
- Ֆին-դելտա 'GGR/NGR/hold համեմատություն հին/նոր ճյուղի հատվածների վրա։
Rollback (rollback) առանց ցավի
Blue-Green: ակնթարթային ֆորումը տեղադրված է «կապույտ» վրա։
Canary: Մենք արտադրում ենք 0%, անջատում ֆիչին դրոշով։
Ասացիաներ ՝ հին մանիֆեստը հասանելի է (immutable), հին էջերում խաղացողները չեն կոտրվում։- Տվյալները ՝ եթե եղել է dox-write, երբ մենք կարդում ենք «հին» աղբյուրը։ destructive-խմբակցություններ չունեին մինչև www.irm։
Կազմակերպություն և գործընթացներ
Change windows-ը, որն ունի SYE-ի պաշտպանություն, պիկի/սպորտային իրադարձություններ չենք դիպչում։- Runbooks: chek թերթիկներ, ingress, BD դերեր, ֆիչիի դրոշը, կոնտակտային շղթաները։
- Dark-launch: Մենք միացնում ենք ամեն ինչ, բացի UI-ից, դուրս ենք գալիս «թաքնված» բեռից։
Հաճախակի սխալներ (anti-pattern)
Ասպետների վերագործարկումը առանց տարբերակման բացատրվում է բիթային հաճախորդներով և «վարդագույն քառակուսիներով»։
Իրադարձությունների/API-ի կոտրող փոփոխությունները «հանգիստ» էին շեղում պրովայդերների և դաշնամուրի ինտեգրումները։
Interschema + logic-ը մեկ տարբերակով առանց dox-write-ի ֆինանսական տարբերությունների։- Idempotenty-ի բացակայությունը կրկնապատկվում է ռելսերի ժամանակ։
- Մեկ անջատիչ անմիջապես 100 տոկոսով առանց կանարյան և մետրի։
- UI-105-ի խառնուրդը և հաշվարկային միջուկը մեկ տարածման մեջ։
- Ոչ մի արձագանքի պլան կամ արձագանք չի պահանջում «ձեռքով» SQL-ը։
Chek-թերթ zero-downtime
Պայմանագրեր և տվյալներ
- SemVer + 'www.ractVer/eventVer/calcVer "-ը գրված և տեղադրված է։
- Expand "-ը օգտագործվել է նախօրոք," migrate "- ֆոնի վրա;" www.ract "- հաջորդ ցիկլում։
- Dance-write/Dance-read այնտեղ, որտեղ փոխվում է ֆինոլոգիան։
Ենթակառուցվածքը
- Blue-Green փողի միջուկի համար; Canary API/խաղային դարպասի համար։
- Feature-flags UI/մեխանիկի համար; դրոշները կառավարվում են առանց ապարանջանի։
- Treiss 'buildId/semver/calcVer'; dashbords SLO և ֆին հանգստավայր։
- Alerts աճի վրա 'VOID', «error _ rate», directions-QoS։
- Rollback կոճակը (ingress/միկրոօրգանիզացիա), հին մանիֆեստը հասանելի է։
- PITR-ը և shadow-2019-ը 'սառցադաշտը ստուգելու համար։
- Արձագանքման թեստը հիմնված է սթեյջի և փոքր պրոդ սեգմենտում։
- Runbooks; www.change պատուհանը։
- Dark-launch/կանարեյկա; ռետրո թողարկումից հետո։
[CDN: immutable-ասետներ, մանիֆեստ, 108-purge, «stale-while-revalidate»։
Դիտարկումը
Արձագանք և անվտանգություն
Գործընթացներ
---
Zero-downtime-ը iGaming-ում համակարգային պրակտիկա է 'վարկածներ և պայմանագրեր, imutable-assets և CDN, blue-green/canary, առանց անցյալի, գաղափարական փողերի և կոշտ դիտարկման։ Հետևելով այս չեկի թերթին, դուք թարմացնում եք խաղերը և պլատֆորմը այնպես, որ խաղացողը ոչինչ չի նկատում, բացի նրանից, որ ամեն ինչ դառնում է ավելի արագ և կայուն։