Opakování není druhé rozhodnutí o nákupu.
Nákupní toky selhávají v prostoru mezi externí platební událostí a in- game grantem. Příjem může dorazit dvakrát. Požadavek sítě může time out po odevzdání serveru, ale předtím, než klient obdrží odpověď. Proces může havarovat po vyhrazení transakce, ale před poskytnutím měny. Na restart, nejbezpečnější akce může být znovu vyzkoušet práci, která byla přerušena. Pokud systém zachází s každou rezkouškou jako s povolením k udělení, duplicitní nároky jsou běžným důsledkem zotavení.
Užitečným rozlišením je záměr versus grant. Záměr je požadavek na získání konkrétního produktu pod konkrétní transakční identitou. Grant je trvalý výsledek hry: vlastnictví nároku, delta měny, inventární položka, nebo období předplatného. Stejný záměr může být dodán, dotazován, znovu zkoušen, nebo znovu dodán mnohokrát. To by mělo stále rozhodnout o jednom rozhodnutí o grantu.
Jedná se o strojírenský vzor, ne platform- specifické záruky. Různé obchody, poskytovatelé plateb, a herní backends odhalit různé příjem, potvrzení, a vrácení chování. Nepředpokládejte přijetí prokáže grant, nebo že potvrzení dokazuje, že hráč viděl položku. Build server- side záznam, takže hra může uvést, co ví, a obnovit bezpečně, když externí výsledek je neúplný nebo zpožděný.
Dát každý záměr nákupu stabilní klíč
Idempotency klíč váže opakované pokusy o dodání k jednomu rozhodnutí. To může vycházet z identifikátoru důvěryhodné platformy transakce, když je tento identifikátor k dispozici a ověřen, nebo může být vydáván serverem před zahájením nákupu a je spojen později s důvěryhodnými informacemi o příjmu. Klíč musí být stabilní napříč retry. Vytvoření nového náhodného klíče pokaždé, když klient stiskne "obnovit" jednoduše vytvoří více transakcí, které se stane vypadat podobně.
Uložit dostatek kontextu s klíčem k odmítnutí nesouladu: hráč nebo rozsah účtu, identita produktu, očekávané množství nebo tvar nároku, zdrojový kanál, obdržený čas, ověřovací status, a stav, jako je čeká, zavázané, zamítnuté, nebo potřebuje-přezkum. Udržovat citlivé přijímací materiál mimo běžné protokoly. Pokud syrové poskytovatele užitečné zatížení potřebují krátké uchovávání pro ověřený tok obnovy, chránit je odděleně a učinit jejich přístup záměrný.
Datový model také potřebuje jedinečnost hranice. Pro nekonzumní nárok, jedinečnost může být účet plus ID produktu. U měny, jedinečnost je obvykle zápis do knihy nebo grant transakce spíše než aktuální bilance. Pro spotřební zboží, důvěryhodný identifikátor transakce může být jedinečný, i když ID produktu opakuje. Definovat klíč před kódování politiky retry; jinak dva subsystémy mohou deduplikovat proti neslučitelné identity.
Vzor neznámého výsledku odevzdání
Obtížný výsledek není čistý úspěch nebo čisté selhání. Je "neznámý": klient neví, zda server grant spáchal. Timeout, resetovat připojení, restartovat proces, nebo výpadek služeb může produkovat tento stav. Bezpečné chování klienta je požádat o status transakce nebo znovu vyzkoušet stejný záměr. Bezpečné chování serveru je vyhledat tento záměr a vrátit trvalé rozhodnutí, spíše než použití jiné mutace.
Neupravujte stav displeje klienta. Zmizející spinner, lokální účtenka nebo optimistická změna rovnováhy mohou zlepšit zkušenosti, ale nemůže rozhodnout, zda účet vlastní nárok. Server autorita znamená, že server ověřuje přijatou transakci podle hranice důvěryhodnosti produktu, provede trvalý záznam jednou, a vrátí aktuální stav, když je požádán znovu.

