Arhitectura datelor și a sistemelor, de la zero Lecția 40 / 80

Caz real: cum rulează Netflix batch zilnic pe petabyți

Orchestratorul Maestro, adoptarea Iceberg, straturile de optimizare a costurilor care fac batch-ul zilnic pe petabyți să funcționeze.

Modulul 5 se încheie așa cum s-a încheiat Modulul 4: cu o singură companie, un singur deceniu și postări inginerești publice care fac abstracțiunile concrete. Cazul Discord din lecția 32 a fost un singur workload rulând pe trei baze de date pe parcursul a zece ani. Cazul Netflix este structural diferit. Platforma de batch a Netflix nu este un singur workload; este o platformă pe care mii de joburi și zeci de echipe rulează zilnic, pe sute de petabyți de date. Partea interesantă nu este modelul de date. Este platforma în sine: orchestratorul, formatul de tabel și straturile de optimizare a costurilor care fac batch-ul zilnic la această scară posibil din punct de vedere economic.

Trei piese ale arhitecturii sunt suficient de publice ca să le parcurgem. Maestro este orchestratorul. Apache Iceberg, pe care Netflix l-a inventat și open-source-uit, este formatul de tabel. Iar un set stratificat de tehnici (spot instances, autoscaling, caching, compactare) ține factura sub control. Lecțiile contează mai mult decât uneltele specifice.

Scara

Cifre din postări publice și prezentări la conferințe, valabile în 2024 până în 2025. Platforma de date a Netflix stochează sute de petabyți pe Amazon S3, în tabele Iceberg, acoperind telemetrie de vizionare, metadate de conținut, date de antrenament pentru recomandări, rezultate de A/B test, date financiare, telemetrie pentru nivelul cu reclame și log-uri operaționale ale infrastructurii de streaming.

Deasupra acestui storage, Netflix rulează multe mii de joburi batch pe zi în Spark, Trino, Flink și workflow-uri SQL. Aproximativ trei mii de oameni din interiorul companiei interacționează regulat cu platforma. Platforma este multi-tenant, cu workload-uri foarte diferite și sensibilități diferite la latență, cost și fiabilitate.

Cheltuielile anuale ale platformei de date sunt în zona sutelor de milioane de dolari. Proiecte individuale de reducere a costurilor au economisit zeci de milioane fiecare. La această scară, o îmbunătățire de un procent în eficiență înseamnă echivalentul unui număr real de ingineri. Optimizarea costurilor nu este un proiect secundar; este o disciplină.

Maestro: orchestratorul

Orice platformă de batch are nevoie de un orchestrator. Airflow, Prefect, Dagster, Argo, Temporal și alte câteva nume mai mici acoperă spațiul open-source. Pentru majoritatea echipelor răspunsul corect este să aleagă unul de pe raft. Netflix nu a făcut asta.

Înainte de Maestro, Netflix rula un sistem propriu numit Meson, deasupra Genie, iar înainte de asta o serie de unelte interne. Spre sfârșitul anilor 2010, Meson dădea semne de oboseală: modelul de definire a workflow-urilor era greu de compus la scară, scheduler-ul avea probleme de performanță la mii de rulări concurente, iar povestea multi-tenancy crescuse organic, nu prin design.

