Gönüden-göni gabat gelmek
Gönüden-göni gabat gelmek näme?
Gönüden-göni gabat gelmek (forward compatibility) - ulgamyň başda dizaýn edilenlerden has täze müşderiler ýa-da maglumatlar bilen dogry işlemek ukybydyr. Has aňsat: täze müşderi gelende köne serwer bozulmaýar; täze habar bilen duşuşanda köne sarp ediji ýykylmaýar.
Forward (täze ulgam köne müşderileri goldaýan mahaly) ters laýyklykdan jogapkärçiligiň ugry bilen tapawutlanýar: geljekdäki giňelişlerden tutuş ekosistemany täzelemezden "ýaşamak" üçin teswirnamalary we müşderileri dizaýn edýäris.
Esasy ýörelgeler
1. Tolerant reader & tolerant writer
Reader näbelli meýdanlara/sözbaşylara üns bermeýär we dogry fallback bilen täze enum-gymmatlyklara ýol berýär.
Writer serweriň goldanýan (capabilities) diýip yglan etmedik zady ibermeýär.
2. Capability negotiation
Handshake basgançagynda aç-açan mümkinçilik alyş-çalşygy (fiçler/wersiýalar/media görnüşleri). Müşderi öz özüni alyp barşyny serweriň jogabyna uýgunlaşdyrýar.
3. Defolt degradasiýasy
Täze mümkinçilikler opsiýaly hasaplanýar: eger serwer/konsumer olary goldamasa, ssenariýa her niçigem bolsa peýdaly minimum (MGC) bilen tamamlanar.
4. Durnukly ýadro (MGC)
Iň pes kepillik şertnamasy üýtgemeýär; täzelik giňeltmek ýaly ýaşaýar.
5. Teswirnamanyň bir bölegi hökmünde ýalňyşlyk şertnamalary
Öňünden aýdyp boljak kodlar/sebäpler ("surat goldanylmaýar", "media-görnüşi belli däl") müşderä awtomatiki usulda saklanylýan re modeime gaýdyp gelmäge mümkinçilik berýär.
6. Garaşylmadyk wersiýalar
Major çyzyklary aýrylýar; Kiçi giňeldişler serweri/konsumeri täzelemegi talap etmeýär.
Bu aýratyn möhüm ýerde
Uzak möhletli integrasiýa bilen köpçülige açyk API (hyzmatdaşlar, ykjam programmalarda SDK).
Köp garaşsyz konsumerleri bolan waka platformalary.
Arkendden has haýal täzelenýän ykjam müşderiler.
Edge/IoT, bu ýerde enjamlaryň flotunyň bir bölegi seýrek deşilýär.
Stiller boýunça satuw patternleri
REST/HTTP
Negotiation:- 'Accept '/Parametrli mediatipler (' application/vnd. example. order+json; v=1; profile=risk`).
- 'Prefer: include =...'
- Başlyk 'X-Capabilities: risk_score,item_details_v2'.
- Esasy formatda haýyş iberýär, giňeldýär - diňe serwer capability tassyklasa (OPTIONS/desc/lid-endpoint arkaly).
- "415/406/501" awtomatiki usulda goldanýan formata/usula gaýdýar.
- Serweriň jogaby: näbelli parametrleri - äsgermezlik etmek; goşmaça meýdanlara ýol berilýär; hata formaty durnukly ('type/code/detail/trace _ id').
gRPC / Protobuf
Durnukly hyzmatlar: täze usullar/meýdanlar - goşmaça; köne serwer haýyşy ýuwaşlyk bilen äsgermezlik edýär.
Feature discovery: 'GetCapabilities ()' usuly pit/limit sanawlaryny yzyna gaýtarýar. Eger serwer yglan etmese, müşderi "v2-usuly" çagyrmaýar.
Akym: iň az habar ýygnamagyň tertibini düzüň; Täze "çarçuwalary" köne müşderiniň äsgermezlik edýän giňeldişleri/görnüşleri bilen belläň.
GraphQL
Forward-friendly: serwerde täze meýdanlar/görnüşler peýda bolýar - köne müşderiler olary soramaýarlar.
Çaklamalar gadagan edilýär: Müşderi shemany (introspektsiýa/kodogen) saklamaly we näbelli görkezmeleri/üýtgewleri ibermeli däldir.
Pese gaçmak: eger serwer aýratyn görkezmäni/feature bilmese - müşderi soragy onsuz gurýar.
Event-driven (Kafka/NATS/Pulsar, Avro/JSON/Proto)
Sanawdaky shemanyň FORWARD laýyklygy: köne konsumerler täze shema bilen ýazylan habarlary okap bilerler.
Defoltly goşmaça meýdanlar: täze prodýuserler köne konsumerleri bozmaýarlar.
Core vs Enriched: ýadro öňküligine galýar, täze maglumatlar '.enriched' -de ýa-da goşmaça meýdan hökmünde çap edilýär.
Taslama amallary
1. Iň az talap üçin şertnama (MGC)
Amalyň ähli serwerler tarapyndan köp ýyllap goldanyljak "dar boýny" bolmaly.
2. Şertnama derejesindäki baýdaklar
Aýratynlyklary "risk _ score", "pricing _ v2", "strong _ idempotency" diýip atlandyryň. Müşderi olary aç-açan öz içine alýar.
3. "Goldanylmaýar" üçin aç-açan hata kodlary
HTTP: `501 Not Implemented`, `415 Unsupported Media Type`, детальные `problem+json`.
gRPC: `UNIMPLEMENTED`/`FAILED_PRECONDITION`.
Events: DLQ-e barýan ýol c 'reason = unsupported _ feature'.
4. Sargyt/Doly sanawlara bil baglama
Müşderi täze enum gymmatlyklaryna, täze meýdanlaryň ýoklugyna we "goşmaça" häsiýetlere taýyn bolmaly.
5. Durnukly kesgitleýjiler we formatlar
Setiriň içinde partiýa görnüşini/açarlaryny üýtgetmäň - bu okyjylaryň tarapynda öňe çykmagy bozýar.
6. "Maşyn okalýan" resminamalar
Deskriptorlary ýerleşdiriň: OpenAPI/AsyncAPI/Proto descriptors/GraphQL SDL. Müşderiler goldawy barlap bilerler.
Forward laýyklygyny barlamak
Schema-diff FORWARD/FULL re modeiminde: täze shema köne sarp edijini/serweri tassyklaýar.
Müşderiniň şertnama synaglary: täze müşderi köne serwere garşy ýerine ýetirilýär.
Golden requests: "köne" serwer boýunça "täze" soraglaryň toplumy; möhüm ýalňyşlyksyz pese gaçmagyna garaşylýar.
Chaos/latency: wagt/retraut barlagy - täze müşderi köne serweriň iň erbet SLA-syny dogry başdan geçirmeli.
Canary: Täze müşderileriň käbiri öňki serwer wersiýasy bilen işleýär - ýalňyşlyklaryň/zaýalanmalaryň telemetriýasyny ýygnaýarys.
Gözegçilik we operasiýa metrikleri
Goldanylmadyk şahsyýetler we olaryň awtomatiki yza gaýdyp gelmegi bolan haýyşlaryň/habarlaryň paýy.
Müşderileriň wersiýalary boýunça paýlanyş (User-Agent/meta-maglumatlar/claims).
'UNIMPLEMENTED/501/415' ýalňyşlyklary we 'unsupported _ feature' -den DLQ-e barýan ugurlar.
Zaýalanma wagty: "giňeldilen" jogaba garşy MGC üçin p95/p99.
Shemalaryň sanawynda laýyklyk düzgünleri
FORWARD: täze ýazgy köne okyjy bilen gabat gelýär (defoltlar, opsiýalar gerek).
FULL: и FORWARD, и BACKWARD; köpçülikleýin şertnamalar üçin amatly.
Maslahat: wakalar üçin - BACKWARD prodýuserde we FORWARD-da (tolerant reader arkaly), daşarky API üçin - FULL.
Mysallar
REST (capabilities + degradasiýa)
1. Müşderi 'GET/meta/capabilities' → '{"risk_score": false,' price_v2": true} '.
2. 'POST/orders' -da esasy meýdanlary iberýär; 'risk _ score' soramaýar, sebäbi serwer muny bilmeýär.
3. Eger tötänleýin 'Prefer: include = risk _ score' iberen bolsaňyz, serwer 'risk _ score' (ýa-da 'Preference-Applied: none') meýdançasyz 200 jogap berýär - müşderi ýykylmaýar.
gRPC (discovery)
'GetCapabilities ()' usullaryň sanawyny yzyna gaýtardy. Müşderi 'CaptureV2' -ni çagyrmaýar, eger ýok bolsa, 'Capture' -ni ulanýar we giriş maglumatlaryny goldanýan görnüşe öwürýär.
Events (Sanawda FORWARD)
Öndüriji 'risk _ score' (nullable with defolt) meýdançasyny goşdy. Köne konsumer ony äsgermezlik edýär; onuň logikasy diňe ýadronyň durnukly meýdanlaryny ulanýar.
Anti-patternler
Gaty müşderi: whitelist-meýdanlary süzýär we nätanyş häsiýete düşýär.
Gizlin hileler: müşderi capabilities-i barlamazdan täze parametri iberip başlaýar.
Hataryň içinde ID/açar formatlaryny üýtgetmek → köne serwerler/konsumerler täze haýyşlara/habarlara düşünmegi bes edýärler.
Doly enum (default bolmazdan switch) sanawy barada tikilen çaklamalar.
Logistika akym gözegçiligi hökmünde: şertnama kodlarynyň ýerine hatalaryň satrlaryny parsing.
Giriş barlagy
- MGC tarapyndan kesgitlenildi; täze mümkinçilikler opsiýa hökmünde bellendi.
- Capability negotiation (endpoint/metadata/handshake) beýan edildi we durmuşa geçirildi.
- Müşderiler nätanyş meýdanlary äsgermezlik edýärler we täze enum (fallback) bilen dogry işleýärler.
- Ýalňyşlyk şertnamalary öňünden "goldanylmaýar" (HTTP/gRPC/Event).
- Shemalaryň sanawy degişli artefaktlar üçin FORWARD/FULL-a sazlandy.
- Awtotestler: schema-diff (FORWARD), köne serwere garşy müşderiniň şertnama synaglary, canary.
- Metrikler: müşderiniň wersiýasy, şowsuzlyk, pese gaçmagyň paýy, p95 MGC.
- Resminamalar/SDK fiçleriň sanawyny we zaýalanma mysallaryny çap edýär.
FAQ
Forward iş ýüzünde backwarddan nähili tapawutlanýar?
Backward: Täze serwer köne müşderileri bozmaýar. Forward: köne serwer täze müşderilerden (ýa-da köne konsumer - täze habarlardan) bozulmaýar. Iň gowusy, siz full ýetýärsiňiz.
Elmydama capabilities girizmek zerurmy?
Sinhron goýberilmezden işjeň ewolýusiýa garaşýan bolsaňyz, hawa. Bu onlarça esasy çyzyklary saklamakdan arzan.
Howpsuzlyk barada näme aýdyp bilersiňiz?
Täze çyzgylar aýratyn skopes/claims talap etmeli. Eger serwer olary goldamaýan bolsa - müşderi howpsuzlygy peseltmeli däldir, ýöne çiçekden ýüz öwürmeli.
Serwer goldawyny "çaklamak" mümkinmi?
Islenmeýär. Aç-açan (capabilities) soramak ýa-da media/shema seretmek has gowudyr.
Jemi
Gönüden-göni gabat gelmek - mümkinçilikler barada ylalaşmak we howpsuz pese gaçmak düzgünidir. Durnukly ýadro, capability negotiation, goşmaça giňelmeler we öňünden aýdyp boljak ýalňyşlyklar täze müşderilere we maglumatlara köne serwerler we sarp edijiler bilen - köpçülikleýin goýberilmezden we gijeki göçmezden ylalaşmaga mümkinçilik berýär.