Përtej kufizimeve të normës: zgjerimi i qasjes në Codex dhe Sora
Nga Jonah Cohen, Anëtar i stafit teknik
Gjatë vitit të kaluar, si Codex ashtu edhe Sora kanë përjetuar një adoptim të shpejtë, me përdorimin që u rrit shpejt përtej pritshmërive tona fillestare. Kemi vërejtur një model të qëndrueshëm: përdoruesit fillojnë të përdorin sistemin, gjejnë vlerë të vërtetë dhe më pas përballen me kufizimet e përdorimit.
Kufizimet e normës mund të ndihmojnë në zbutjen e kërkesës dhe të sigurojnë akses të drejtë; megjithatë, kur përdoruesit përfitojnë, përplasja me një ndalesë të rreptë mund të jetë zhgënjyese. Ne kërkonim një mënyrë që përdoruesit të vazhdonin, duke ruajtur performancën e sistemit dhe besimin e tyre në qasjen tonë.
Për ta zgjidhur këtë, ndërtuam një motor aksesi në kohë reale që numëron përdorimet. Një nga shtresat e atij motori është mundësia për të blerë kredite. Kur përdoruesit tejkalojnë kufijtë e tyre të normës, kreditët u mundësojnë atyre të vazhdojnë përdorimin e produkteve tona duke shpenzuar bilancin e krediteve të tyre.
Nën këtë gjendet një sistem kompleks që integron kufijtë, ndjekjen e përdorimit në kohë reale dhe balancat e krediteve në një model të vetëm aksesi. Ky postim shpjegon pse shkallëzimi i Codex dhe Sora kërkoi rishikimin e kontrollit të aksesit, si një sistem i saktë dhe i provuar në kohë reale kombinon kufijtë e normës dhe kreditet për kërkesë, dhe si kjo bazë tani mundëson qasje shtesë për të dy produktet.
Duke parë nga një perspektivë më e gjerë, modelet tradicionale të aksesit priren të detyrojnë një zgjedhje:
- Kufizimet e shpejtësisë mund të jenë të dobishme në fillim, por u japin përdoruesve një përvojë të keqe kur ato mbarojnë: “kthehuni më vonë”
- Faturimi i bazuar në përdorim është fleksibël, por i lë përdoruesit të paguajnë që nga tokeni i parë, nuk është ideal për të mbështetur eksplorimin e hershëm
Për Codex dhe Sora, asnjëri nuk ishte i mjaftueshëm vetë. Nëse thjesht do të rrisnim kufijtë e normës, do të humbnim kontrolle të rëndësishme për zbutjen e kërkesës dhe drejtësinë, dhe do të na mbaronte kapaciteti për t'u shërbyer të gjithëve. Nëse do të mbështeteshim plotësisht te faturimi asinkron i përdorimit, do të krijonim vonesa, mbingarkesa ose probleme të rakordimit, pikërisht ato lloje problemesh që përdoruesit i vënë re kur janë më të angazhuar.
Ajo që na nevojitej në vend të kësaj ishte një sistem i vetëm hibrid që kombinonte kufizimet në kohë reale me aksesin 'paguaj sipas përdorimit':
Ky sistem duhej:
- Zbatoni kufizimet e kuotës derisa të arrihen
- Kaloni në mënyrë të përsosur te kreditë brenda të njëjtës kërkesë
- Të merrte atë vendim në kohë reale
- Të ishte rigorozisht i saktë dhe i auditueshëm kur ndiqte konsumin e krediteve
Një nga ndryshimet kryesore konceptuale që bëmë ishte modelimi i aksesit si një proces vendimmarrjeje në formë ujëvare. Në vend që të pyesni “a lejohet kjo?”, ne pyesim “sa është e lejuar dhe nga ku?” Kur llogaritet përdorimi, sistemi ndjek sekuencën e mëposhtme:
Ky model pasqyron se si përdoruesit e përjetojnë vërtet produktin. Kufijtë e normave, nivelet falas, kreditet, promovimet dhe të drejtat e ndërmarrjes janë të gjitha thjesht shtresa në të njëjtën hierarki vendimmarrjeje. Nga këndvështrimi i një përdoruesi, ata nuk “ndërrojnë sisteme”, thjesht vazhdojnë të përdorin Codex dhe Sora. Prandaj kreditë duken të padukshme: ato janë thjesht një element tjetër në kaskadë.
Ne vlerësuam platformat e faturimit dhe matjes së përdorimit të palëve të treta për të menaxhuar konsumimin e krediteve. Ato janë të përshtatshme për faturim dhe raportim, por nuk plotësuan dy kërkesa kritike:
Kur një përdorues arrin një kufi dhe ka kredite të disponueshme, sistemi duhet të informohet menjëherë. Numërimi me përpjekje maksimale ose i vonuar shfaqet si bllokim i papritur, bilance të paqëndrueshme dhe tarifa të pasakta. Për produkte interaktive si Codex dhe Sora, ato dështime bëhen të dukshme dhe zhgënjyese.
Gjithashtu, na duhej të ofronim transparencë për çdo rezultat:
- Pse një kërkesë u lejua ose u bllokua
- Sa përdorim është konsumuar
- Cilat kufizime ose bilance janë aplikuar
Kjo aftësi duhej të integrohej ngushtë në procesin tonë të vendimmarrjes, në vend që të zgjidhej në izolim në një platformë të veçantë faturimi sipas përdorimit, e cila shihte vetëm një pjesë të asaj që po ndodhte. Për të lejuar përdoruesit të kenë akses në produktet tona pa cenuar besimin, na duhej kontroll i plotë mbi saktësinë, kohën dhe vëzhgueshmërinë. Kjo na shtyu drejt një zgjidhjeje të brendshme.
Për ta fuqizuar këtë, ndërtuam një sistem të shpërndarë për përdorim dhe bilanc, të projektuar posaçërisht për vendime sinkrone të aksesit.
Në një nivel të lartë, sistemi:
- Gjurmon përdorimin për çdo përdorues, për çdo veçori
- Mirëmban dritaret e kufizimit të kuotës
- Mban bilancet e kredive në kohë reale
- Debiton bilancet në mënyrë idempotente përmes një procesori asinkron të transmetimit.
Çdo kërkesë kalon nëpër një rrugë të vetme vlerësimi që merr një vendim në kohë reale për sa përdorim lejohet duke konsumuar në mënyrë sinkrone nga kufizimet e normës dhe, nëse është e nevojshme, duke verifikuar kredite të mjaftueshme; më pas kthen një rezultat përfundimtar të vetëm, ndërsa shlyen çdo debitim kreditesh në mënyrë asinkrone. Kjo siguron sjellje të qëndrueshme në të gjitha produktet dhe eliminon logjikën e dyfishtë në të gjitha ekipet.
Një nga parimet kryesore të dizajnit të këtij sistemi është që ne duhet të jemi në gjendje të vërtetojmë që faturimi ynë është i saktë. Kjo pasqyron rrënjët e mbështetjes sonë të kreditit, të cilat e kanë origjinën te klientët e ndërmarrjeve. Në diagramin e mësipërm të sistemit, kemi tre grupe të dhënash të veçanta që të gjitha lidhen së bashku:
- Ngjarjet e përdorimit të produktit: Çfarë bëri përdoruesi në të vërtetë
- Ngjarje monetizimi: Çfarë i faturojmë përdoruesit për përdorimin e tyre
- Përditësimet e bilancit: Sa e kemi ndryshuar bilancin e kredisë së përdoruesit dhe arsyet për këtë
Këto grupe të dhënash nuk janë një nënprodukt i rastësishëm; ato në fakt e drejtojnë sistemin, ku secili grup të dhënash nxit tjetrin. Ndarja e asaj që ndodhi, çdo tarife të lidhur dhe asaj që kemi debituar na lejon të auditojmë, të riprodhojmë dhe të rakordojmë në mënyrë të pavarur çdo shtresë. Ky është një kompromis i qëllimshëm ku ne po i japim përparësi korrektësisë së verifikueshme, me koston që përditësimet e bilancit të kredive të vonohen pak. Si e realizuam këtë:
- Ngjarjet e përdorimit të produktit publikohen për të gjithë aktivitetin e përdoruesit, pavarësisht nëse nxit konsumimin e krediteve apo jo. Kjo ofron një gjurmë auditimi për aktivitetin e përdoruesit dhe na lejon të shpjegojmë pse kemi tarifuar, ose nuk kemi tarifuar, kredite.
- Çdo ngjarje ka një çelës idempotence të qëndrueshëm, kështu që riprovimet, riluajtjet ose rindezjet e punëtorit nuk mund të debitojnë dy herë një bilanc, duke parandaluar kështu faturimin e dyfishtë. Kjo gjithashtu na lejon të kryejmë një rakordim në grup për të verifikuar punën tonë jashtë linje.
- Ne kryejmë përditësime asinkrone (por ende pothuajse në kohë reale) të bilancit në vend të përditësimeve sinkrone për të krijuar një gjurmë auditimi. Ne tolerojmë një vonesë të vogël në përditësimin e bilancit të përdoruesit për të provuar se sistemi funksionon dhe për të siguruar përdoruesit tanë se nuk po i faturojmë gabimisht. Kur ajo vonesë e shkurtër na bën të tejkalojmë bilancin e kreditit të një përdoruesi, ne e rimbursojmë automatikisht; ne zgjedhim saktësinë e provueshme dhe besimin e përdoruesit mbi zbatimin e rreptë.
- Ne ulim Bilancin e kreditit dhe fusim një regjistër Përditësimi i bilancit në një transaksion të vetëm atomik të bazës së të dhënave. Përditësimet e bilancit serializohen për çdo llogari, prandaj kërkesat e njëkohshme nuk mund të garojnë për të shpenzuar të njëjtat kredi. Regjistri Përditësimi i bilancit përmban si shumën e debitit ashtu edhe atribuimin te ngjarja e monetizimit që shkaktoi përditësimin; përfshirja e kësaj në një transaksion të vetëm të bazës së të dhënave garanton që kemi një gjurmë auditimi për çdo rregullim të bilancit të kredisë.
E gjitha kjo rreptësi mbështet një qëllim: të bëjë aksesin të thjeshtë dhe të sigurt. Kur njerëzit po krijojnë ose po kodojnë, ata nuk duhet të shqetësohen nëse një kërkesë do të kalojë, nëse do të faturohen më shumë, ose nëse bilanci i tyre është i saktë. Duke e bërë përdorimin, faturimin dhe bilancet të provueshme si të sakta, u ofrojmë përdoruesve një sistem që nuk i shpërqendron nga përvoja e tyre. Kjo na lejon të zëvendësojmë ndërprerjet e forta me akses të vazhdueshëm dhe bën që kreditët të jenë të përdorshme gjatë punës së vërtetë, jo vetëm në një faturë.
Parimi udhëheqës i qasjes sonë është mbrojtja e vrullit të përdoruesit. Çdo vendim arkitekturor lidhet me një rezultat të dukshëm për përdoruesin: balancat në kohë reale parandalojnë ndërprerjet e panevojshme, konsumimi atomik parandalon tarifimin e dyfishtë dhe logjika e unifikuar e aksesit siguron sjellje të parashikueshme. Rezultati është që njerëzit mund të punojnë më gjatë, të eksplorojnë më thellë dhe të çojnë projektet më tej pa u përballur me ndalesa të forta ose ndryshime të parakohshme të planit.
Kur përdoruesit janë të angazhuar, sistemi duhet t'i ndihmojë të vazhdojnë, jo t'i pengojë. Kufizimet dhe kreditet zhduken në sfond.
Ndërtimi i asaj përvoje kërkoi rishikimin e aksesit, përdorimit dhe faturimit si një sistem të vetëm dhe ndërtimin e infrastrukturës që e trajton saktësinë si një veçori kryesore të produktit. E njëjta bazë mund të zgjerohet me kalimin e kohës në më shumë produkte; Codex dhe Sora janë vetëm fillimi.