Maestro, anunțat și open-source-uit în 2024 în postarea de pe Netflix Tech Blog „Maestro: Netflix’s Workflow Orchestrator” (https://netflixtechblog.com/maestro-netflixs-workflow-orchestrator-ee13a06f9c78, consultat 2026-05-01), este rescrierea. Trei proprietăți ies în evidență.

Compoziția workflow-urilor. Maestro modelează workflow-urile ca DAG-uri de pași, cu compoziție de prim rang a workflow-urilor din alte workflow-uri. Când multe echipe împart o platformă, blocurile reutilizabile trebuie să se compună fără copy-paste și să fie versionate pe măsură ce autorii lor le evoluează. Orchestratoarele de pe raft tratează asta cu eleganță variabilă; la scara Netflix eleganța este structurală.

Multi-tenancy și izolare. O singură instanță Maestro rulează workflow-uri pentru multe echipe cu priorități diferite. Este construită să programeze echitabil, să izoleze vecinii zgomotoși și să aplice cote per echipă fără un deployment separat per echipă. Genul de proprietate care e invizibilă până când ai nevoie de ea, iar apoi devine întregul motiv pentru care există sistemul.

Scara scheduler-ului. Sute de mii de rulări de workflow pe zi, pe un strat de scheduling stateless cu un store durabil de stare și un design event-driven. Airflow la această scară necesită tuning atent și meta-scheduling; Maestro este inginerit pentru asta de la început.

Citirea onestă: Netflix a construit Maestro pentru că opțiunile de pe raft nu se potriveau cu scara, multi-tenancy-ul și cultura lor specifice. Un motiv defendabil care nu se generalizează. Majoritatea echipelor ar trebui să aleagă Airflow, Prefect sau Dagster, să le configureze bine și să-și pună efortul ingineresc în date. Povestea Maestro e aici ca să ilustreze calculul, nu concluzia. Build-versus-buy la stratul de platformă este o decizie reală, iar pragul la care „build” câștigă este mult mai sus decât cred majoritatea echipelor.

Iceberg: formatul de tabel

Apache Iceberg a început la Netflix. Ryan Blue și Daniel Weeks, ingineri Netflix la acea vreme, l-au proiectat în 2017 ca să rezolve o problemă pe care o avea oricine rula Hive la scara de petabyți: abordarea Hive metastore pentru metadatele tabelelor se rupea. Prezentarea de la Strata 2018 și postările ulterioare de pe Netflix Tech Blog descriu modurile de eșec în detaliu. Documentația oficială de la https://iceberg.apache.org/ (consultat 2026-05-01) acoperă originea și formatul.

Problemele majore cu Hive la scară, în experiența Netflix:

Lipsa scrierilor atomice. Un tabel Hive este „mulțimea de fișiere din acest prefix S3 care se potrivesc cu acest pattern de partiționare”. Un writer care adaugă fișiere și un reader care listează fișiere intră în race condition unul cu altul. La scară mică e invizibil; la scară de petabyți, race condition-ul produce citiri parțiale, rânduri pierdute și query-uri care întorc răspunsuri diferite în funcție de când au fost rulate. Soluția Hive era convenții și disciplină; Netflix avea nevoie de corectitudine.

Lipsa unei evoluții funcționale a schemei. Redenumirea unei coloane sau schimbarea unui tip într-un tabel Hive era un exercițiu manual care strica adesea reader-ele mai vechi, mai ales când formatul de fișier avea propriile opinii (numele coloanelor în Parquet, scheme Avro). Netflix avea mii de tabele și sute de writer-i; abordarea manuală nu scala.

Operații lente pe metadate. Listarea partițiilor unui tabel Hive mare necesita listarea S3, care la scara Netflix era lentă și scumpă. Planificarea de query-uri care avea nevoie de partition pruning era blocată pe listare.

Iceberg face din tabel însuși un obiect structurat: fișiere de date imutabile, plus un arbore de metadate (manifest lists, manifests, snapshot-uri) care înregistrează exact ce fișiere aparțin tabelului în fiecare moment. Scrierile produc snapshot-uri noi atomic. Evoluția schemei este înregistrată în metadate, așa că reader-ele vechi și noi văd vederi consistente. Planificarea de query-uri citește metadate, nu listări S3, și este rapidă indiferent de dimensiunea tabelului.

Adoptarea de către Netflix a fost mai întâi internă (migrând petabyți de tabele Hive pe parcursul mai multor ani), apoi externă (donând proiectul către Apache Software Foundation în 2018, preluat de Snowflake, Databricks, AWS și Google).

Această poveste contează pentru Modulul 5 ca cel mai curat exemplu de „alegerile de format contează la scară”. Hive a funcționat pentru Netflix ani de zile; durerea care a împins investiția în Iceberg era operațională și vizibilă doar la scara de petabyți. După ce Netflix a rezolvat-o, industria a moștenit soluția. Netflix a fost explicit, în prezentări, că adoptarea largă este o victorie strategică, nu o pierdere competitivă: mai multe unelte, mai multe bug fix-uri, mai multă interoperabilitate, mai mulți ingineri care cunosc deja formatul.

Straturile de optimizare a costurilor

Optimizarea costurilor este al treilea pilon al platformei, alături de orchestrator și formatul de tabel. Postările publicate acoperă mai multe tehnici care apar și la scări mai mici.

Spot instances și autoscaling. Netflix rulează masa workload-urilor Spark pe capacitate AWS Spot, care este aproximativ 60 până la 90 la sută mai ieftină decât on-demand, cu costul de a fi întreruptibilă. Spark se pretează bine la spot pentru că task-urile sunt mici și rerulabile, iar scheduler-ul tolerează pierderea de executor-i în mijlocul unei rulări. Stratul de autoscaling adaugă și elimină capacitate dinamic în funcție de coada de joburi pendinte, așa că clusterele nu stau inactive peste noapte și nu rulează la limită în vârful de dimineață.

Compactarea Iceberg. Scrierile de tip streaming și actualizările batch frecvente produc multe fișiere mici în tabelele Iceberg, ceea ce afectează performanța query-urilor (mai multe file open-uri, mai multe metadate, scanări de coloane mai puțin eficiente). Compactarea rescrie periodic fișierele mici în unele mai mari. La scara Netflix asta este în sine un workload batch semnificativ, rulat de echipa de platformă în numele tuturor tenanților. Costul compactării este real; costul necompactării este mai mare.

Caching de rezultate de query. Versionarea bazată pe snapshot-uri din Iceberg face din întrebarea „s-au schimbat datele” o întrebare ieftină (compari snapshot ID-ul), așa că invalidarea cache-ului este precisă, nu bazată pe timp. Un dashboard care rulează același query la fiecare cinci minute poate să lovească cache-ul ore întregi dacă datele de bază sunt reconstruite peste noapte.

Routing inteligent între engine-uri. Spark pentru ETL greu, Trino pentru analitică interactivă, Flink pentru streaming. Caracteristicile de cost diferă, iar rutarea unui query către engine-ul potrivit este în sine o optimizare. Iceberg ca strat unificat de tabele permite ca alegerea engine-ului să se facă per-query.

Cifrele sunt publice dar vagi (Netflix nu publică factura AWS), dar prezentările la conferințe includ afirmații precum „această inițiativă a economisit zeci de milioane pe an” pentru proiecte individuale. Ordinea de mărime e ce contează: la scara de petabyți, un câștig de un procent în eficiență pe o cheltuială de o sută de milioane plătește pentru inginerii care au construit optimizarea de mai multe ori.

Arhitectura, într-o singură diagramă

flowchart LR
    subgraph Storage[Storage layer]
      S3[(S3)]
      ICE[Iceberg metadata]
      S3 --- ICE
    end
    subgraph Compute[Compute engines]
      SP[Spark]
      TR[Trino]
      FL[Flink]
    end
    subgraph Orch[Orchestration]
      M[Maestro]
    end
    subgraph Cost[Cost layers]
      SPOT[Spot autoscaling]
      COMP[Compaction]
      CACHE[Result caching]
    end
    subgraph Consumers[Consumers]
      BI[BI and dashboards]
      ML[ML training]
      BIZ[Business and finance]
    end
    ICE --> SP
    ICE --> TR
    ICE --> FL
    M --> SP
    M --> TR
    M --> FL
    SPOT --> SP
    COMP --> ICE
    CACHE --> TR
    SP --> Consumers
    TR --> Consumers
    FL --> Consumers

Diagram to create: a more visually polished version of the Mermaid diagram above, with the storage layer at the bottom, the compute engines in the middle, orchestration on the left feeding into compute, the cost-optimization layers as horizontal bands cutting across compute and storage, and the consumers on the right. The point of the diagram is to show that the platform is layered: storage is the floor, compute is the middle, orchestration drives compute, cost layers cut horizontally, consumers sit on top.

Iceberg-pe-S3 este podeaua pe care totul citește și scrie. Spark, Trino și Flink sunt engine-urile. Maestro le programează. Straturile de cost taie orizontal. Consumatorii (BI, ML, raportare de business) stau deasupra.

Ce ne învață călătoria

Cinci lecții, aproximativ în ordinea în care Netflix le-a întâlnit.

Construiește-ți propriul orchestrator doar când cele standard chiar nu se potrivesc. Maestro există pentru că Airflow și Prefect, la scara și cultura Netflix, nu erau potrivirea corectă. Acel calcul este real și este greșit pentru aproape orice altă echipă. Pragul pentru „construiește-ți propria unealtă de platformă” este mai sus decât estimează majoritatea echipelor de inginerie, iar costul de a greși (ani de datorie de platformă, dificultate la angajare, o unealtă pe care nu o cunoaște nimeni din afara companiei) este mare. Alege orchestratorul de pe raft, configurează-l bine și pune efortul ingineresc în date.

Alegerile de format contează la scară, în moduri invizibile la scară mică. Hive a funcționat pentru Netflix ani de zile. Durerea care a împins Iceberg era operațională și vizibilă doar la scara de petabyți. Dacă rulezi un warehouse de o sută de tabele pe Snowflake sau BigQuery, întrebarea de format este deja răspunsă pentru tine. Dacă rulezi un open lakehouse cu mii de tabele, întrebarea de format este cea mai consecventă alegere arhitecturală pe platformă, iar Iceberg (sau Delta sau Hudi) este cum arată răspunsul în 2026. Lecția 37 a acoperit peisajul.

Optimizarea costurilor este propria sa disciplină. La scara de petabyți, chiar și procente mici de risipă înseamnă milioane de dolari pe an. Are nevoie de ingineri dedicați, de tooling dedicat (dashboards de cost per workload, per tabel, per echipă) și de o cultură care tratează eficiența ca pe o valoare de inginerie de prim rang, nu ca pe ceva pe care echipa de finanțe îl urmărește. Modulul 9 acoperă pattern-urile în detaliu. Povestea Netflix e dovada că tehnicile (spot, autoscaling, caching, compactare) sunt aplicabile la scări mult mai mici decât a Netflix.

Contribuțiile open-source întăresc platforma. Adoptarea Iceberg de către Snowflake, Databricks, AWS și Google este cel mai bun lucru care s-a întâmplat platformei de date a Netflix în ultimii cinci ani. Mai multe unelte, mai multe bug fix-uri, mai mulți ingineri care cunosc formatul când Netflix îi angajează. Principiul se generalizează: open-source-area componentelor de platformă este adesea cel mai ieftin mod de a le face durabile.

Platforma este produsul. Pentru inginerii de date de la Netflix, platforma este lucrul pe care îl construiesc, deliberat, cu aceeași grijă pe care ai pune-o într-un produs orientat spre client. Inginerii de date și data scientists sunt clienții, iar treaba echipei de platformă este să facă munca lor rapidă, corectă, ieftină și plăcută. Acest cadru supraviețuiește decalajului de scară. Chiar și o echipă de date de cinci oameni are clienți interni; tratarea platformei ca pe un produs schimbă munca.

Ce înseamnă asta pentru sisteme care nu sunt Netflix

Dacă rulezi un warehouse Snowflake sau BigQuery cu câțiva terabyți și o mână de modele dbt, lecțiile relevante sunt meta-lecțiile, nu „folosește Iceberg”.

Alege un orchestrator de pe raft și revizitează alegerea doar când chiar nu mai face față. Majoritatea echipelor nu ajung niciodată acolo. Alege un format de tabel cu care poți trăi cinci ani; dacă warehouse-ul tău îl gestionează, alegerea este făcută. Construiește un dashboard de cost devreme: obiceiurile pe care le construiești la un terabyte sunt obiceiurile de care ai nevoie la un petabyte. Tratează-ți platforma de date ca pe un produs cu clienți interni, cea mai ieftină dintre lecții de adoptat și cea cu cea mai mare pârghie. Decalajul de scară nu schimbă principiul; schimbă doar dimensiunea echipei care îl aplică.

Modulul 5 se închide aici

Modulul 5 a parcurs stack-ul modern de date batch: ETL versus ELT (lecția 33), Hadoop și MapReduce (lecția 34), Spark și engine-urile care au înlocuit MapReduce (lecția 35), istoria data lake-ului și a warehouse-ului (lecția 36), lakehouse-ul și formatele deschise de tabel (lecția 37), joburile batch idempotente (lecția 38), backfilling și replay (lecția 39), iar acum studiul de caz Netflix care exersează toate astea la scara de petabyți.

Pattern-urile se transferă; scara nu. O echipă care rulează un warehouse de o sută de gigabyți și o echipă care rulează un lakehouse de o sută de petabyți folosesc același vocabular, aceleași diagrame, aceleași playbook-uri. Diferența este în constante, nu în formă.

Modulul 6 începe cu streaming. Datele nu mai sunt în repaus. Jobul nu se mai termină. Compromisurile sunt diferite, dar fundația din Modulul 5 este ce citește și scrie procesarea de stream.

Citări și lecturi suplimentare

  • Netflix Tech Blog, „Maestro: Netflix’s Workflow Orchestrator”, 2024, https://netflixtechblog.com/maestro-netflixs-workflow-orchestrator-ee13a06f9c78 (consultat 2026-05-01). Anunțul de open-source-are și prezentarea arhitecturală a Maestro.
  • Netflix Tech Blog, postări despre Apache Iceberg și platforma de date Netflix, indexate la https://netflixtechblog.com/ sub tag-urile „Iceberg” și „data platform” (consultat 2026-05-01). Seria acoperă originea Iceberg, migrarea de la Hive și componentele de platformă construite deasupra.
  • Documentația Apache Iceberg, https://iceberg.apache.org/ (consultat 2026-05-01). Referința canonică pentru format, modelul de metadate și ghidul operațional pentru compactare și expirarea snapshot-urilor.
  • Ryan Blue, „Iceberg: a fast table format for S3”, Strata Data Conference, 2018. Prezentarea care a introdus Iceberg comunității mai largi, cu modurile de eșec ale Hive la scara Netflix descrise în detaliu.
  • „Designing Data-Intensive Applications” (Martin Kleppmann, O’Reilly, 2017), capitolele 10 și 11. Referința standard pentru procesarea batch și stream, față de care arhitectura Netflix este o instanțiere concretă.
Caută