Sekvence by měla zviditelnit politiku částečného dokončení. Například: získat úmysl, potvrdit důvěryhodné důkazy o nákupu, vytvořit nebo načíst trvanlivý záznam knihy, odebrat nárok nebo měnovou mutaci, označit záznam udělený, uznat externí dodání, pokud je to vhodné, pak vrátit výsledek. Pokud proces skončí mezi dvěma kroky, zotavení pracovník nebo pozdější status dotaz může obnovit z trvanlivého záznamu. Přesné pořadí závisí na externím poskytovateli a herní architektuře, ale jednotná identita grantu ne.
Ochrana nároků a měnových invariantů
Klíč idempotence zabraňuje opakování jednoho záměru; není automaticky, aby každý vedlejší účinek správné. Definovat invarianty grant musí zachovat. Nespotřebovatelný nárok se objeví nejvýše jednou pro účet a produkt. Peněžní grant má zápis do knihy s jedním transakčním klíčem, známý delta, a výsledný zůstatek, který odpovídá součtu platných zápisů. Inventory granty poslouchat stack, kapacita, a item- definice pravidla. Období předplatného neprodlužuje dvakrát, protože potvrzovací koncový bod běžel dvakrát.
Udělat invariantní kontrolu součástí stejné trvanlivé operace, která provádí grant. Čtení následované pozdější zápis může závodit pod souběžným dodáním. Dva pracovníci mohou pozorovat "nevlastněné" a oba grant. Použijte transakční úložiště, compareandset sémantika, serializovaná cesta mutace účtu, nebo jiný explicitní konměna primitivní vhodný pro datového skladu. Důležitou vlastností je, že rozhodnutí a jeho marker nemůže být nezávisle vyhrál dva pokusy.
Pro hry s runtime in- memory, rozlišit trvalý úspěch od prezentace. Server může aktualizovat viditelný zůstatek hráče po trvalém zápisu knihy, ale viditelná aktualizace není důkaz. Při opětovném připojení nebo restart, obnovit prezentovaný stav z trvanlivého záznamu účtu. To dělá opožděné klientova reakce nevhodný spíše než finančně nebezpečný.
Zkušební havárie, restartování a opětovné dodání úmyslně
Začněte s deterministickým scénářem. Vytvořte jeden účet, jeden produkt, jeden známý počáteční zůstatek nebo soubor nároků, a jeden stabilní transakční klíč. Spusťte tok, pak vstříkněte selhání po každé pojmenované hranici: po přijetí, po vytvoření účetní knihy, po vzniku nároku mutace, po označení stavu, po externí potvrzení, a poté, co je připravena odpověď. Restartujte příslušného pracovníka nebo proces, znovu zkuste stejný klíč, a prosaďte konečný trvalý stav.
Očekávaný výsledek by měl být specifický. Retrie může vrátit "již udělené" s původním výsledkem, pokračovat v probíhající operaci, odmítnout neodpovídající užitečné zatížení, nebo držet záznam k přezkoumání. Nemělo by přidat druhou inventární položku, použít druhou měnu delta, nebo skrýt neznámý stav s vykonstruovaným úspěchem. Zachycení klasifikace ve výsledku testu, takže pozdější refaktor nemůže změnit úmyslné držení do náhodného duplikátu.
Použít reporting ve stejném scénáři. Doručte přesnou důvěryhodnou transakci dvakrát, pak doručte po restartu, pak dodat vedle duplicate klient retry. Výsledný stav účetní knihy a účtu by měl být totožný s jednosměrným doručovacím případem. Pokud produkt umožňuje opakované nákupy, spusťte stejnou sekvenci se dvěma skutečně odlišné identity transakce prokázat, že systém není over- deduplicate pomocí ID produktu sám.
Udržujte hranice poctivé.
Testování může prokázat pouze interakce, které provedete. Simulovaná odpověď poskytovatele může potvrdit váš státní stroj, ale to není důkaz, že každý výrobce hrana se chová přesně stejným způsobem. Spustitelný test proti pískovišti může přidat důvěru pro tuto integraci, ale stále má odlišné provozní podmínky od živého obchodu. Zaznamenejte, zda scénář používá simulaci, místní adaptér, pískoviště, nebo ověřené prostředí poskytovatele.
Hranice důvěry by také měla být jasná. Klient by neměl předložit libovolnou částku, ID produktu, nebo "ověřený" vlajku a získat grant. Vstupy jsou nedůvěryhodné, dokud je server ověřuje proti příslušné konfiguraci a kupní důkazy. Pokud validace nemůže dokončit, udržet záměr do doby, nebo odmítnout ji s dosažitelnou kategorií. Nedovolte, aby se retry fronta stát bypass kolem ověření.
Soukromí se vztahuje na tuto testovací disciplínu. Fixtures by měly používat syntetické transakční údaje. Záznamy by měly odkazovat na bezpečný identifikátor testu, nikoli na surový příjem nebo název účtu. Produkční incident může vyžadovat omezené důkazy, ale rutinní testovací suite by se nikdy neměl stát druhým payment- data store.
Praktický kontrolní seznam
- Oddělte stabilní záměr nákupu od pozdějšího grantu na straně hry.
- Použijte jeden idemptency klíč v průběhu timeouts, retests, restarts, and receive reporting.
- Uvázat klíč k účtu, produktu nebo tvaru nároku a důvěryhodnému zdrojovému kontextu.
- Definovat trvanlivé státy, jako jsou nepředvídané, oddané, zamítnuté a potřeby přezkumu.
- Provést nárok na jedinečnost a aktuálně-účetní invarianty uvnitř stejné hranice součtu měn jako grant.
- Aplikujte selhání po každém přechodu stavu, poté restartujte a znovu vyzkoušejte stejný záměr.
- Test duplicitní dodání a legitimní opakované nákupy odděleně.
- Hlásit neznámé výsledky upřímně; nepřeměnit timeout do vymyšleného úspěchu.
- Udržujte příjem-jako přípravky a testovací protokoly syntetické a redigované.
Často kladené otázky
Je jedinečné ID stvrzenky dostatečné pro idempotenci?
To může být užitečná složka, když server může ověřit, že příjem identity je důvěryhodný a oblast působnosti správně. Je stále důležité uložit výsledné rozhodnutí o grantu, nesoulad politiky a stav obnovy. Systém může obdržet stejný identifikátor opakovaně, přijímat jej pozdě, nebo přijímat s užitečným zatížením, které neodpovídá uloženého kontextu výrobku. Trvalý záznam je to, co dělá tyto případy kontrolovatelný.
Měl by se klient po timeout automaticky opakovat?
Obvykle by se mělo znovu vyzkoušet rozlišení stavu pomocí stejné identity záměru, s ohraničeným backoff a jasné uživatelské zpětné vazby. Ať už by mělo znovu předložit externí kupní důkazy závisí na poskytovateli a ověřovací design. Nebezpečné chování je tiše vytváří novou kupní žádost nebo použití místní grant, protože původní odpověď byla ztracena.
Jak se spotřební materiál liší od stálých nároků?
Trvalé nároky se obvykle deduplikují účtem a produktem. Spotřební materiál může umožnit, aby stejný produkt byl zakoupen mnohokrát, takže hranice jedinečnosti musí zahrnovat identitu transakce nebo sekvenci účetní knihy spíše než ID produktu sám. Oba stále potřebují jeden trvalý grant pro každý přijatý záměr.
Co tady Persistium tvrdí?
Persistium je ve vývoji. Tato poznámka vysvětluje obecně použitelné integrity a test- design vzory; nepožaduje veřejnou koupi produktu, platformu certifikace, zákaznické historii incidentů, nebo hostované služby. Jeho nepřetržitý směr je zájem o stejný druh ohraničených důkazů a replay- bezpečné zotavení disciplíny.







