Nad rámec limitov sadzieb: škálovanie prístupu ku Codexu a Sore
Autor: Jonah Cohen, člen technického personálu
V uplynulom roku zaznamenali Codex aj Sora rýchle prijatie a používanie rýchlo prekročilo naše pôvodné očakávania. Videli sme konzistentný vzorec: používatelia sa do toho ponoria, nájdu skutočnú hodnotu a potom narazia na limity sadzieb.
Limity sadzieb môžu pomôcť vyrovnať dopyt a zabezpečiť spravodlivý prístup; keď však používatelia získavajú hodnotu, ich tvrdé obmedzenia môže byť frustrujúce. Chceli sme nájsť spôsob, ako môžu používatelia pokračovať v práci a zároveň chrániť výkon systému a dôveru používateľov v náš prístup.
Aby sme to vyriešili, vytvorili sme modul prístupu v reálnom čase, ktorý počíta používanie. Jednou z vrstiev v tomto module je možnosť zakúpenia kreditov. Keď používatelia prekročia svoje limity sadzieb, kredity im umožnia pokračovať v používaní našich produktov tým, že čerpajú zo svojho kreditného zostatku.
Pod tým sa skrýva komplexný systém, ktorý spája limity, sledovanie spotreby v reálnom čase a kreditné zostatky do jedného prístupového modelu. Tento príspevok sa zaoberá tým, prečo si škálovanie Codexu a Sory vyžadovalo prehodnotenie riadenia prístupu, ako preukázateľne správny systém fungujúci v reálnom čase kombinuje limity sadzieb a kredity na požiadavku a ako tento základ teraz odomyká dodatočný prístup pre oba produkty.
Tradičné modely prístupu majú pri nadhľade tendenciu nútiť k výberu:
- Limity sadzieb môžu byť spočiatku užitočné, ale po ich vyčerpaní majú používatelia zlú skúsenosť: „vráťte sa neskôr“
- Fakturácia na základe používania je flexibilná, ale používatelia platia od prvého tokenu – čo nie je ideálne na podporu počiatočného skúmania
V prípade Codexu a Sory ani jeden z nich sám o sebe nestačil. Ak by sme jednoducho zvýšili limity sadzieb, stratili by sme dôležité kontroly vyrovnávania dopytu a spravodlivosti a vyčerpali by sme kapacitu slúžiť všetkým. Ak by sme sa úplne spoliehali na asynchrónne fakturovanie za používanie, spôsobili by sme problémy s oneskorením, prekročením limitov alebo odsúhlasením – presne tie problémy, ktoré si používatelia všímajú, keď sú najviac zaneprázdnení.
Namiesto toho sme potrebovali jeden hybridný systém kombinujúci limity v reálnom čase s prístupom podľa spotreby:
Tento systém musel:
- Presadzovať limity sadzieb, kým sa nedosiahnu
- Bezproblémový prechod na kredity v rámci tej istej požiadavky
- Urobiť toto rozhodnutie v reálnom čase
- Byť pri sledovaní spotreby kreditov dôsledne presný a kontrolovateľný
Jedným z kľúčových koncepčných posunov, ktoré sme urobili, bolo modelovanie prístupu ako rozhodovacieho vodopádu. Namiesto otázky „je to povolené?“, sa pýtame „koľko je povolené a odkiaľ?“ Pri počítaní spotreby systém prechádza nasledujúcou postupnosťou:
Tento model ukazuje, ako používatelia skutočne vnímajú produkt. Limity sadzieb, bezplatné úrovne, kredity, propagačné akcie a podnikové oprávnenia sú len vrstvy v tom istom rozhodovacom zásobníku. Z pohľadu používateľa „neprepínajú systémy“ – jednoducho naďalej používajú Codex a Soru. Preto kredity pôsobia neviditeľne: sú len ďalším prvkom vo vodopáde.
Vyhodnotili sme platformy tretích strán na fakturáciu a meranie spotreby, aby sme spracovali spotrebu kreditov. Sú dobre prispôsobené na fakturáciu a vykazovanie, ale nespĺňali dve kritické požiadavky:
Keď používateľ dosiahne limit a má k dispozícii kredity, systém to musí okamžite vedieť. Počítanie s maximálnym úsilím alebo oneskorené počítanie sa prejavuje ako neočakávané bloky, nekonzistentné zostatky a nesprávne poplatky. Pri interaktívnych produktoch ako Codex a Sora sa tieto zlyhania stávajú viditeľné a frustrujúce.
Taktiež sme museli ponúknuť transparentnosť každého výsledku:
- Prečo bola požiadavka povolená alebo zablokovaná
- Aká bola spotreba v rámci používania
- Ktoré limity alebo zostatky boli uplatnené
Túto funkciu bolo potrebné pevne integrovať do nášho rozhodovacieho vodopádu, a nie riešiť izolovane na samostatnej platforme na fakturáciu za používanie, ktorá by sledovala iba jednu časť diania. Aby sme používateľom umožnili prístup k našim produktom bez ohrozenia dôvery, potrebovali sme úplnú kontrolu nad správnosťou, načasovaním a pozorovateľnosťou. To nás posunulo smerom k internému riešeniu.
Aby sme to zvládli, vytvorili sme distribuovaný systém používania a vyvažovania navrhnutý špeciálne pre synchrónne rozhodnutia o prístupe.
Na vyššej úrovni systém:
- Sleduje používanie podľa používateľa a podľa funkcie
- Udržiava okná limitov sadzieb
- Udržiava kreditné zostatky v reálnom čase
- Idempotentne zaťažuje zostatky prostredníctvom streamovacieho asynchrónneho procesora
Každá požiadavka prechádza jednou vyhodnocovacou cestou, ktorá v reálnom čase rozhoduje o tom, koľko použitia je povolené, a to synchrónnym využívaním limitov sadzieb a v prípade potreby overovaním dostatočného počtu kreditov. Následne vráti jeden definitívny výsledok a asynchrónne vyrovná všetky odpočty kraditov. To zaisťuje konzistentné správanie naprieč produktmi a eliminuje duplicitnú logiku naprieč tímami.
Jednou z hlavných zásad návrhu tohto systému je, že musíme byť schopní preukázať, že naše fakturovanie je správne. To odráža korene našej podpory kreditov, ktorá vznikla u firemných zákazníkov. Vo vyššie uvedenej systémovej schéme máme tri samostatné súbory údajov, ktoré sú všetky navzájom prepojené:
- Udalosti používania produktu: Čo používateľ skutočne urobil
- Udalosti monetizácie: Koľko účtujeme používateľovi za jeho používanie
- Aktualizácie zostatku: O koľko sme upravili kreditný zostatok používateľa a prečo
Tieto súbory údajov nie sú len vedľajším produktom; v skutočnosti poháňajú systém, pričom každý súbor údajov spúšťa ďalší. Oddelenie toho, čo sa stalo, akýchkoľvek súvisiacich poplatkov a toho, čo sme zaúčtovali, nám umožňuje nezávisle kontrolovať, prehrávať a odsúhlasiť každú vrstvu. Ide o zámerný kompromis, pri ktorom uprednostňujeme preukázateľnú správnosť za cenu mierneho oneskorenia aktualizácií zostatku kreditu. Ako sme to dosiahli:
- Udalosti používania produktov sa publikujú pre všetku aktivitu používateľov, či už vedie k spotrebe kreditov alebo nie. Toto poskytuje záznam o aktivite používateľov a umožňuje nám vysvetliť, prečo sme účtovali alebo neúčtovali kredity.
- Každá udalosť nesie stabilný kľúč idempotencie, takže opakované pokusy, prehratia alebo reštarty pracovníkov nikdy nemôžu spôsobiť dvojité odpísanie zo zostatku, čím sa predchádza dvojitému účtovaniu. To nám tiež umožňuje spustiť sériové odsúhlasenie na overenie našej práce offline.
- Vykonávame asynchrónne (ale stále takmer v reálnom čase) aktualizácie zostatku namiesto synchrónnych aktualizácií, aby sme vytvorili záznam o aktivite. Tolerujeme malé oneskorenie pri aktualizácii zostatku používateľa, aby sme dokázali, že systém funguje, a uistili našich používateľov, že im neúčtujeme nesprávne platby. Keď toto krátke oneskorenie spôsobí prekročenie kreditného zostatku používateľa, automaticky mu ho vrátime; uprednostňujeme preukázateľnú správnosť a dôveru používateľa pred prísnym vymáhaním.
- Znížime kreditný zostatok a vložíme záznam o aktualizácii zostatku do jednej atomickej transakcie databázy. Aktualizácie zostatku sú serializované pre každý účet, takže súbežné požiadavky sa nikdy nemôžu dostať do pretekov pri míňaní tých istých kreditov. Záznam o aktualizácii zostatku obsahuje debetnú sumu aj priradenie k udalosti monetizácie, ktorá spustila aktualizáciu; zabalenie týchto údajov do jednej transakcie v databáze zaručuje, že máme záznam o aktivite pre každú úpravu kreditného zostatku.
Všetka táto prísnosť podporuje jeden cieľ: zabezpečiť jednoduchý a bezpečný prístup. Keď ľudia tvoria alebo kódujú, nemali by sa musieť trápiť tým, či požiadavka prejde, či im bude účtovaná preplatená suma alebo či je ich zostatok presný. Vďaka preukázateľne správnemu zaznamenávaniu spotreby, fakturácie a zostatkov poskytujeme používateľom systém, ktorý neruší ich používateľský zážitok. To nám umožňuje nahradiť tvrdé obmedzenia nepretržitým prístupom – a to umožňuje kredity využiť aj uprostred skutočnej práce, nielen na faktúre.
Hlavnou zásadou nášho prístupu je ochrana používateľskej dynamiky. Každé architektonické rozhodnutie sa odvíja od výsledku orientovaného na používateľa: zostatky v reálnom čase zabraňujú zbytočným prerušeniam, atomická spotreba zabraňuje dvojitému účtovaniu a jednotná prístupová logika zaisťuje predvídateľné správanie. Výsledkom je, že ľudia môžu pracovať dlhšie, skúmať hlbšie a posúvať projekty ďalej bez toho, aby narážali na tvrdé obmedzenia alebo predčasné zmeny plánu.
Keď sú používatelia zapojení, systém by im mal pomôcť pokračovať, nie im prekážať. Limity a kredity miznú v úzadí.
Vytvorenie takejto skúsenosti si vyžadovalo prehodnotenie prístupu, používania a fakturácie ako jedného systému a vybudovanie infraštruktúry, ktorá považuje správnosť za prvotriednu funkciu produktu. Rovnaký základ sa môže časom rozšíriť na ďalšie produkty; Codex a Sora sú len začiatok.


