WinUpGo
Որոնում
CASWINO
SKYSLOTS
BRAMA
TETHERPAY
777 FREE SPINS + 300%
Cryptocurrency խաղատուն Կրիպտո կազինո Torrent Gear-ը ձեր համընդհանուր տորենթ որոնումն է։ Torrent Gear

Հինգ քննադատական սխալներ API-ը գործարկելիս

Սխալ թիվ 1։ Ոչ մի իդեմպոտենտություն և «փոթորիկ» գետերի

Ախտանիշները 'պատվերների/վճարումների կրկնապատկումը, գումարների անհամապատասխանությունը, վիճահարույց բարձրացումները, DLQ-ի ալերտները մեծանում են։

Արմատն այն է, որ հարցումների/webhuks-ի և ցանցային ֆլամպերի կրկնվող առաքումը նորմալ է։ Եթե վիրահատությունը «ստեղծել/դուրս հանել» չի, ռետրոյները մեծացնում են վնասը։

Ինչպես ճիշտ

Idempotency-Key/« operation _ id »-ը բոլոր անապահով մեթոդների վրա (POST/PATCH)։
  • Յուրահատուկ ինդեքսը BD-ում 'operation _ id "։ Խոհարար, վերադարձրեք վերջին արդյունքը։
  • Webhuks Inbox-աղյուսակի միջոցով (dedube 'event _ id + signature ")։ Ելքային իրադարձությունները Medibox-ն են։
  • Retrai 'առավելագույնը 1-2 անգամ, էքսպոնենտը + ջիտթեր, միայն անվտանգ վիրահատությունների համար։

HTTP-2019 (օրինակ)։

http
POST /v1/payments
Idempotency-Key: ik_f35a2
Content-Type: application/json

{"amount": 5000, "currency": "EUR", "source": "card_..."}

SQL-պաշտպանություն (պարզեցված)

sql
ALTER TABLE payments ADD CONSTRAINT uniq_op UNIQUE (operation_id);

Retrai ջիթերի հետ (կեղծ)

python for i in range(2):
try: return call_api(payload, timeout=0. 6)
except Timeout:
sleep(0. 05 2i + random. uniform(0, 0. 05))
raise UpstreamUnavailable

Չեկ-թերթ

  • Ամբողջ «դրամական/ստեղծող» տրամաբանությունը ունի «operation _ id» և uniq ինդեքսը։
  • Webhuks-ը միայն Inbox-ի միջոցով է 'idempotent worker-ով։
  • Հաճախորդ MSK ինքնաբերաբար տեղադրում է Idempotency-Key-ը։

Սխալ թիվ 2։ Tim-uta/retrai դեմ SLO: «վերագտնելով» կախվածությունը

Ախտանիշները ՝ p95 հանկարծակի վճարում է, հերթերը աճում են, circuit breaker «celaker» -ը։

Արմատն այն է, որ ընդհանուր SLO պատասխանը 400-600 մզ է, իսկ Time-uta դեպի արտաքին API-ը ՝ 1-2 վրկ, իսկ ևս 363 գետերը։ Դուք ավելի երկար եք անում, քան կարող եք, և հարձակվում եք կախվածությունը պատմիչների հետ։

Ինչպես ճիշտ

Budget-timing: եթե SLO 400 ms, upstream-time-aut: 250-300 ms; ընդհանուր Time-out հարցումը sLO-ն է։

Limits/Backpressure: սեմաֆորներ/worker-pool յուրաքանչյուր կախվածության զանգերի համար։ Լի է 429/503 անմիջապես։

Circuit breaker: «Open» թայմ-աուտներում/5hx, «half-open»։

Admission nol: Սահմանափակեք զուգահեռ (հոսքի վրա, endpoint/PSA)։

Օրինակ (Go)

go sem: = make (chan struct +, 64 )//մրցակցության սահմանափակում PMS func callPSA (ctx dext)։ Context, req Req) (Res, error) {
select {
case sem <- struct{}{}:
defer func(){ <-sem }()
c, cancel:= context. WithTimeout(ctx, 300time. Millisecond)
defer cancel()
return psp. Do(c, req)
default:
return Res + com, ErrBusy//չարտոնված մերժումը հերթի փոխարեն առանց վերջի
}
}

Չեկ-թերթ

  • Թայմ-աուտները SLO-ից կարճ են; trai 242; կա ջիթեր։
  • Պուլա/սեմաֆորներ արտաքին API-ի վրա; circuit breaker մետրերով։
  • Մենք վերադառնում ենք 429/Retry-After, ոչ թե կապեր։

Թիվ 3 սխալը։ Թույլ անվտանգություն 'վեբհուկի ստորագրություններ, գաղտնիքներ, TLS

