GH GambleHub

Toʻgʻridan-toʻgʻri mos kelish

To’g «ridan-to’g» ri muvofiqlik nima

To’g’ridan-to’g’ri muvofiqlik (forward compatibility) - bu tizimning avvaliga mo’ljallanganidan ko’ra ko’proq yangi mijozlar yoki ma’lumotlar bilan to’g’ri ishlash qobiliyatidir. Oddiy: yangi mijoz kelganda eski server buzilmaydi; yangi xabarga duch kelganda eski isteʼmolchi tushmaydi.

Yangi tizim eski mijozlarni qo’llab-quvvatlaganda, forward javobgarlik yo’nalishi bilan ajralib turadi: biz protokollar va mijozlarni kelajakdagi kengayishlardan butun ekotizimni to’liq yangilamasdan «omon qolish» uchun loyihalashtiramiz.

Bazaviy prinsiplar

1. Tolerant reader & tolerant writer

Reader noma’lum maydonlarni/sarlavhalarni e’tiborsiz qoldiradi va to’g’ri fallback bilan yangi enum qiymatlariga ruxsat beradi.
Writer server qoʻllab-quvvatlanadigan (capabilities) deb eʼlon qilmagan hech narsani joʻnatmaydi.

2. Capability negotiation

Handshake bosqichida aniq imkoniyatlar almashinuvi (fich/versiya/media turlari). Mijoz oʻz xatti-harakatlarini server javobiga moslaydi.

3. Defolt degradatsiyasi

Yangi imkoniyatlar ixtiyoriy hisoblanadi: agar server/konsumer ularni qoʻllab-quvvatlamasa, stsenariy baribir foydali minimum (MGC) bilan yakunlanadi.

4. Barqaror yadro (MGC)

Eng kam kafolat kontrakti o’zgarmaydi; yangiliklar kengayish sifatida yashaydi.

5. Xato shartnomalari protokolning bir qismi sifatida

Oldindan aytib bo’ladigan kodlar/sabablar («fich qo’llab-quvvatlanmaydi», «media turi noma’lum») mijozga qo’llab-quvvatlanadigan rejimga avtomatik ravishda qaytish imkonini beradi.

6. Kutilmagan versiyalar

Major chiziqlar ajratilgan; minor kengaytmalar server/konsumerni yangilashni talab qilmaydi.

Bu ayniqsa muhim bo’lgan joyda

Uzoq muddatli integratsiyalashuvga ega ommaviy API (hamkorlar, mobil ilovalardagi SDK).
Ko’plab mustaqil konsumerlarga ega voqea platformalari.
Orqa tomonga qaraganda sekinroq yangilanadigan mobil mijozlar.
Edj/IoT, bu yerda qurilmalar parkining bir qismi kamdan-kam tikiladi.

Uslublar bo’yicha sotish patternlari

REST/HTTP

