Надвор од ограничувањата: скалирање на пристапот до Codex и Sora
Од Џона Коен, член на техничкиот персонал
Во изминатата година, и Codex и Sora беа брзо прифатени, при што нивната употреба брзо ги надмина нашите првични очекувања. Забележавме исто однесување: корисниците се вклучуваат, наоѓаат вистинска вредност, а потоа се соочуваат со ограничувања.
Ограничувањата може да помогнат да се израмни побарувачката и да се обезбеди правичен пристап; меѓутоа, кога корисниците добиваат вредност, целосното запирање на употребата може да биде фрустрирачко. Сакавме корисниците да можат да продолжат да креираат, додека ги заштитуваме перформансите на системот и довербата на корисниците во нашиот пристап.
За да го решиме ова, изградивме систем за пристап во реално време што ја брои употребата. Еден од слоевите во тој механизам е можноста за купување кредити. Кога корисниците ќе ги надминат нивните ограничувања, кредитите им овозможуваат да продолжат да ги користат нашите производи со трошење на нивното кредитно салдо.
Под ова се наоѓа сложен систем што ги обединува ограничувањата, следењето на употребата во реално време и кредитните салда во единствен модел на пристап. Оваа објава објаснува зошто скалирањето на Codex и Sora бараше преиспитување на контролата на пристап, како докажливо точен систем во реално време ги комбинира ограничувањата на брзината и кредитите по барање, и како таа основа сега овозможува дополнителен пристап за двата производи.
Ако се погледне пошироко, традиционалните модели на пристап обично наметнуваат избор:
- Ограничувањата може да бидат корисни на почетокот, но им оставаат на корисниците лошо искуство кога ќе ги достигнат: „врати се подоцна“
- Наплатата базирана на употреба е флексибилна, но ги остава корисниците да плаќаат од првиот токен—што не е идеално за поддршка на почетното истражување
За Codex и Sora, ниту едниот не беше доволен сам по себе. Ако едноставно ги зголемевме ограничувањата, ќе ги изгубевме важните контроли за измазнување на побарувачката и за правичност и ќе останевме без капацитет да ги услужиме сите. Ако целосно се потпиравме на асинхрона наплата според користење, ќе создадевме доцнење, прекумерни трошоци или проблеми со усогласување—токму оние проблеми што корисниците ги забележуваат кога се најангажирани.
Наместо тоа, ни беше потребен единствен хибриден систем кој ги комбинира ограничувањата во реално време со пристапот со плаќање според употреба:
Овој систем требаше:
- Применувај ограничувања сè додека не се достигнат
- Беспрекорно премини на кредити во рамките на истото барање
- да ја донесе таа одлука во реално време
- да биде прецизен и да може да се ревидира при следење на потрошувачката на кредити
Една од клучните концептуални промени што ги воведовме беше моделирањето на пристапот како водопад на одлуки. Наместо да прашуваме „дали е ова дозволено?“, прашуваме „колку е дозволено, и од каде?“ Кога се брои употребата, системот го следи следниов редослед:
Овој модел го прикажува начинот на кој корисниците навистина го доживуваат производот. Ограничувањата на брзината, бесплатните нивоа, кредитите, промоциите и корпоративните права се само слоеви во истиот слој на одлуки. Од гледиште на корисникот, тие не „менуваат системи“—туку само продолжуваат да ги користат Codex и Sora. Затоа кредитите изгледаат невидливи: тие се само уште еден елемент во низата.
Ги евалуиравме платформите за наплата и мерење на употреба од трети страни за да управуваме со потрошувачката на кредити. Тие се добро прилагодени за фактурирање и известување, но не исполнија две критични барања:
Кога корисникот ќе достигне ограничување и има достапни кредити, системот мора веднаш да биде информиран. Броењето со најдобар напор или одложеното броење може да резултира со неочекувани блокирања, неконзистентни салда и неточни наплати. Кај интерактивни производи, како Codex и Sora, тие неуспеси стануваат очигледни и фрустрирачки.
Исто така, требаше да обезбедиме транспарентност за секој исход:
- Зошто е дозволено или блокирано барањето
- Колку е искористено
- Кои ограничувања или рамнотежи беа применети
Оваа способност требаше да биде цврсто интегрирана во нашиот процес на донесување одлуки, наместо да се решава изолирано во посебна платформа за наплата според користење која гледаше само еден дел од случувањата. За да им овозможиме на корисниците пристап до нашите производи без да ја нарушиме довербата, ни беше потребна целосна контрола врз точноста, навременоста и набљудливоста. Тоа нè поттикна да бараме решение внатре во компанијата.
За да го овозможиме ова, изградивме систем за дистрибуирана употреба и баланс, специјално дизајниран за синхрони одлуки за пристап.
На високо ниво, системот:
- следи користење по корисник и по функција
- одржува периоди за ограничување
- одржува салда на кредит во реално време
- идемпотентно ги задолжува салдата преку асинхрон процесор за стриминг
Секое барање поминува низ единствена патека за евалуација која во реално време одлучува колку употреба е дозволена, синхроно трошејќи од ограничувањата и, доколку е потребно, проверувајќи дали има доволно кредити; потоа враќа еден конечен исход, додека асинхроно ги порамнува сите задолжувања на кредити. Ова обезбедува доследно однесување во сите производи и ја елиминира дуплираната логика во сите тимови.
Еден од клучните принципи на дизајнот на овој систем е дека мора да можеме да докажеме дека нашата наплата е точна. Ова ги одразува корените на нашата поддршка за кредити, која потекнува од претприемничките клиенти. Во горенаведениот дијаграм на системот, имаме три одделни збирки на податоци кои сите се поврзуваат заедно:
- Настани со користење на производот: Што точно направи корисникот
- Настани со монетизација: Што му наплаќаме на корисникот за неговата употреба
- Ажурирања на салдо: Колку го приспособивме кредитното салдо на корисникот и зошто
Овие збирки на податоци не се случаен нуспроизвод; тие всушност го движат системот, при што секоја збирка на податоци ја поттикнува следната. Раздвојувањето на тоа што се случило, сите поврзани трошоци и она што го задолживме ни овозможува независно да го ревидираме, повторно да го извршиме и да го усогласиме секој слој. Ова е намерен компромис каде што даваме приоритет на докажлива точност, по цена на тоа што ажурирањата на кредитното салдо се малку одложени. Како го постигнавме ова:
- Настаните со користење на производот се објавуваат за секоја активност на корисниците, без разлика дали тоа предизвикува потрошувачка на кредити или не. Ова обезбедува ревизорска трага за активноста на корисниците и ни овозможува да објасниме зошто сме наплатиле или не сме наплатиле кредити.
- Секој настан има стабилен клуч за идемпотентност, така што повторните обиди, репродукциите или рестартирањата на работникот никогаш не можат да предизвикаат двојно задолжување на салдото, што спречува двојно наплаќање. Ова исто така ни овозможува да извршиме серија на усогласувања за да ја провериме нашата работа офлајн.
- Наместо синхрони ажурирања, вршиме асинхрони ажурирања (но сепак речиси во реално време) на салдото за да создадеме ревизорска трага. Толерираме мало доцнење при ажурирањето на салдото на корисникот за да можеме да докажеме дека системот функционира и да ги увериме нашите корисници дека не наплаќаме погрешно. Кога тоа кратко доцнење ќе нè натера да ја надминеме кредитната состојба на корисникот, автоматски ја рефундираме; избираме докажлива точност и доверба на корисниците пред строго спроведување.
- Го намалуваме Кредитното салдо и внесуваме запис за Ажурирање на салдото во една атомска трансакција на базата на податоци. Ажурирањата на салдото се поставуваат во серија по сметка, така што истовремените барања никогаш не може да ги трошат истите кредити. Записот Ажурирања на салдо содржи и износ на задолжување и атрибуција до настанот за монетизација што го предизвикал ажурирањето; ова е обвиено во единствена трансакција на базата на податоци, што гарантира ревизорска трага за секое прилагодување на кредитното салдо.
Целата оваа ригорозност има една цел: да го направи пристапот едноставен и безбеден. Кога луѓето создаваат или кодираат, не треба да се прашуваат дали барањето ќе биде прифатено, дали ќе им биде наплатено премногу или дали нивното салдо е точно. Со тоа што користењето, наплатата и салдата ги правиме докажливо точни, им овозможуваме на корисниците систем што не им го одвлекува вниманието од нивното доживување. Тоа е она што ни овозможува да ги замениме прекините со континуиран пристап—и тоа е она што ги прави кредитите употребливи среде реалната работа, а не само на фактура.
Водечкиот принцип на нашиот пристап е заштита на моментумот на корисниците. Секоја архитектонска одлука се поврзува со исход што е видлив за корисникот: салдата во реално време спречуваат непотребни прекини, атомската потрошувачка спречува двојна наплата, а унифицираната логика за пристап обезбедува предвидливо однесување. Резултатот е дека луѓето можат да работат подолго, да истражуваат подлабоко и да ги продолжат проектите понатаму без да се соочат со строги застои или предвремени промени на плановите.
Кога корисниците се ангажирани, системот треба да им помогне да продолжат, а не да им пречи. Ограничувањата и кредитите исчезнуваат во заднина.
Создавањето на тоа доживување бараше преиспитување на пристапот, користењето и наплатата како единствен систем и изградба на инфраструктура што ја третира точноста како врвна карактеристика на производот. Истата основа може да се прошири на повеќе производи со текот на времето; Codex и Sora се само почеток.