Ախտանիշները '«օտար» վեբհուկները անցնում են, գաղտնիքները կոդում/լոգում, MITM ռիսկերը։
  • Արմատն այն է, որ ստորագրության/թարմության ստուգում չկա, գաղտնիքները ապրում են env ֆայլերում, հին TMS-ում և թույլ վերնագրերում։

Ինչպես ճիշտ

Webhuks HMAC-SHA256 + «X-Timestamp» (պատուհանը 5-10 րոպե), ստորագրության խիստ համեմատություն։

MTIM-ը կրիտիկական ինտեգրման կամ IP allow-list-ի համար։
  • Գաղտնիքների վերացումը Vox/Cloud KSA-ի միջոցով։ նվազագույն իրավունքներ; ընթերցման աուդիտ։
  • TLS 1. 2/1. 3 only, HSTS, ճիշտ SNS (աղբյուրների նեղ ցուցակը)։

Ստորագրության ստուգումը (Python)

python def verify(sig_hdr, ts_hdr, body, secret):
if abs(time. time() - int(ts_hdr)) > 600: raise Expired()
calc = hmac. new(secret, (ts_hdr + "." + body). encode(), hashlib. sha256). hexdigest()
if not hmac. compare_digest(calc, sig_hdr): raise BadSig()

Չեկ-թերթ

  • Բոլոր Webhuks ստորագրվում և ստուգվում են. թարմության պատուհանը սահմանափակ է։
  • Գաղտնիքները KFC/Vox-ում, կան ռոտացիա և աուդիտ։
  • TFC/HSTS-ն ներառում է; MSS կետային; IP/mTSA որտեղ տեղին է։

Թիվ 4 սխալը։ Պայմանագիր-դրիֆթ 'սխեման «ապրում էր իր կյանքը»

Ախտանիշները ՝ «միայն հաճախորդների մի մասում», 500/422 լոգարանում, RPK և API տարբեր տարբերակները վիճում են։

Արմատն այն է, որ չկան խիստ նկարագրություններ, որոնք անհամատեղելի են, «հանգիստ» դաշտեր, տարբեր անվանումներ։

Ինչպես ճիշտ

Առաջին պայմանագիրը 'OpenAPI/AsyncAPI + ռուսական/հաճախորդների արտադրություն; իրադարձությունների համար 'Avro/Delobuf + Schema Registry։

Տարբերակումը '«v1 71 v2» (URI/heder), deprecation պլանը, grace ժամանակահատվածը։

Backward-compat: միայն Minorive-ում փոփոխություններն են։ հեռացնել/վերանվանել առանց v-bump։

Պայմանագրային թեստերը ՝ Pact/Buf - պրովայդեր/հյուպատոսներ ստուգվում են CI-ում։

Օրինակներ

yaml
OpenAPI 'գումարի հստակ տեսակը amount _ minor-ում։
Type: integer minimum: 0 description: Գումարի նվազագույն միավորներում (ամբողջ)

Չեկ-թերթ

  • Պայմանագրերը պահվում են git-ում, CI-ն վալիդացնում է/կոտրում է անհամատեղելիության դեպքում։
  • Սխեմաների գրանցումը իրադարձությունների համար, «back/forward» համատեղելիությունը։
  • Փոփոխական էջ, բաժանման ամսաթվերը, գործընկերների համար թեստային պատը։

Թիվ 5 սխալը։ «Կույր» գործարկումը 'ոչ մի մետրիկ/logs/treiss և ավազաքարեր

Ախտանիշները. <<ոչինչ չի երևում>>, աջակցությունը փչացնում է, դեբեկտը 'ձեռքերը։

Արմատն այն է, որ դիտարկումը չի ներառվել, սինթետիկ չկա, ավազը «բառերով» է։

Ինչպես ճիշտ

RED/USE-metrics: rate/error/latency յուրաքանչյուր endpoint, երթուղիներով/։

Հարաբերակցությունը '«trace _ id» բոլոր լոգարաններում և պատասխաններում։ ww.ebhuk հարցումը։
  • Սինթետիկ 'health-թեստեր (login/deposit-երգ), SLA-24T + 60 webhuks համար։
  • Ավազը/սթեյջը 'ամբողջովին մեկուսացված բանալիներ/ֆորումներ, ֆիկտիվ PSA, ձայնագրությունները «չեն ընկնում զեկույցներում»։

Պատասխանը trace-բաղադրիչի հետ

http
HTTP/1. 1 202 Accepted
Trace-Id: 7f2b3d8e9c1a4
Location: /v1/ops/req_42/status