Negotiation:
  • ’Accept ’/moslamali mediatiplar (’ application/vnd. example. order+json; v=1; profile=risk`).
  • ’Prefer: include =...’ ixtiyoriy bloklar uchun.
  • Sarlavha’X-Capabilities: risk_score,item_details_v2'.
Mijozning xatti-harakati:
  • Asosiy formatdagi soʻrovni yuboradi, agar server capability (OPTIONS/desc/lid-endpoint orqali) ni tasdiqlasa, kengaytiradi.
  • ’415/406/501’ qoʻllaniladigan formatga/usulga avtomatik ravishda qaytadi.
  • Serverning javobi: nomaʼlum parametrlar - eʼtiborsiz qoldirish; ortiqcha maydonlarga yo’l qo’yiladi; xato formati barqaror (’type/code/detail/trace _ id’).

gRPC / Protobuf

Barqaror servislar: yangi usullar/maydonlar - qo’shimcha; eski server xotirjam ravishda noma’lum so’rov maydonlarini e’tiborsiz qoldiradi.
Feature discovery:’GetCapabilities ()’usuli fich/limitlar roʻyxatini qaytaradi. Agar server uni eʼlon qilmasa, mijoz «v2-usul» ni chaqirmaydi.
Striming: xabarlarni minimal toʻplash tartibini belgilang; Yangi «ramkalar» ni eski mijoz e’tiborsiz qoldiradigan kengaytmalar/turlar bilan belgilang.

GraphQL

Forward-friendly: serverda yangi maydonlar/turlar paydo bo’ladi - eski mijozlar ularni so’ramaydi.
Taxmin qilish taqiqlangan: mijoz sxemani (introspektsiya/kodogen) ushlab turishi va noma’lum direktivalarni/o’zgaruvchilarni yubormasligi kerak.
Tanazzul: agar server kastom direktivasini/feature bilmasa, mijoz soʻrovni usiz tuzadi.

Event-driven (Kafka/NATS/Pulsar, Avro/JSON/Proto)

Ro’yxatdagi sxemaning FORWARD mosligi: eski konsumerlar yangi sxema bilan yozilgan xabarlarni o’qishlari mumkin.
Qo’shimchalar va defoltlar: yangi prodyuserlar eski konsumerlarni buzmaydi.
Core vs Enriched: yadro o’zgarishsiz qolmoqda, yangi ma’lumotlar’.enriched’yoki’opsion’sifatida e’lon qilinadi.

Loyihalash amaliyoti

1. Eng kam so’rov shartnomasi (MGC)

Operatsiya barcha serverlar ko’p yillar davomida qo’llab-quvvatlaydigan «tor bo’yin» ga ega bo’lishi kerak.

2. Kontrakt darajasidagi fich-bayroqlar

«risk _ score», «pricing _ v2», «strong _ idempotency» kabi imkoniyatlarni tavsiflang. Mijoz ularni aniq o’z ichiga oladi.

3. «Qoʻllab-quvvatlanmaydi» uchun aniq xato kodlari

HTTP: `501 Not Implemented`, `415 Unsupported Media Type`, детальные `problem+json`.
gRPC: `UNIMPLEMENTED`/`FAILED_PRECONDITION`.
Events: DLQ yo’nalishi s’reason = unsupported _ feature’.

4. Tartibga/toʻliq roʻyxatlarga tayanmaslik

Mijoz yangi enum qiymatlariga, yangi maydonlarning yoʻqligiga va «qoʻshimcha» xususiyatlarga tayyor boʻlishi kerak.

5. Barqaror identifikatorlar va formatlar

Liniya ichidagi partizanlashtirish ID/kalitlari formatini oʻzgartirmang - bu oʻquvchilar tomonidagi forwardni buzadi.

6. «Mashinada o’qiladigan» hujjatlar

OpenAPI/AsyncAPI/Proto descriptors/GraphQL SDL. Mijozlar qo’llab-quvvatlashni tekshirishlari mumkin.

Forward mosligini sinash

Schema-diff FORWARD/FULL rejimida: yangi sxema eski isteʼmolchini/serverni tasdiqlaydi.
Mijozning shartnomaviy testlari: yangi mijoz eski serverga qarshi bajariladi.
Golden requests: «yangi» soʻrovlar toʻplami «eski» server orqali haydaladi; tanqidiy xatolarsiz tanazzulga uchrashi kutilmoqda.
Chaos/latency: taymaut/retraylarni tekshirish - yangi mijoz eski serverning eng yomon SLAsidan toʻgʻri omon qolishi kerak.
Canary: yangi mijozlarning bir qismi oldingi server versiyasi bilan ishlaydi - xatolar/degradatsiyalar telemetriyasini yig’ish.

Kuzatuvchanlik va operatsion metriklar

Qo’llab-quvvatlanmaydigan so’rovlar/xabarlar ulushi.
Mijozlar versiyalari bo’yicha taqsimlash (User-Agent/meta ma’lumotlar/claims).
’UNIMPLEMENTED/501/415’ xatolari va’unsupported _ feature’bilan DLQ yo’nalishlari.
Tanazzul vaqti: MGC uchun p95/p99 «kengaytirilgan» javobga qarshi.

Sxemalar reyestridagi moslik rejimlari

FORWARD: Yangi yozuv eski o’quvchiga mos keladi (defoltlar, ixtiyoriylik kerak).
FULL: и FORWARD, и BACKWARD; ochiq shartnomalar uchun qulay.
Tavsiya: voqealar uchun - prodyuserda BACKWARD va konsumerda FORWARD (tolerant reader orqali), tashqi API uchun - FULL.

Namunalar

REST (capabilities + degradatsiya)

1. Mijoz’GET/meta/capabilities’→’{"risk_score": false,’price_v2": true}’ni yaratadi.
2. ’POST/orders’ ga asosiy maydonlarni yuboradi;’risk _ score’soʻramaydi, chunki server buni bilmaydi.
3. Agar’Prefer: include = risk _ score’tasodifan yuborilsa, server’risk _ score’(yoki’Preference-Applied: none’) maydonisiz 200 javob beradi - mijoz tushmaydi.

gRPC (discovery)

’GetCapabilities ()’ usullar roʻyxatini qaytardi. Mijoz’CaptureV2’ga qoʻngʻiroq qilmaydi, agar u mavjud boʻlmasa, uning oʻrniga’Capture’dan foydalanadi va kirish maʼlumotlarini qoʻllab-quvvatlanadigan koʻrinishga aylantiradi.

Events (reyestrdagi FORWARD)

Prodyuser’risk _ score’(nullable bilan defolt) maydonini qoʻshdi. Eski konsumer uni e’tiborsiz qoldiradi; uning mantig’i faqat yadroning barqaror maydonlaridan foydalanadi.

Antipatternlar

Qattiq mijoz: javobni whitelist maydonlariga filtrlaydi va notanish xususiyatga tushadi.
Notoʻgʻri fichlar: mijoz capabilities tekshirmasdan yangi parametrni joʻnatishni boshlaydi.
Eski serverlar/konsumerlar yangi soʻrovlar/xabarlarni tushunmay qolmoqda.
Enum (default boʻlmagan switch) toʻliq roʻyxati haqida tikilgan taxminlar.
Logotip oqim nazorati sifatida: shartnoma kodlari oʻrniga xato satrlarini parsing.

Joriy etish chek-varaqasi

  • MGC tomonidan aniqlangan; yangi imkoniyatlar opsion sifatida belgilangan.
  • Capability negotiation (endpoint/meta maʼlumotlar/handshake) tasvirlangan va amalga oshirilgan.
  • Mijozlar notanish maydonlarga e’tibor bermaydi va yangi enum (fallback) ni to’g’ri qayta ishlaydi.
  • Xato shartnomalari oldindan aytib bo’lmaydigan tarzda «qo’llab-quvvatlanmaydi» (HTTP/gRPC/Event).
  • Sxemalar reyestri tegishli artefaktlar uchun FORWARD/FULL sozlangan.
  • Avtostestlar: schema-diff (FORWARD), mijozning eski serverga qarshi shartnomaviy testlari, canary.
  • Metrika: mijozning versiyasi, nuqsoni, tanazzullar ulushi, p95 MGC.
  • Hujjatlar/SDK fich ro’yxati va degradatsiya misollarini e’lon qiladi.

FAQ

Forward amalda backwarddan qanday farq qiladi?
Backward: yangi server eski mijozlarni buzmaydi. Forward: eski server yangi mijozlardan (yoki eski konsumer - yangi xabarlardan) uzilmaydi. Ideal holda siz full ga erishasiz.

Har doim capabilities kiritish kerakmi?
Agar siz faol evolyutsiyani sinxron relizlarsiz kutayotgan bo’lsangiz, ha. Bu o’nlab major-liniyalarni saqlashdan arzonroq.

Xavfsizlik haqida nima deyish mumkin?
Yangi fichlar alohida scopes/claims talab qilishi kerak. Agar server ularni qoʻllab-quvvatlamasa, mijoz xavfsizlikni pasaytirmasligi kerak, balki fichidan voz kechishi kerak.

Server yordamini «taxmin qilish» mumkinmi?
Nomaqbul. Aniq so’rash (capabilities) yoki media/sxemaga qarash yaxshiroqdir.

Jami

To’g’ridan-to’g’ri muvofiqlik - bu imkoniyatlar to’g’risida kelishib olish va xavfsiz ravishda tanazzulga uchrashdir. Barqaror yadro, capability negotiation, qo’shimcha kengaytmalar va oldindan aytib bo’ladigan xatolar yangi mijozlar va ma’lumotlar bilan eski serverlar va iste’molchilar bilan - ommaviy relizlar va tungi migratsiyalarsiz muloqot qilish imkonini beradi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.