Izvan ograničenja pristupa: skaliranje pristupa Codexu i Sori
Jonah Cohen, član tehničkog osoblja
U protekloj godini, i Codex i Sora su doživjeli brzo usvajanje, a njihova upotreba je brzo premašila ono što smo prvobitno očekivali. Vidjeli smo dosljedan obrazac: korisnici zarone, pronađu stvarnu vrijednost, a zatim naiđu na ograničenja stope.
Ograničenja brzine mogu pomoći u ublažavanju potražnje i osiguravanju pravednog pristupa; međutim, kada korisnici ostvaruju korist, nailazak na strogo ograničenje može biti frustrirajući. Željeli smo omogućiti korisnicima da nastave dalje, dok istovremeno štitimo performanse sistema i povjerenje korisnika u naš pristup.
Da bismo to riješili, napravili smo mehanizam za pristup u realnom vremenu koji broji upotrebu. Jedan od slojeva u tom pogonu je mogućnost kupovine kredita. Kada korisnici premaše svoja ograničenja korištenja, krediti im omogućavaju da nastave koristiti naše proizvode trošeći svoj saldo kredita.
Ispod ovoga nalazi se složen sistem koji spaja ograničenja, praćenje upotrebe u stvarnom vremenu i kreditne bilanse u jedinstven model pristupa. Ova objava objašnjava zašto je skaliranje Codexa i Sore zahtijevalo preispitivanje kontrole pristupa, kako dokazivo ispravan sistem u realnom vremenu kombinuje ograničenja brzine i kredite po zahtjevu, te kako ta osnova sada omogućava dodatni pristup za oba proizvoda.
Ako se odmaknemo, tradicionalni modeli pristupa obično nameću izbor:
- Ograničenja brzine mogu biti korisna u početku, ali korisnicima ostavljaju loše iskustvo kada ih iscrpe: „vratite se kasnije“
- Naplata zasnovana na upotrebi je fleksibilna, ali korisnike ostavlja da plaćaju od prvog tokena—što nije idealno za podršku ranom istraživanju
Za Codex i Soru, nijedno nije bilo dovoljno samo po sebi. Ako bismo jednostavno povećali ograničenja brzine, izgubili bismo važne kontrole za ublažavanje potražnje i pravednost, te bismo ostali bez kapaciteta da uslužimo sve. Ako bismo se u potpunosti oslanjali na asinhronu naplatu po korištenju, uveli bismo kašnjenje, prekoračenja ili probleme s usklađivanjem—upravo one vrste problema koje korisnici primijete kada su najviše angažovani.
Umjesto toga, trebali smo jedan hibridni sistem koji kombinuje ograničenja u stvarnom vremenu s pristupom po principu pay-as-you-go:
Ovaj sistem je trebao:
- Primjenjujte ograničenja stope sve dok ne budu dostignuta
- Besprijekorno pređi na kredite unutar istog zahtjeva
- Donosi tu odluku u stvarnom vremenu
- Budi precizan i omogućite reviziju prilikom praćenja potrošnje kredita
Jedna od ključnih konceptualnih promjena koje smo napravili bila je modeliranje pristupa kao vodopada odluka. Umjesto da pitate „je li ovo dozvoljeno?”, pitamo „koliko je dozvoljeno, i odakle?” Kada broji korištenje, sistem prolazi kroz sljedeći redoslijed:
Ovaj model odražava kako korisnici zaista doživljavaju proizvod. Ograničenja brzine, besplatni nivoi, krediti, promocije i prava preduzeća su samo slojevi u istom steku odluka. Iz perspektive korisnika, oni ne 'mijenjaju sisteme'—samo nastavljaju koristiti Codex i Sora. Zato krediti djeluju neprimjetno: oni su samo još jedan element u vodopadu.
Evaluirali smo platforme trećih strana za naplatu i mjerenje upotrebe kako bismo upravljali potrošnjom kredita. Dobro su prilagođeni za fakturisanje i izvještavanje, ali nisu ispunili dva ključna zahtjeva:
Kada korisnik dostigne limit i ima dostupne kredite, sistem mora odmah biti obaviješten. Brojanje uz najbolji napor ili odgođeno brojanje pojavljuje se kao iznenađujući blokovi, nedosljedna stanja i netačne naplate. Za interaktivne proizvode kao što su Codex i Sora, ti neuspjesi postaju vidljivi i frustrirajući.
Trebali smo također osigurati transparentnost za svaki ishod:
- Zašto je zahtjev dozvoljen ili blokiran
- Koliko je potrošeno korištenja
- Koja su ograničenja ili ravnoteže primijenjene
Ova mogućnost je trebala biti čvrsto integrisana u našu kaskadu odlučivanja, umjesto da se rješava izolovano na zasebnoj platformi za naplatu po upotrebi koja je vidjela samo jedan dio onoga što se dešavalo. Da bismo korisnicima omogućili pristup našim proizvodima bez narušavanja povjerenja, trebali smo imati potpunu kontrolu nad ispravnošću, vremenom i praćenjem. To nas je gurnulo prema rješenju unutar kompanije.
Da bismo ovo omogućili, izgradili smo distribuirani sistem za praćenje upotrebe i stanja, osmišljen posebno za sinhrone odluke o pristupu.
Na visokom nivou, sistem:
- Prati korištenje po korisniku, po funkciji
- Održava prozore za ograničenje stope
- Održava stanja kredita u stvarnom vremenu
- Idempotentno terećenje stanja putem asinhronog procesora za streaming
Svaki zahtjev prolazi kroz jedinstvenu putanju evaluacije koja u stvarnom vremenu donosi odluku o tome koliko je korištenja dozvoljeno sinhronim trošenjem iz ograničenja brzine i, po potrebi, provjerom da li ima dovoljno kredita; zatim vraća konačan ishod, dok se sva terećenja kredita poravnavaju asinhrono. Ovo osigurava dosljedno ponašanje među proizvodima i uklanja dupliciranu logiku među timovima.
Jedan od ključnih principa dizajna ovog sistema je da moramo moći dokazati da je naše fakturisanje tačno. Ovo odražava korijene naše kreditne podrške, koja je nastala s poslovnim korisnicima. U gornjem dijagramu sistema imamo tri odvojena skupa podataka koji su međusobno povezani:
- Događaji korištenja proizvoda: Šta je korisnik zaista uradio
- Događaji monetizacije: Šta naplaćujemo korisniku za njegovo korištenje
- Ažuriranja stanja: Koliko smo prilagodili korisnički kreditni saldo i zašto
Ovi skupovi podataka nisu slučajni nusproizvodi; oni zapravo pokreću sistem, pri čemu svaki skup podataka aktivira sljedeći. Razdvajanje onoga što se dogodilo, svih povezanih troškova i onoga što smo zadužili omogućava nam da samostalno pregledamo, ponovimo i uskladimo svaki sloj. Ovo je namjeran kompromis gdje dajemo prioritet dokazivoj ispravnosti, po cijenu blagog kašnjenja ažuriranja stanja kredita. Kako smo ovo postigli:
- Događaji korištenja proizvoda objavljuju se za sve aktivnosti korisnika, bez obzira na to da li uzrokuju potrošnju kredita ili ne. Ovo omogućava praćenje aktivnosti korisnika i omogućava nam da objasnimo zašto smo naplatili ili nismo naplatili kredite.
- Svaki događaj nosi stabilan idempotencijski ključ, tako da ponovni pokušaji, ponovna izvođenja ili ponovna pokretanja radnika nikada ne mogu dvaput zadužiti saldo, čime se sprječava dvostruka naplata. Ovo nam također omogućava da pokrenemo grupno usklađivanje kako bismo provjerili naš rad offline.
- Radimo asinhrona (ali i dalje gotovo u stvarnom vremenu) ažuriranja stanja umjesto sinhronih kako bismo kreirali revizijski trag. Toleriramo malo kašnjenje u ažuriranju stanja korisnika kako bismo mogli dokazati da sistem funkcioniše i uvjerili korisnike da ih ne naplaćujemo pogrešno. Kada to kratko kašnjenje uzrokuje da prekoračimo korisnikov kreditni saldo, automatski ga vraćamo; dajemo prednost dokazivoj ispravnosti i povjerenju korisnika nad strogim provođenjem.
- Smanjujemo Credit Balance i unosimo zapis Balance Update u jednoj atomskoj transakciji baze podataka. Ažuriranja stanja se serijaliziraju po računu, tako da istovremeni zahtjevi nikada ne mogu istovremeno potrošiti iste kredite. Zapis Ažuriranje salda sadrži i iznos zaduženja kao i atribuciju na događaj monetizacije koji je pokrenuo ažuriranje; obuhvatanje ovoga u jednu transakciju baze podataka osigurava revizijski trag za svaku prilagodbu kreditnog salda.
Sva ova strogost ima jedan cilj: učiniti pristup jednostavnim i sigurnim. Kada ljudi stvaraju ili programiraju, ne bi trebali da se pitaju hoće li zahtjev proći, hoće li im biti previše naplaćeno ili je li njihov saldo tačan. Čineći korištenje, naplatu i stanja dokazivo tačnim, korisnicima pružamo sistem koji ne odvlači pažnju od njihovog iskustva. To je ono što nam omogućava da zamijenimo čvrste prekide kontinuiranim pristupom—i to je ono što čini kredite korisnim usred stvarnog rada, a ne samo na fakturi.
Vodeći princip našeg pristupa je zaštita korisničkog momentuma. Svaka arhitektonska odluka se povezuje s ishodom vidljivim korisniku: stanja u stvarnom vremenu sprečavaju nepotrebne prekide, atomska potrošnja sprječava dvostruko naplaćivanje, a objedinjena logika pristupa osigurava predvidljivo ponašanje. Rezultat je da ljudi mogu raditi duže, istraživati dublje i voditi projekte dalje bez suočavanja s naglim prekidima ili preuranjenim promjenama plana.
Kada su korisnici angažovani, sistem treba da im pomogne da nastave, a ne da im smeta. Ograničenja i krediti nestaju u pozadini.
Izgradnja tog iskustva zahtijevala je preispitivanje pristupa, upotrebe i naplate kao jedinstvenog sistema te izgradnju infrastrukture koja tretira ispravnost kao ključnu funkcionalnost proizvoda. Ista osnova može se s vremenom proširiti na više proizvoda; Codex i Sora su samo početak.