Չեկ-թերթ

  • Metriki RED/USE, dashbords, alerts (ախտանիշներ + պատճառները)։
  • end-to-end treiss; JSON լոգները, առանց PII, «trace _ id»։
  • Սինթեզիկան հիմնական տարածաշրջաններից. ավազը պարտադիր է, բանալիները տարբեր են։

Prelaunch պլանը (T-7 no T-0)

T-7 օր

Վերջնական պայմանագիրը սկանը 'արդյոք անհամատեղելի փոփոխություններ չկան։ freeze սխեմաներ։
  • Գաղտնիքները/հավաստագրերը 'համապատասխան ռոտացիա, հասանելի, KHL քաղաքականություն։
  • Սինթետիկ 24-7, ալերտները կապված են on-call-ի հետ։

T-3 օր

Բեռի մինի-պրոգոնը (burst 2-5 րոպե) 'r95/pula/հերթեր կանաչ գոտում։

DRY-RUN Webhukov (կրկնություններ, 5xx, ջիտթեր), DLQ ստուգում։

Գործընկերների «Հեռախոսների գիրքը» ՝ L1/L2 կապ, war-room ջրանցք։

T-0:
  • Կանարեցող 355 տոկոսը 25 տոկոսն էր SLO գեյշների 50 տոկոսը։ պատրաստ է rollback.
  • Ներառված են kill-switch/feature-flags ռիսկային ֆիգուրների վրա։
  • War-room-ը ակտիվ է, կոդավորման ձևանմուշների կարգավիճակը։

Rollbek պլանը (եթե ինչ-որ բան սխալ էր)

1. Հեռացնել մուտքը նախորդ կայուն տարբերակով/երթուղով։

2. Անջատել ֆիչեֆլագը հակասական փոփոխությունները։

3. Կայունացնել հերթերը/փամփուշտները, կանգնեցնել հոսանքները փոթորկի ժամանակ։

4. Փոստի դեպքը 'հավաքել թայմլինը, արմատները, առաջադրանքները (ֆիքս ֆորվարդը/պայմանագրի ֆիքսները)։


Ինքնաքննություն սկսելու համար (կարճ)

ԲլոկըՀարցըԱյո/Ոչ
IdempotentyԲոլոր «ստեղծող» մեթոդները ունեն Idempotency-Key/« operation _ id »և uniq ինդեքսը։
Retrai/Time-utaԹայմ-աուտները SLO-ից կարճ են։ trai 242; ջիթերը միացված է։
ԱնվտանգությունWebhuki-ը ստորագրվել է, պատուհանը 10 րոպե, KHL-ի գաղտնիքները։
ՊայմանագրերOpenAPI/AsyncAPI-ը գրված է, CI-ն անհամատեղելի է։
ԴիտարկումըRED/USE, treiss, սինթետիկ T + 60, ավազը մեկուսացված է։
ՌոլբեքըԿա վերափոխման կոճակ/kill-switch, հաղորդակցության պլան։

Հաճախ տրվող «և ինչպես լինել, եթե...»

... պրովայդերը չի աջակցում Idempotency-Key-ին։
  • Պահեք «hash (body)» + «partner _ request _ id» և ներկայացրեք ձեր կուռքերը։
... webhuks երբեմն գալիս են «նախկինում» պատասխանը։
  • Փակեք «operation _ id» և ժամանակավորապես պահեք «unknown medreconcile» կարգավիճակը։ պարբերական reconciler-ը կփակի տարբերությունները։
... պետք է աջակցել հին հաճախորդներին և նորերին։
  • Տարբերեք endpoint 's («/v1 »և «/v2»), ուղարկեք վերնագիր/URI, պահեք առնվազն N ամիս backward համատեղելիությունը։

Ռեզյումե

Ինտեգրման ձախողումները գրեթե միշտ էլ նույն բանն են. Ոչ մի գաղափարախոսություն, սխալ թայմ-աուտներ և ռետրան, վեբհուկի թույլ ստորագրությունը, դրաֆը և տեսանելիության բացակայությունը։ Նախօրոք տեղադրեք պայմանագրերը, միացրեք դիտարկումը, տեղադրեք սահմանաչափեր/բեքսպրեսթեր, ստորագրեք բոլոր արտաքին փոխազդեցությունները և սինթեզիկան։ Նույնիսկ երբ ձեր գործընկերները ձախողվում են, ձեր թողարկումը կմնա կառավարվող 'առանց այն փողի, որ կորցրել են գետերում, և առանց գիշերվա ամբողջ թիմում։

× Որոնում խաղերի մեջ
Մուտքագրեք առնվազն 3 նիշ՝ որոնումը սկսելու համար։