Түздөн-түз шайкештиги
Түздөн-түз шайкештик деген эмне
Түздөн-түз шайкештик (forward compatibility) - бул системанын жаңы кардарлар же маалыматтар менен адегенде иштелип чыккандарга караганда туура иштөө жөндөмдүүлүгү. Жөнөкөй: эски сервер ага жаңы кардар келгенде сынбайт; эски керектөөчү жаңы билдирүү менен жолугушканда жыгылбайт.
Кайра шайкештиктен (жаңы система эски кардарларды колдогондо) forward жоопкерчиликтин багыты менен айырмаланат: биз протоколдорду жана кардарларды бүтүндөй экосистеманын жалпы жаңылоосуз келечектеги кеңейтүүлөрдөн "аман" калуу үчүн долбоорлоп жатабыз.
Негизги принциптер
1. Tolerant reader & tolerant writer
Reader белгисиз талааларды/аталыштарды четке кагат жана туура fallback менен жаңы enum-баалуулуктарды берет.
Writer Server так колдоо катары жарыяланган эмес, эч нерсе жөнөтпөйт (capabilities).
2. Capability negotiation
Ачык мүмкүнчүлүктөрдү алмашуу (чүчүкулак/версиялар/медиа түрлөрү) handshake баскычында. Кардар өзүнүн жүрүм-турумун сервердин жообуна ылайыкташтырат.
3. Дефолттук деградация
Жаңы мүмкүнчүлүктөр кошумча болуп эсептелет: эгерде сервер/консультант аларды колдобосо, сценарий дагы эле пайдалуу минимум (MGC) менен аяктайт.
4. Туруктуу ядро (MGC)
Минималдуу кепилдик келишими өзгөрбөйт; инновациялар кеңейүү катары жашайт.
5. Ката келишимдери протоколдун бир бөлүгү катары
Болжолдуу коддор/себептер ("фича колдоого алынбайт", "медиа түрү белгисиз") кардарга автоматтык түрдө колдоого алынган режимге кайтып келүүгө мүмкүндүк берет.
6. Күтүлбөгөн версиялар
Мажор сызыктар бөлүнгөн; минор узартуу Server/Consumer өзгөртүү талап кылбайт.
Бул өзгөчө маанилүү жерде
Узак мөөнөттүү интеграциялар менен коомдук API (өнөктөштөр, мобилдик тиркемелерде SDK).
Көптөгөн көз карандысыз консультанттар менен окуя платформалары.
Арткы караганда жай жаңыланган мобилдик кардарлар.
Edge/IoT, бул жерде аппараттар паркынын бир бөлүгү сейрек тиркелет.
Стили боюнча ишке ашыруу үлгүлөрү
REST/HTTP
Negotiation:- параметрлери ('application/vnd. example. order+json; v=1; profile=risk`).
- 'Prefer: include =...' кошумча блоктор үчүн.
- Аталышы 'X-Capabilities: risk_score,item_details_v2'.
- Негизги түрдө суроо-талапты жөнөтөт, кеңейтүүлөр - сервер capability (OPTIONS/desc/lid-end point аркылуу) тастыктаса гана.
- Качан '415/406/501' автоматтык түрдө колдоого алынган форматка/ыкмага түшөт.
- Server жооп: белгисиз параметрлери - четке кагуу; кошумча талаалар - жол берилет; ката формат туруктуу ('type/code/detail/trace _ id').
gRPC / Protobuf
Туруктуу кызматтар: жаңы ыкмалар/талаалар - кошумча; эски сервер тынч суроо белгисиз талааларды четке кагат.
Feature discovery: 'GetCapabilities ()' ыкмасы fich/лимит тизмелерин кайтарат. Кардар сервер аны жарыялабаса, "v2 ыкмасын" чакырбайт.
Стриминг: билдирүүлөрдүн минималдуу топтомунун тартибин бекитүү; жаңы "жээкчелер" эски кардар четке узартуу/түрлөрү менен белгиленет.
GraphQL
Forward-friendly: жаңы талаалар/түрлөрү серверде пайда болот - эски кардарлар аларды жөн гана сурабайт.
Болжолдоолорго тыюу салынат: кардар схеманы (интроспекция/кодоген) кармап турууга жана белгисиз директиваларды/өзгөрмөлөрдү жөнөтпөөгө тийиш.
Деградация: эгерде сервер атайын директиваны/feature билбесе - кардар ансыз суроо-талапты курат.
Event-driven (Kafka/NATS/Pulsar, Avro/JSON/Proto)
FORWARD-шайкештиги схемасы реестринде: эски Консумерлер жаңы схемасы менен жазылган билдирүүлөрдү окуй алышат.
Дефолттор менен кошумча талаалар: жаңы продюсерлер эски консумерлерди бузушпайт.
Core vs Enriched: ядро ошол бойдон калууда, жаңы маалыматтар '.enriched' же кошумча талаалар катары жарыяланат.
Дизайн практикасы
1. Минималдуу өтүнүч келишими (MGC)
Операциянын "кууш моюну" болушу керек, аны бардык серверлер көп жылдар бою колдойт.
2. Контракт деңгээлиндеги фича-желектер
Фичтерди аталган мүмкүнчүлүктөр катары сүрөттөңүз: 'risk _ score', 'pricing _ v2', 'strong _ idempotency'. Кардар аларды ачык камтыйт.
3. "Колдоого алынбайт" үчүн ачык ката коддору
HTTP: `501 Not Implemented`, `415 Unsupported Media Type`, детальные `problem+json`.
gRPC: `UNIMPLEMENTED`/`FAILED_PRECONDITION`.
Events: 'reason = unsupported _ feature' менен DLQ маршруту.
4. Тартипке таянбаңыз/Толук тизмелер
Кардар жаңы enum баалуулуктарына, жаңы талаалардын жоктугуна жана "кошумча" касиеттерге даяр болушу керек.
5. Туруктуу идентификаторлор жана форматтар
Линиянын ичинде ID/партиялаштыруу ачкычтарынын форматын өзгөртпөңүз - бул окурмандар тарапта чабуулду бузат.
6. "Машинада окула турган" документтер
Hosting descriptors: OpenAPI/AsyncAPI/Proto descriptors/GraphQL SDL. Кардарлар fich колдоо салыштырууга болот.
Forward шайкештик сыноо
Schema-diff FORWARD/FULL режиминде: жаңы схема эски керектөөчүнү/серверди тастыктайт.
Кардардын келишимдик сыноолору: жаңы кардар эски серверге каршы аткарылат.
Golden requests: "жаңы" суроолор топтому "эски" Server аркылуу кууп; маанилүү каталары жок деградация күтүлөт.
Chaos/latency: убакыт/retraut текшерүү - жаңы кардар туура эски Server жаман SLA аман керек.
Canary: жаңы кардарлардын бир бөлүгү мурунку сервердик версия менен иштейт - ката/деградация телеметриясын чогултуу.
Байкоо жана иш көрсөткүчтөр
Колдоо көрсөтүлбөгөн жана алардын автоматтык кайтарымдары бар суроо-талаптардын/билдирүүлөрдүн үлүшү.
Кардарлардын версиялары боюнча бөлүштүрүү (User-Agent/метадеректер/claims).
каталар 'UNIMPLEMENTED/501/415' жана жолдор менен DLQ 'unsupported _ feature'.
Деградация убактысы: MGC үчүн p95/p99 каршы "кеңейтилген" жооп.
Схемалар реестриндеги шайкештик режимдери
FORWARD: жаңы жазуу эски окурман менен шайкеш келет (дефолттор, параметрлер керек).
FULL: и FORWARD, и BACKWARD; ачык келишимдер үчүн ыңгайлуу.
Сунуш: иш-чаралар үчүн - BACKWARD продюсер жана FORWARD (толеранттуу reader аркылуу), тышкы API үчүн - FULL.
Мисалдар
REST (capabilities + деградация)
1. кардар кылат 'GET/meta/capabilities '→ '{"risk_score": false, "price_v2": true}'.
2. 'POST/orders' негизги талааларды жөнөтөт; 'risk _ score' талап кылбайт, анткени сервер аны билбейт.
3. кокусунан жиберген болсо 'Prefer: include = risk _ score', Server жооп берет 200 талаасыз 'risk _ score' (же 'Preference-Applied: none') - кардар түшпөйт.
gRPC (discovery)
'GetCapabilities ()' ыкмалары/fich тизмесин кайтарып берди. Эгерде кардар жок болсо, 'CaptureV2' чакырбайт - анын ордуна 'Capture' колдонгон жана жергиликтүү түрдө кирүү маалыматтарын колдоого алынган түргө айландырат.
Events (FORWARD реестринде)
Продюсер 'risk _ score' талаасын (дефолт менен nullable) кошту. Эски consumer аны четке кагат; анын логикасы ядронун туруктуу талааларын гана колдонот.
Антипаттерндер
Катуу кардар: whitelist-талаалар боюнча жооп чыпкалап жана бейтааныш касиети боюнча түшөт.
Бүдөмүк ийгиликтер: кардар capabilities текшерүү жок жаңы параметр жөнөтө баштайт.
Линиянын ичинде ID/ачкыч форматтарын өзгөртүү → эски серверлер/консультанттар жаңы суроо-талаптарды/билдирүүлөрдү түшүнбөй калышат.
Толук enum тизмеси жөнүндө тигилген божомолдор (default жок switch).
Loging агымын башкаруу катары: ордуна контракт коддору ката жолдорун парсинг.
Киргизүү чек-тизмеси
- MGC тарабынан аныкталган; жаңы мүмкүнчүлүктөр кошумча катары белгиленет.
- сүрөттөлгөн жана capability negotiation (end-point/metadata/handshake) ишке ашырылган.
- Кардарлар бейтааныш талааларды четке кагып, жаңы enum (fallback) туура иштетет.
- Ката келишимдери алдын ала "колдоого алынбайт" (HTTP/gRPC/Event).
- Схемалар реестри тиешелүү экспонаттар үчүн FORWARD/FULL орнотулган.
- Automatests: schema-diff (FORWARD), эски серверге каршы кардардын контракттык тесттер, canary.
- Metrics: кардар нускасы, ийгиликсиз fich, бузулган үлүшү, p95 MGC.
- Документация/SDK сынактын тизмесин жана деградация мисалдарын жарыялайт.
FAQ
Иш жүзүндө forward backward айырмаланат?
Backward: жаңы сервер эски кардарларды сындырбайт. Forward: Эски Server жаңы кардарлар менен бузулган эмес (же эски consumer - жаңы билдирүүлөр). Идеалында, сиз толук жетет.
Дайыма capabilities киргизүү керекпи?
Эгерде сиз синхрондук релиздерсиз активдүү эволюцияны күтсөңүз - ооба. Бул негизги-линияларын ондогон кармап арзан болуп саналат.
Коопсуздук жөнүндө эмне айтууга болот?
Жаңы чыпкалар жеке scopes/claims талап кылышы керек. Эгерде сервер аларды колдобосо - кардар коопсуздукту азайтпашы керек, бирок фичтен баш тартышы керек.
Сервердин версиясы боюнча колдоону "болжолдоого" болобу?
Бул жагымсыз. Ал ачык (capabilities) сурап же медиатип/схемасын карап жакшы.
Жыйынтык
Түздөн-түз шайкештик - бул жөндөмдүүлүктөр жөнүндө сүйлөшүүлөрдү жүргүзүү жана коопсуз деградация. Туруктуу ядро, capability negotiation, кошумча кеңейтүү жана алдын ала каталар жаңы кардарларга жана маалыматтарга эски серверлер жана керектөөчүлөр менен тил табышууга мүмкүндүк берет - массалык релиздери жана түнкү миграциясы жок.