Мутобиқати қафо
Мутобиқати қафо чӣ гуна аст
Мутобиқати қафо - моликияти система барои қабул ва дуруст коркард кардани мизоҷон/истеъмолкунандагони кӯҳна ҳангоми таҷдиди система. Соддатар: шумо версияи нави хизматрасонӣ/чорабиниҳоро мебароред ва интегратсияҳои мавҷуда бетағйир кор мекунанд.
Калид: созишномаҳоро вайрон накунед. Ҳама гуна таҳаввулот тавассути илова кардан, аз нав сабт накардан, аллакай озод карда шудааст.
Принсипҳои асосӣ
1. Иловаи-аввал
Майдонҳо/усулҳо/чорабиниҳои нав ихтиёрӣ илова карда мешаванд. Ҳеҷ чиз мавҷуд нест ва маънои онро тағир намедиҳад.
2. Шартномаи ҳадди ақали кафолат (MGC)
Ядро - маҷмӯи майдонҳо/амалиётро муайян кунед, ки бе он скрипт маънои худро гум мекунад. Ядро устувор аст. Ҳама чизи дигар васеъшавӣ аст.
3. Хонандаи таҳаммулпазир
Мизоҷон майдонҳои номаълумро нодида мегиранд ва арзишҳои нави enum (fallback) -ро дуруст идора мекунанд.
4. Сиёсати версияҳо
Тағиротро шикастан - танҳо тавассути хати асосӣ ('/v2 ',' пардохтҳо. v2 ',' ҳодиса. v2 '). Ноболиғ - иловагие.
5. Мушоҳида - қисми шартнома
Нусхаи муштарӣ, формат, парчамҳои қобилият дар гузоришҳо/роҳҳо ва ченакҳо намоёнанд. Ин ба шумо имкон медиҳад, ки муҳоҷирати худро идора кунед.
Тағйироти бехатар ва хатарнок
Умуман бехатар (BC-OK)
Майдонҳои ихтиёриро илова кунед (JSON/Avro/Protobuf 'ихтиёрӣ '/' nullable').
Иловаи нуқтаҳои охирин/усулҳо/чорабиниҳо.
Тамдиди enum бо арзишҳои иловагӣ (бо хонандаи таҳаммулпазир).
Суст шудани санҷиш (ҳадди аксар, илова кардани форматҳои алтернативӣ).
Илова кардани сарлавҳаҳои/метамаълумот.
Хатарнок (шикастан)
Майдонҳоро нест кунед/тағир диҳед, намуд ё ҳатмии майдонҳои мавҷударо иваз кунед.
Тағйир додани семантикаи рамзи вазъ/хатогӣ.
Истифодаи барчаспҳои protobuf барои дигар соҳаҳо.
Тағйир додани калиди тақсимоти ҳодиса (фармоишро барои агрегат вайрон мекунад).
Пурзӯр кардани SLA/танаффус, ки боиси паст шудани мизоҷони кӯҳна мегардад.
Аз рӯи услубҳои муштарак
ИСТИРОҲАТ/HTTP + JSON
Илова: майдонҳои нав - 'ихтиёрӣ', сервер онҳоро аз муштариёни кӯҳна талаб намекунад.
Версияҳо: асосӣ - дар транзит ('/v2 ') ё навъи ВАО; ноболиғ - тавассути васеъкунӣ ва '? дохил = '/'? майдонҳо = '.
Хатогиҳо: формати ягона; рамзҳо/семантикаро бе асосӣ иваз накунед.
ET bag/If-Match: барои навсозиҳои бехатар бидуни мусобиқа.
Idempotency: 'Idempotency-Key' барои POST - муштариёни кӯҳна ба ақибнишинӣ "дучанд" намекунанд.
GRPC/Протобуф
Барчаспҳо бетағйир мондаанд. Барчасбҳои ҳазфшуда аз нав истифода карда намешаванд.
Майдонҳои нав - 'ихтиёрӣ '/' такрорӣ'; қиматҳои пешфарз бо рамзи кӯҳна дуруст идора карда мешаванд.
Ҷараён: тартиб/ӯҳдадории паёмҳоро дар доираи ноболиғ тағир надиҳед.
Хатогиҳо - маҷмӯи устувори статусҳо; семантикаи нав → усул/хидмати нав ('.v2').
Рӯйдодҳо (Кафка/NATS/Пулсар) + Avro/JSON/Proto
Номгузорӣ: 'домен. амал. v {major} '.
Core против ғанишуда: устувори асосӣ; ғанисозӣ - намудҳо/мавзӯъҳои инфиродӣ ('.enriched').
Ҳолати мутобиқати схема: бештар ба ақиб CI тағироти номувофиқро масдуд мекунад.
Тақсимот: калид (масалан, 'пардохт _ ид') - қисми шартнома; онро тағир диҳед - шикастан.
Диаграммаи QL
Илова кардани майдонҳо/намудҳо - Хуб; нест кардан/тағир додани ном - тавассути '@ deprecated' ва равзанаи муҳоҷират.
Бе майор "беэътибор" -ро баланд накунед.
Мониторинги мураккабӣ/амиқӣ - тағйири лимит = тағйири шартнома.
Намунаҳо барои нигоҳ доштани пеш аз милод
Модели пирамидаи баръакс: ядро мӯътадил кунед, ихтиёрӣ васеъ кунед.
Гуфтушунид оид ба қобилият: ҳисоботҳои муштарӣ қобилиятҳоро дастгирӣ мекунанд ('X-Қобилиятҳо '/дастӣ), сервер танзим мекунад.
Дучанд/дугона-партов: 'v1' ва 'v2' -ро ҳамзамон ҳангоми муҳоҷират нигоҳ доред.
Адаптерҳо: проксиҳо/дарвозаҳо дархостҳои 'v1↔v2' -ро барои муштариёни "вазнин" тарҷума мекунанд.
Тавсеа ва шартнома (барои DB): аввал навашро илова кунед, ба навиштан/хондан оғоз кунед, танҳо баъд кӯҳнаашро нест кунед.
Идоракунӣ ва раванд
1. Каталоги шартномавӣ (Феҳристи схема): Манбаи ягонаи ҳақиқат бо сиёсати мутобиқат.
2. Линтерҳо ва чекҳои diff дар CI/CD: Санҷиши мутобиқати Schema Open-API-diff, Buf-break, Avro/JSON.
3. Шартномаҳои CDC/Истеъмолкунанда: Таъминкунанда барои шартномаҳои воқеии истеъмолкунандагон санҷида мешавад.
4. Намунаҳои тиллоӣ: дархостҳо/посухҳо/рӯйдодҳо барои регрессия.
5. Идоракунии тағирот: RFC/ADR оид ба шикастан, нақшаҳои ғуруби офтоб, иртибот.
Нест кардан ва нест кардани версияҳои кӯҳна
Марқӯс кӯҳна шудааст ('@ deprecated', тавсифҳо, сарлавҳаҳои 'Deprecation', 'Ғуруби офтоб').
Равзанаи муҳоҷират: санаи қаблан эълоншуда, курсии санҷишӣ, намунаҳои рамзӣ.
Телеметрияи истифода: Боз кӣ дар 'v1' аст? андозагирии сегмент/гузоришҳо аз рӯи версия.
Трафики дугона ба сифр, пас нест кунед.
Нишондиҳандаҳои мушоҳидашаванда ва амалиётӣ
Фоизи дархостҳо/паёмҳо аз рӯи версия.
Ҳиссаи хатогиҳо/таъхирҳо барои муштариёни калонсол пас аз раҳоӣ.
Таносуби сарбории номувофиқ (тасдиқи схема дар филтрҳои дарвоза/ҷараён).
Ақибмонии муҳоҷирати истеъмолкунандагон (чанд нафари дигар 'v1' -ро гӯш мекунанд).
Санҷиши мутобиқати қафо
Schema-diff: нокомии pri хориҷ кардан/тағир додан/тағир додани намуд.
Озмоишҳои шартномавӣ: SDK/мизоҷони кӯҳна бар зидди татбиқи нав рақобат мекунанд.
E2E канарӣ: қисми трафики кӯҳна ба версияи нав, муқоисаи p95/p99, рамзҳо, бозхонд.
Такрори ҳодиса: Пешгӯиҳо бо мантиқи нав аз дафтари кӯҳна бидуни ихтилоф ҷамъоварӣ карда мешаванд.
Сӯзандоруи хато: таъхирҳо/посухҳои қисман - мизоҷони кӯҳна намеафтанд.
Намунаҳо
REST (иловашуда)
Ин буд:json
{ "id": "p1", "status": "authorized" }
Ин шуд:
json
{ "id": "p1", "status": "authorized", "risk_score": 0. 12 }
Мизоҷони кӯҳна, 'risk _ score' -ро сарфи назар карда, корашонро идома медиҳанд.
Протобуф (барчаспҳо)
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
Ҳодисаҳо (аслӣ + ғанисозӣ)
'пардохт. ваколатдор шудааст. v1 '- ядро (далелҳои ҳадди аққал).
'пардохт. ғанӣ гардонида шудааст. v1 '- қисмҳо; истеъмолкунандагони асосӣ аз ғанисозӣ вобастагӣ надоранд.
Антипаттернҳо
Swagger-шустушӯ: схема нав карда шуд, аммо хидмат ба таври кӯҳна амал мекунад (ё баръакс).
Танаффусҳои пинҳонӣ: маънои майдон/мақомро бидуни версия иваз карданд.
Истифодаи такрории барчаспҳои протобуф: фасоди додаҳои "ором".
Мизоҷони сахт: афтидан дар майдонҳои ношинос/enum; ягон хонандаи таҳаммулпазир нест.
Нуқтаи Мега: Як-дар-як - ҳама гуна тағирот ба шикастаи эҳтимолӣ табдил меёбад.
Рӯйхати назоратии пешакӣ
- Тағйирот иловагист; ядро (MGC) дастнорас аст.
- Санҷишҳои Linters/diff гузаштанд; парчамҳои шикаста вуҷуд надоранд.
- SDK-ҳои муштарӣ нав карда шуданд (ё барои тамдиди иловагӣ талаб карда намешавад).
- Хонандаи таҳаммулпазир барои муштариён; enum-fallback тафтиш карда шуд.
- Нишондиҳандаҳо/гузоришҳо дорои парчамҳои версия ва қобилият мебошанд.
- Барои шикастани эҳтимолӣ '/v2 ', нақшаи дугона ва ғуруби офтоб мавҷуд аст.
- Ҳуҷҷатҳо/намунаҳо нав карда шуданд, маҷмӯаҳои тиллоӣ мавҷуданд.
FAQ
Қафо ва ба пеш - фарқият дар чист?
Ба қафо - серверҳои нав бо мизоҷони кӯҳна кор мекунанд. Форвард - мизоҷони нав бо серверҳои кӯҳна дуруст кор мекунанд (аз сабаби хонандаи таҳаммулпазир ва пешфарзҳои тозаву озода). Доираи пурра - мутобиқати пурра.
Оё ба ман ҳамеша лозим аст, ки '/v2 '-ро барои тағироти калон иҷро кунам?
Бале, агар инвариантҳо/намудҳо/калидҳо/семантика вайрон шаванд. Дар акси ҳол, хатро нигоҳ доред ва иловатан таҳаввул кунед.
Дар бораи enum чӣ гуфтан мумкин аст?
Афзудани қиматҳои нав бе тағйир додани маънои кӯҳнаҳо. Мизоҷон бояд арзиши номаълум дошта бошанд.
Чӣ мешавад, агар шумо аллакай "шикаста" бошед?
Баргардонидан, адаптери гармидиҳӣ, 'v2' бо дастури дугона, иртибот ва муҳоҷират.
Ҷамъ
Мутобиқати қафо интизоми эволютсия аст: ядроро мӯътадил кунед, иловатан васеъ кунед, хонандаи таҳаммулпазирро татбиқ кунед, чекҳоро автоматӣ кунед ва беқурбшавии огоҳиро нигоҳ доред. Бо ин роҳ шумо метавонед платформаро зуд таҳия намуда, муштариёнро дар зери тағироти "ноаён" гузоред.