GH GambleHub

Teskari moslik

Teskari muvofiqlik nima

Backward compatibility - bu tizim yangilanayotganda eski mijozlar/iste’molchilarni qabul qilish va ularga to’g’ri ishlov berish xususiyatidir. Sodda: siz xizmatning yangi versiyasini chiqaryapsiz va mavjud integratsiyalar o’zgarishsiz ishlamoqda.

Kalit: kelishuvlarni buzmaslik. Har qanday evolyutsiya - qo’shish orqali, ishlab chiqarilgan narsalarni qayta tuzish orqali emas.

Bazaviy prinsiplar

1. Additive-first

Yangi maydonlar/usullar/hodisalar ixtiyoriy ravishda qoʻshiladi. Mavjud boʻlgan hech narsa olib tashlanmaydi va maʼnosini oʻzgartirmaydi.

2. Minimal kafolat kontrakti (MGC)

Skript mazmunini yoʻqotadigan maydon/amallar toʻplamini aniqlang. Yadro barqaror. Qolganlari - kengayishlar.

3. Tolerant reader

Mijozlar nomaʼlum maydonlarga eʼtibor bermaydi va yangi enum (fallback) qiymatlarini toʻgʻri qayta ishlaydi.

4. Versiyalar siyosati

Buzuvchi oʻzgarishlar - faqat major liniyasi orqali (’/v2’,’payments. v2`, `event. v2`). Minorlar - qo’shimcha.

5. Kuzatilganlik - kontraktning bir qismi

Loglar/treyslar va metriklarda mijozning versiyasi, formati, capability bayroqlari ko’rinadi. Bu migratsiyani boshqarish imkonini beradi.

Xavfsiz va xavfli o’zgarishlar

Odatda xavfsiz (BC-OK)

Ixtiyoriy maydonlarni qoʻshish (JSON/Euro/Protobuf’optional ’/’ nullable’).
Yangi endpoint/metod/hodisalarni qoʻshish.
Enumni qoʻshimcha qiymatlar bilan kengaytirish (agar tolerant reader boʻlsa).
Validatsiyani zaiflashtirish (maksimumlarni oshirish, muqobil formatlarni qo’shish).
Maʼnoga taʼsir qilmaydigan sarlavhalar/meta maʼlumotlar qoʻshish.

Xavfli (Breaking)

Maydonlarni olib tashlash/qayta nomlash, mavjud maydonlarning turini yoki majburiyligini oʻzgartirish.
Status/xato kodlari semantikasini oʻzgartirish.
Protobuf-teglardan boshqa maydonlar uchun qayta foydalanish.
Voqeani partiyalash kalitini o’zgartirish (agregat uchun tartibni buzadi).
SLA/taymautlarni kuchaytirish, bu esa eski mijozlarning pasayishiga olib keladi.

Oʻzaro aloqa uslublari boʻyicha

REST/HTTP + JSON

Qoʻshimcha: Yangi maydonlar’optional’, server ularni eski mijozlardan talab qilmaydi.
Versiyalar: major - yo’lda (’/v2’) yoki mediatipda; minor -’? include = ’/’? fields =’kengaytmalari orqali.
Xatolar: yagona format; major’siz kodlarni/semantikani o’zgartirmaslik.
ETag/If-Match: poygasiz xavfsiz yangilanishlar uchun.
Idempotentlik: POST uchun’Idempotency-Key’- eski mijozlar retrajlarda effektni ikki baravar oshirmaydi.

gRPC / Protobuf

Teglar oʻzgarmaydi. Olib tashlangan teglar qayta ishlatilmaydi.
Yangi maydonlar -’optional ’/’ repeated’; andoza qiymatlar eski kod bilan toʻgʻri ishlanadi.
Striming: minor doirasidagi xabarlarning tartibi/majburiyligini oʻzgartirmang.
Xatolar - statuslarning barqaror to’plami; yangi semantika → yangi usul/xizmat (’.v2’).

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

Nomlanishi:’domain. action. v{major}`.
Core vs Enriched: yadro barqaror; boyitish - alohida turlar/mavzular (’.enriched’).
Sxemalarning moslashuv rejimi: koʻproq BACKWARD; CI mos kelmaydigan oʻzgarishlarni bloklaydi.
Partiyalashtirish: kalit (masalan,’payment _ id’) - kontraktning bir qismi; uni o’zgartirish - breaking.

GraphQL

Maydonlarni/turlarni qo’shish - OK; olib tashlash/qayta nomlash -’@deprecated’va migratsiya oynasi orqali.
Majorsiz «nullable → non-nullable» ni oshirmang.
complexity/depth - limitlarni oʻzgartirish = shartnomani oʻzgartirish.

BC saqlashga yordam beradigan patternlar

Teskari piramida modeli: yadrosini barqarorlashtiring, ixtiyoriy ravishda kengaytiring.
Capability negotiation: mijoz qoʻllab-quvvatlanadigan imkoniyatlar (’X-Capabilities ’/handshake) haqida xabar beradi, server moslashmoqda.
Dual-run/dual-emit: migratsiya paytida bir vaqtning o’zida’v1’va’v2’ni saqlang.
Adapterlar: proksi/geytvey «ogʻir» mijozlar uchun soʻrovlarni tarjima qiladi.
Expand-and-contract (DB uchun): avval yangisini qoʻshing, yozishni/oʻqishni boshlang, shundan keyingina eskisini oʻchiring.

Governance va jarayon

1. Kontraktlar katalogi (sxemalar reyestri): muvofiqlik siyosatchilari bilan yagona haqiqat manbai.
2. CI/CDdagi linterlar va diff-cheklar: OpenAPI-diff, Buf-breaking, Euro/JSON Schema mosligini tekshirish.
3. CDC/Consumer-Driven Contracts: provayder isteʼmolchilarning haqiqiy shartnomalari uchun tekshiriladi.
4. Golden samples: regress uchun maʼlumot soʻrovlari/javoblar/hodisalar.
5. Change management: RFC/ADR breaking, sunset rejalari, kommunikatsiya.

Deprekeyt va eski versiyalarni olib tashlash

Eskirgan (’@deprecated’, tavsiflar,’Deprecation’,’Sunset’sarlavhalari).
Migratsiya oynasi: oldindan eʼlon qilingan sana, test stendi, kod namunalari.
Foydalanish telemetriyasi: yana kim’v1’da? versiya bo’yicha metrik/loglarni segmentlang.
Dual-run nolgacha trafikni o’chirish.

Kuzatuvchanlik va operatsion metriklar

Versiyalar boʻyicha soʻrovlar/xabarlar foizi.
Relizdan keyin eski mijozlarda xato/taymaut ulushi.
Mos kelmaydigan payload ulushi (shlyuzda/oqim-filtrlarda sxema bo’yicha validatsiya).
Isteʼmolchilar migratsiyasi lagi (yana qancha’v1’eshitiladi).

Teskari moslikni sinash

Schema-diff: fail при remove/rename/type-change.
Shartnoma-testlar: Eski SDK/mijozlar yangi sotuvga qarshi kurashmoqda.
E2E-kanareyka: eski trafikning yangi versiyasiga bir qismi, p95/p99, kodlar, retraylarni taqqoslash.
Voqealar nusxasi: proyeksiyalar eski logdan hech qanday tafovutsiz yangi mantiq bilan yig’iladi.
Fault-injection: kechikishlar/qisman javoblar - eski mijozlar tushmaydi.

Namunalar

REST (qoʻshimcha)

Mavjud:
json
{ "id": "p1", "status": "authorized" }
Shunday bo’ldi:
json
{ "id": "p1", "status": "authorized", "risk_score": 0. 12 }

Eski mijozlar «risk _ score» ga eʼtibor bermay, ishlashda davom etadilar.

Protobuf (teglar)

proto message Payment {
string id = 1;
string status = 2;
optional double risk_score = 3 ;//new field, safe
}
//Tags 1 and 2 cannot be changed/deleted without v2

Voqealar (yadro + boyitish)

`payment. authorized. v1’- yadro (minimal faktlar).
`payment. enriched. v1’- detallar; yadro iste’molchilari boyitishga bog’liq emas.

Antipatternlar

Swagger-wash: sxemani yangiladik, lekin xizmat eski uslubda (yoki aksincha).
Yashirin boʻshliqlar: dala/maqom maʼnosini versiyasiz oʻzgartirdi.
Protobuf-teglardan qayta foydalanish: ma’lumotlarning «sokin» korrupsiyasi.
Qattiq mijozlar: notanish maydonlarga tushadi/enum; tolerant reader yoʻq.
Mega-endpoint: bitta-bitta - har qanday o’zgarish potentsial sinishga aylanadi.

Chiqarish oldidan chek varaqasi

  • O’zgarishlar qo’shimcha; yadro (MGC) tegmagan.
  • Linterlar/diff-cheklar o’tdi; breaking bayroqlari yoʻq.
  • Mijoz SDKlari yangilandi (yoki qoʻshimcha kengaytirish uchun talab qilinmaydi).
  • Mijozlarda tolerant reader yoqilgan; enum-fallback tekshirildi.
  • Metrika/loglarda versiya va capability bayroqlari mavjud.
  • Potentsial sinish uchun ’/v2’, dual-run va sunset rejasi mavjud.
  • Hujjatlar/misollar yangilandi, golden toʻplamlar mavjud.

FAQ

Backward vs forward - qanday farq bor?
Backward - yangi serverlar eski mijozlar bilan ishlaydi. Forward - yangi mijozlar eski serverlar bilan to’g’ri ishlaydi (tolerant reader va ehtiyotkorlik bilan defoltlar hisobiga). To’liq doira - full compatibility.

Katta oʻzgarishlar uchun har doim ’/v2’qilish kerakmi?
Agar invariantlar/turlar/kalitlar/semantika buzilsa. Aks holda, chiziqni saqlang va qo’shimcha ravishda evolyutsiya qiling.

Enum haqida nima deyish mumkin?
Eskisini oʻzgartirmasdan yangi qiymatlar qoʻshing. Mijozlar nomaʼlum qiymatda fallback boʻlishi kerak.

«Singan» boʻlsa - chi?
Orqaga qaytish, hot-fix adapteri,’v2’s dual-run, kommunikatsiya va migratsiya gaydasi.

Jami

Teskari muvofiqlik - evolyutsiya intizomi: yadrosini barqarorlashtiring, qo’shimchani kengaytiring, tolerant readerni joriy qiling, tekshiruvlarni avtomatlashtiring va ongli ravishda deprekeyt qiling. Shunday qilib, siz mijozlaringizni «ko’rinmas» o’zgarishlar ostida qoldirmasdan platformani tez rivojlantira olasiz.

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.