Blog ·
Un export pe care îl poți verifica
Un export de date ca sarcină durabilă: un fișier temporar redenumit, un sha256 în chitanță, un jeton de unică folosință și un director în două roluri.
De Provibr
Articolul 20 din regulamentul european privind protecția datelor îi dă unei persoane dreptul de a-și primi datele. Pe o platformă de găzduire acela nu este un fișier mic. Un export de organizație citește vreo șaptezeci de secțiuni, fiecare mărginită la douăzeci și cinci de mii de rânduri, și durează minute în loc de milisecunde.
Până de curând al nostru se construia într-o acțiune de server: o cerere web asambla totul în memorie și îl întorcea ca un singur șir în răspuns. Asta merge până la contul la care nu mai merge, iar acel cont este tocmai cel care are cea mai mare nevoie de el.
Este o sarcină și există o singură cale
Un export este acum o operațiune durabilă cu patru etape: în coadă, colectare, împachetare, gata. Un lucrător din poartă îl ridică la fiecare treizeci de secunde, blochează un rând, construiește secțiunile, scrie fișierul și întoarce un jeton.
Patru numere țin tot ansamblul laolaltă, iar fiecare este o decizie și nu o valoare implicită.
| Limită | Valoare | De ce tocmai aceea |
|---|---|---|
| Rânduri pe secțiune | 25.000 | Peste atât este un raport și nu o cerere de acces, iar tăierea este numită în loc să fie ascunsă |
| Legătura de descărcare | 24 de ore | Destul cât să fie ridicată, prea puțin cât o legătură veche dintr-o cutie poștală să mai valoreze ceva |
| Fișierul de pe disc | 7 zile | Este o copie completă a tot ce păstrăm și nu trebuie să devină o arhivă |
| Urma a ceea ce s-a predat | 90 de zile | Dovada că un drept a fost exercitat supraviețuiește fișierului pe care l-a produs |
Vechea cale sincronă nu a rămas ca scurtătură pentru conturile mici, iar aceasta a fost o hotărâre chibzuită și nu lene.
Două căi înseamnă două adevăruri. Care dintre cele două rulează ar depinde de o estimare făcută dinainte, iar estimarea care contează aici este este contul acesta mic, adică exact ceea ce nu poți ști înainte de a fi numărat secțiunile. Dacă greșește, exportul cade pe calea unde nu există plasă.
Două căi înseamnă și două feluri de dovadă. Rândul de audit, chitanța cu o sumă de control înăuntru și lista secțiunilor trunchiate există numai pe calea sarcinii. Un export mic ar fi livrat în tăcere fără nimic din toate acestea, iar întrebarea ce am predat în martie ar primi un răspuns care depinde de cât de mare era contul atunci.
Prețul este un clic în plus, iar acel clic ar fi existat oricum: munca de durată își are locul în sertarul de sarcini, și acolo se află acum, cu o bară de progres în loc de un navigator care nu face nimic două minute.
Unde a trebuit să locuiască codul
Constructorii s-au mutat din aplicația web în pachetul care deține accesul la baza de date. Nu a fost o punere în ordine. Imaginea porții copiază poarta și pachetele comune și nu copiază directorul web, așa că un import care ajunge la web/lib compilează local și lipsește în producție. Este o graniță măsurată și nu o chestiune de stil.
Operațiunea de export poartă în plus tipul de resursă account, iar acesta este primul fără modul. Orice altă operațiune durabilă privește un server, un agent, o piesă de echipament sau o automatizare, iar fiecare dintre acestea cade sub un modul de drepturi care hotărăște cine o poate vedea. Un export de cont nu cade sub nimeni: setul de drepturi al unui membru poartă drepturi și nu identitate. Vizibilitatea se lămurește întrebând dacă cel care privește este cel care l-a cerut, iar canalul în direct răspunde nu pentru toți ceilalți.
Un fișier temporar, apoi o redenumire
Fișierul se scrie ca <nume>.part și apoi se redenumește la locul lui. O redenumire în cadrul aceluiași director este atomică, deci un cititor nu poate primi niciodată o jumătate de fișier, iar o jumătate de fișier este mai rea decât niciun fișier: poartă o sumă de control care nu iese și nimic care să spună de ce.
Suma de control este un sha256 al octeților și stă lângă mărime în chitanță. Aceasta este ceea ce face exportul verificabil în loc de doar livrat. Cine are fișierul peste un an poate încă arăta că este fișierul pe care l-am produs.
Directorul este un punct de montare atârnat în două containere: cu citire și scriere în poartă, care scrie, și numai cu citire în aplicația web, care livrează. Două procese, două roluri, un director.
Acea montare se uită ușor, iar uitarea ei produce un tablou de defecțiune foarte anume și foarte derutant. Sarcina spune gata. Descărcarea răspunde 410. Nimic din jurnal nu spune director greșit, fiindcă din punctul de vedere al fiecăruia dintre cele două procese totul a mers. De aceea codul avertizează o dată, cu voce tare, dacă directorul nu este configurat, iar rezerva este o cale de lângă depozit și nu directorul temporar al sistemului: un fișier de acolo dispare la o repornire, iar atunci un rând care spune gata de descărcat arată spre nimic.
Jetonul este de unică folosință, iar unica folosință este o singură instrucțiune
Legătura de descărcare poartă un jeton valabil douăzeci și patru de ore, în vreme ce fișierul însuși rămâne șapte zile.
Sunt necesare amândouă limitele. Numai unica folosință ar lăsa un jeton utilizabil luni de zile cât timp nimeni nu apasă pe el. Numai valabilitatea l-ar face refolosibil o zi de către oricine vede adresa: un jurnal de intermediar, un istoric de navigare, o cutie poștală comună. Cine ajunge târziu cere un export nou, iar asta costă un minut și dă o copie proaspătă și corectă în locul unei legături care zace o săptămână într-o poștă.
Zăvorul care impune cu adevărat folosința unică nu este marcajul de timp. Este o singură instrucțiune condiționată: actualizează rândul, pune ora descărcării, acolo unde ora descărcării este încă goală. Două cereri simultane cu același jeton ating împreună exact un rând, iar a doua primește zero. A verifica și apoi a scrie ar fi două instrucțiuni și deci două prilejuri de a se strecura cineva la mijloc.
Nici jetonul singur nu ajunge. Apelantul transmite persoana autentificată, iar aceea trebuie să fie cea care a cerut exportul, motiv pentru care acea rută rulează sub regula de sesiune și nu sub cea a jetoanelor. Iar verificarea proprietății vine înaintea oricărei alte respingeri: cine nu ar trebui să aibă jetonul nu are voie să afle din el nici dacă exportul a expirat, nici dacă a fost deja ridicat.
Șapte zile pentru fișier sunt scurte dinadins. Fișierul este o copie completă a tot ce păstrăm despre o persoană sau o organizație, iar cât timp există el este un al doilea loc unde stă totul. O copie de siguranță îl ia cu ea, iar lista permisă grijulie care hotărăște ce intră într-un export și-a făcut treaba în clipa scrierii fișierului și după aceea nu mai apără nimic. Nu este nicidecum un termen de păstrare a datelor înseși, care stau în baza de date cu regulile lor. Este termenul unei copii.
Trunchierea este o verificare deschisă și nu o notă de subsol
Fiecare secțiune se oprește la douăzeci și cinci de mii de rânduri. O secțiune care a atins acel plafon este numită în plic și apare în chitanță drept verificare deschisă: ceva la care cititorul se cuvine să reacționeze, alături de rezultat și nu îngropat în el. Un export care s-ar opri în tăcere la plafon ar fi un răspuns la o cerere de acces incomplet fără să o spună, iar asta este mai rău decât un refuz.
Măsurat cu un cont care purta douăzeci și cinci de mii și cinci rânduri într-o secțiune: secțiunea a fost trunchiată, verificarea deschisă a apărut, iar o a doua încercare pe aceeași legătură a răspuns 410.
Un tabel lăsat afară dinadins, cu motivul alături
Nu intră totul, iar lista celor rămase afară poartă o justificare scrisă pentru fiecare tabel în loc de o frază de politică pusă în frunte.
Cel mai limpede exemplu este registrul de consum al monitorizării. Acolo stau trei tabele: gălețile orare, rândul de limite și rândul pentru fiecare verificare trimisă de dedesubt. Primele două intră, fiindcă ceea ce vrea să afle o cerere de acces este cât s-a măsurat pentru mine și la ce avea dreptul contul meu, iar exact asta spun acele două. Al treilea înseamnă sute de mii de rânduri pe lună cu aceleași totaluri și este administrația trimiterii noastre în loc de ceva ce a introdus clientela.
Acel raționament poartă o dată. Dacă acel registru va sprijini vreodată un rând de factură, omiterea trebuie cântărită din nou, fiindcă rândul de dovadă din spatele unei înregistrări este alt fel de dată decât un jurnal de expediere. A scrie asta lângă excepție este deosebirea dintre o hotărâre și un obicei.
Alte două tabele rămân afară din același motiv: administrația pe fiecare încercare sub o măsurătoare datorată și ticurile de planificare însele. Amândouă spun ceva despre felul în care am executat noi și nimic despre persoana care întreabă.
Cum arată din afară
Cineva își cere datele. În sertarul de sarcini apare o fișă cu o bară de progres. Câteva minute mai târziu există o înștiințare, o legătură de descărcare care merge o singură dată și o chitanță care numește mărimea, suma de control și tot ce a fost tăiat. Șapte zile mai târziu fișierul nu mai este, iar urma a ceea ce s-a predat rămâne nouăzeci de zile.
Nimic din toate acestea nu este remarcabil, iar acesta este rostul. Remarcabil este ceea ce lipsește: nicio cale pe care aceeași cerere să producă alt fel de dovadă, niciun fișier care să poată fi citit cât timp este scris pe jumătate și nicio legătură care să meargă mai departe după ce a fost folosită.
Din munca de platformă a Provibr. De ce vederea operațiunilor citește rânduri existente și nu scrie niciodată înapoi se află în a proiecta, niciodată a înlocui, iar de ce o bară de progres refuză aici să prezică un final se află în o bară de progres care refuză să ghicească.