Veće korištenje: skalirani pristup za aplikacije Codex i Sora
Jonah Cohen, član tehničkog osoblja
Protekle godine brzo su prihvaćeni i Codex i Sora, a njihova upotreba premašila je naša početna očekivanja. Vidjeli smo dosljedan obrazac: korisnici se prime posla, pronađu stvarnu korist, a zatim naiđu na ograničenja korištenja.
Ograničenja korištenja mogu pomoći u ublažavanju potražnje i osigurati pravedan pristup; međutim, kada korisnici ostvaruju korist, nailazak na strogo ograničenje može biti frustrirajuće. Željeli smo omogućiti korisnicima da nastave, dok istodobno štitimo performanse sustava i povjerenje korisnika u naš pristup.
Kako bismo to riješili, razvili smo sustav za pristup u stvarnom vremenu koji mjeri korištenje. Jedan od slojeva tog sustava je mogućnost kupnje kredita. Kada korisnici premaše svoja ograničenja korištenja, krediti im omogućuju da nastave koristiti naše proizvode trošeći svoj kreditni saldo.
Ispod toga nalazi se složeni sustav koji spaja ograničenja, praćenje korištenja u stvarnom vremenu i saldo kredita u jedinstvenom modelu pristupa. Ova objava objašnjava zašto je skaliranje aplikacija Codex i Sora zahtijevalo preispitivanje kontrole pristupa, kako dokazivo ispravan sustav u stvarnom vremenu kombinira ograničenja korištenja i kredite po zahtjevu te kako ta osnova sada omogućuje dodatni pristup za oba proizvoda.
Gledajući širu sliku, tradicionalni modeli pristupa obično nameću izbor:
- Ograničenja korištenja mogu u početku biti korisna, ali korisnike ostavljaju s lošim iskustvom kada ih dosegnu: „vratite se kasnije“
- Naplata prema korištenju fleksibilna je, ali korisnici plaćaju od prvog tokena, što nije idealno kao podrška ranom istraživanju
Za aplikacije Codex i Sora nijedno nije bilo samo po sebi dovoljno. Kad bismo jednostavno povećali ograničenja korištenja, izgubili bismo važne kontrole pravednosti i ublažavanja potražnje te bismo ostali bez kapaciteta za pružanje usluge svima. Ako bismo se u potpunosti oslanjali na asinkronu naplatu prema korištenju, uveli bismo kašnjenja, prekoračenja ili probleme s usklađivanjem, upravo one vrste problema koje korisnici primijete kada su najviše angažirani.
Ono što nam je umjesto toga trebalo bio je jedan hibridni sustav koji kombinira ograničenja u stvarnom vremenu s pristupom po modelu plaćanja prema korištenju:
Zahtjevi za ovaj sustav:
- Primjena ograničenja korištenja sve dok se ne dosegnu
- Glatki prijelaz na kredite unutar istog zahtjeva
- Donošenje te odluke u stvarnom vremenu
- Biti izuzetno precizan i omogućiti reviziju pri praćenju potrošnje kredita
Jedan od ključnih konceptualnih pomaka koje smo učinili bio je modeliranje pristupa kao fluidnih odluka. Umjesto da pitate „je li to dopušteno?”, pitamo „koliko je dopušteno i odakle?” Kada se mjeri korištenje, sustav prolazi kroz sljedeći slijed:
Ovaj model odražava način na koji korisnici zapravo doživljavaju proizvod. Ograničenja korištenja, besplatne razine, krediti, promocije i poslovna ovlaštenja samo su slojevi u istom skupu odluka. Iz korisničke perspektive, oni ne „prebacuju sustave”, samo nastavljaju koristiti se aplikacijama Codex i Sora. Zato se krediti čine nevidljivima: oni su samo još jedan element u fluidu.
Procijenili smo platforme trećih strana za naplatu i mjerenje korištenja kako bismo upravljali potrošnjom kredita. Prikladne su za izdavanje računa i izvješćivanje, ali nisu ispunili dva ključna zahtjeva:
Kada korisnik dosegne ograničenje i ima dostupne kredite, sustav to mora znati odmah. Mjerenje uz najveći intenzitet ili s odgodom može rezultirati neočekivanim blokovima, nedosljednim saldima i netočnim naplatama. Na interaktivnim proizvodima poput aplikacija Codex i Sora, ti neuspjesi postaju vidljivi i frustrirajući.
Trebali smo također ponuditi transparentnost za svaki ishod:
- Zašto je zahtjev dopušten ili blokiran
- Koliko je korištenja potrošeno
- Koja su ograničenja ili salda primijenjeni
Ovaj potencijal trebalo je usko integrirati u naše fluidno odlučivanje, umjesto da se rješava izolirano na zasebnoj platformi za naplatu prema korištenju koja je vidjela samo jedan dio onoga što se događalo. Kako bismo korisnicima omogućili pristup našim proizvodima bez narušavanja povjerenja, trebali smo potpunu kontrolu nad ispravnošću, vremenom i mogućnošću praćenja. To nas je usmjerilo prema internom rješenju.
Kako bismo to omogućili, razvili smo distribuirani sustav za praćenje korištenja i salda, osmišljen posebno za sinkrone odluke o pristupu.
Na visokoj razini ovaj sustav:
- Prati korištenje po korisniku i po značajci
- Održava prozore ograničenja korištenja
- Održava kreditna salda u stvarnom vremenu
- Salda se terete idempotentno putem procesora za strujanje asinkronih podataka
Svaki zahtjev prolazi kroz jedan put evaluacije koji donosi odluku u stvarnom vremenu o tome koliko je korištenja dopušteno sinkronim korištenjem iz ograničenja korištenja i, ako je potrebno, provjerom dovoljnog broja kredita; zatim vraća jedan konačan ishod dok asinkrono poravnava sva zaduženja kredita. To osigurava dosljedno ponašanje u svim proizvodima i uklanja dupliciranu logiku u timovima.
Jedan od ključnih principa dizajna ovog sustava je da moramo biti u mogućnosti dokazati da je naša naplata ispravna. Ovo odražava korijene naše kreditne podrške, koja je nastala s poslovnim korisnicima. U gornjem dijagramu sustava imamo tri odvojena skupa podataka koji su svi povezani:
- Događaji korištenja proizvoda: Što je korisnik zapravo učinio
- Događaji monetizacije: Koliko naplaćujemo korisniku za korištenje
- Ažuriranja salda: Koliko smo prilagodili korisnički kreditni saldo i zašto
Ovi skupovi podataka nisu slučajni nusproizvodi; oni zapravo pokreću sustav, pri čemu svaki skup podataka aktivira sljedeći. Razdvajanje onoga što se dogodilo, svih povezanih naknada i onoga što smo teretili omogućuje nam neovisno revidiranje, ponovno reproduciranje i usklađivanje svakog sloja. Ovo je namjeran kompromis u kojem dajemo prednost dokazivoj ispravnosti, po cijenu blagog kašnjenja ažuriranja salda kredita. Kako smo to ostvarili:
- Događaji korištenja proizvoda objavljuju se za sve korisničke aktivnosti, bez obzira na to dovode li do potrošnje kredita ili ne. Ovo omogućuje praćenje aktivnosti korisnika i omogućuje nam objašnjenje zašto smo naplatili ili nismo naplatili kredite.
- Svaki događaj nosi stabilan idempotencijski ključ, tako da ponovni pokušaji, reproduciranja ili ponovna pokretanja radnika nikada ne mogu dvostruko teretiti saldo, što sprječava dvostruko naplaćivanje. To nam također omogućuje provođenje serijskog usklađivanja kako bismo izvan mreže provjerili naš rad.
- Izvodimo asinkrona (ali i dalje gotovo u stvarnom vremenu) ažuriranja salda umjesto sinkronih ažuriranja kako bismo stvorili revizijski trag. Toleriramo kratko kašnjenje u ažuriranju salda korisnika kako bismo mogli dokazati da sustav funkcionira i uvjeriti naše korisnike da im ne naplaćujemo pogrešne troškove. Kada to kratko kašnjenje uzrokuje prekoračenje korisničkog salda kredita, automatski ga refundiramo; biramo dokazivu ispravnost i povjerenje korisnika umjesto stroge provedbe.
- Smanjujemo saldo kredita i umećemo zapis Ažuriranje salda u jednoj atomskoj transakciji baze podataka. Ažuriranja salda serijaliziraju se po računu, tako da istovremeni zahtjevi nikada ne mogu istovremeno trošiti iste kredite. Zapis Ažuriranje salda sadržava i iznos zaduženja i pripisivanje događaju monetizacije koji je pokrenuo ažuriranje; uključivanje ovoga u jednu transakciju baze podataka koja jamči revizijski trag za svaku prilagodbu salda kredita.
Sva ta strogost ima jedan cilj: učiniti pristup jednostavnim i sigurnim. Kada ljudi stvaraju ili programiraju, ne bi se trebali pitati hoće li zahtjev biti prihvaćen, hoće li im biti naplaćeno previše ili je li njihov saldo točan. Čineći korištenje, naplatu i salda dokazivo ispravnima, korisnicima pružamo sustav koji ne odvlači pažnju od njihovog okruženja. To je ono što nam omogućuje zamjenu naglih prekida kontinuiranim pristupom i to je ono što čini kredite upotrebljivima usred stvarnog posla, a ne samo na fakturi.
Vodeće načelo našeg pristupa je zaštita kontinuiteta korisničkog zamaha. Svaka arhitektonska odluka povezuje se s ishodom vidljivim korisniku: salda u stvarnom vremenu sprječavaju nepotrebne prekide, atomska potrošnja sprječava dvostruku naplatu, a objedinjena logika pristupa osigurava predvidljivo ponašanje. Rezultat je da ljudi mogu raditi dulje, dublje istraživati i projekte odvesti dalje bez suočavanja s naglim prekidima ili preuranjenim promjenama plana.
Kada su korisnici angažirani, sustav bi im trebao pomoći da nastave, a ne da im smeta. Ograničenja i krediti nestaju u pozadini.
Razvoj tog okruženja zahtijevao je preispitivanje pristupa, korištenja i naplate kao jedinstvenog sustava te razvoj infrastrukture koja ispravnost tretira kao prvorazrednu značajku proizvoda. Isti temelj se s vremenom može proširiti na više proizvoda; Codex i Sora su samo početak.


