Batch vs Stream: Երբ որ
Ինչու՞ ընդհանրապես ընտրել
Տվյալների ցանկացած համակարգ հավասարակշռում է թարմության (latency), արժեքի, աջակցության բարդության և վստահության միջև։
Batch-ը տվյալների պարբերական «հատվածներ» է, որոնք ունեն բարձր հզորություն և ցածր արժեքը ձայնագրման համար։
Stream-ը իրադարձությունների շարունակական մշակում է նվազագույն ուշացումով և հիշողության/տեղական։
Կարճ մոդելների մասին
Batch
Աղբյուրը 'ֆայլեր/սեղաններ/դիպուկահարներ։
Տրիգեր ՝ 108 (ժամ/օր) կամ պայման (նոր պարկեթ ֆայլ)։
Ուժեղ կողմեր ՝ պարզություն, դետերմինիզմ, տվյալների ամբողջական ենթատեքստը, էժան մեծ վերափոխումները։
Թույլ 'ոչ «առցանց», բարձր լատենտ, «պատուհաններ» առանց իրական ժամանակի ազդանշանների։
Stream
Աղբյուրը ՝ բրոքերներ (Kafka/NATS/Pulsar), CDC, հերթեր։
Թրիգեր 'իրադարձություն։
Ուժեղ 'ցածր ուշացում, ռեակտիվություն, բնական ինտեգրում ապրանքների հետ։
Թույլ 'ժամանակի բարդությունը (event vs processing), կարգը/դուբլի, վիճակը, վիրահատությունը։
Լուծում 'ընտրության մատրիցա
Կանոն 80/20: եթե SLA-ն թույլ է տալիս րոպեի/ժամացույցի ձգձգումներ և ոչ ռեակտիվ ֆիչ, վերցրեք batch։ Եթե քննադատական է «այստեղ և հիմա» արձագանքը, կամ անհրաժեշտ են կենդանի վիտրիններ 'stream (հաճախ + լրացուցիչ գիշերային batch)։
Տիպիկ սցենարներ
Batch-ը, երբ ավելի լավ է
Ամենօրյա հաշվետվությունները, բիլինգը պարբերականներով, ML դասընթացը, մեծ ջոինները, դեդուպլիկացիան «բոլոր հավաքածուներով»։
Մեդալոն մոդելը (bultze/silver/gold) խորը վալիդացիաներով։
Զանգվածային բակտերիաները և վիտրինի փոխպատվաստումը։
Stream-ը, երբ ավելի լավ է
Անտիֆրոդ/2019, MSE ալտերտեր, real-time հավասարակշռություն/առաքելություն, առաջարկություններ «հիմա»։
«Իրադարձություն-փաստ» (EDC), նյութականացված ներկայացումների նորարարությունը (CQRS)։
Միկրովեռները 'նոտիֆիկացիա, վեբհուկներ, արձագանքներ բիզնես իրադարձություններին։
Հիբրիդը ամենից հաճախ
Հոսքը ձևավորում է վիրահատական վիտրիններ և ազդանշաններ։ Գիշերային batch-ը դարձնում է պարան, կամար և էժան պատմական հատումներ։
Ճարտարապետություն
Lambda (Stream + Batch)
Stream-ի համար և առցանց; Batch ամբողջական և ուղղման համար։
Պլյուսներ 'ճկունություն և SLA։ Մինուսները 'երկակի տրամաբանություն, կոդի կրկնօրինակումը։
Kappa (все — Stream + Replay)
Միակ լոգը ճշմարտության աղբյուրն է։ batch վերահաշվարկ = replay։
Պլյուսներ ՝ մեկ կոդային բազա, մեկ սեմանտիկ։ Մինուսները 'ավելի դժվար է շահագործումը, լոգոյի պահպանման պահանջները։
Hybrid-Pragmatic
Հոսքային «վիրահատություն» + պարբերական batch-ջոբի համար ծանր ջոինների/ML/ուղղումների համար։
Գործնականում ամենատարածված տարբերակն է։
Ժամանակը, կարգը, պատուհանները (Stream-ի համար)
Ապավինեք event time-ին, ոչ թե processing Time-ին։
Կառավարեք watermark և «allowed _ lateness»; աջակցեք retractions/upser.ru հետագա իրադարձությունների համար։
Խմբակցեք ագրեգատների մասերում, պլանավորեք «տաք բանալիներ»։
Ֆունկցիա և էֆեկտների իմաստաբանություն
Batch
BD գործարքները կամ կուսակցության/աղյուսակների ատոմային փոխարինումը։
Idempotenty-ը deterministic հաշվարկների և overwrite/insault-overwrite-ի միջոցով է։
Stream
At-least-once + idempotent sinks (ups.ru/merge, ագրեգատների տարբերակները)։
Գործարքային «կարդաց-ձայնագրեց դիրքը» EOS-ի ազդեցության համար։
Դեդուպի աղյուսակները «event _ id »/« operation _ id»։
Պիտերբուրգը և միգրանտները
Batch
SysteLake (Parquet/Delta/Iceberg), OLAP (ClickHouse/BigQuery), օբյեկտի պահեստ։
ACID աղյուսակները atomic replace, time travel-ի համար։
Stream
Լոգա/թեմաներ բրոկերներում, state stores (Rocult DB/embedded), KV/Redis, OLTP պրոյեկտների համար։
Ստանդարտ սխեմաները (Avro/JSON/Delo), կոդավորման ռեժիմները։
Արժեքը և SLO
Batch 'վճարում եք «տուփեր» - ձեռնտու է մեծ ծավալներով, բայց ռուսական գրաֆիկայի ուշացումը։
Stream: Անընդհատ rantaim ռեսուրսներ, բարձր QPS-ի գագաթնակետը։ Բայց SLA-ն վայրկյանում։
Համարեք p95/p99 latency, անցք, արժեքը u.e/իրադարձություն և TCO աջակցություն։
Փորձարկումներ
Ընդհանուր 'golden հավաքածուներ, property-based invariants, կեղտոտ մուտքերի արտադրություն։
Batch 'դետերմինալ, idempotent վերագործարկումներ, կամարների համեմատություն «մինչև/հետո»։
Stream: out-of-order/կրկնօրինակներ, fox-inject ազդեցության և օֆսետի ամրագրման միջև, replay թեստեր։
Աստղադիտարան
Batch: Ջոյի տևողությունը, ֆեյլների/ռետրերի մասնաբաժինը, վիտրինի թարմությունը, սկան-կոստը։
Stream: lag ժամանակի/wwatermark, late-rate, state/հաճախականությունը www.kpoint, DLQ։
Ամենուր '«trace _ id», «event _ id», սխեմաների/փոխակրիչների տարբերակները։
Անվտանգություն և տվյալներ
PII/PCI - նվազագույնի հասցնել, կոդավորել at-rest/in-flight, նետել դաշտերը սխեմաներում («x-pii»)։
Stream-ի համար state/www.kpoint's, ACL-ի պաշտպանությունն է տեղանունների վրա։
GDPR/մոռացման իրավունքը 'Stream-ում' ծպտյալ լվացում/խմբագրություն նախագծերում։ Batch-ում կուսակցության վերահաշվարկն է։
Անցումային ռազմավարություններ
Batch wwww.Stream: Սկսեք իրադարձությունների հրապարակումից (Windobox/CDC), բարձրացրեք փոքրիկ real-Time պատուհանը առանց հուզելու գոյություն ունեցող կամարը։
Stream www.Batch: ավելացրեք ամենօրյա զեկույցներ/նշաններ և նվազեցրեք բեռը հոսող sinks-ի վրա։
Anti-patterns
«Ամեն ինչ Stream-ում» նորաձևության համար, թանկ և դժվար է առանց իրական կարիքների։
«Մեկ հսկա գիշերային batch», պահանջելով <5 րոպե։
Processing Time-ի օգտագործումը բիզնեսի մետրի համար։
Հում CDC-ն որպես հանրային իրադարձություններ 'կոշտ կապ, ցավ էվոլյուցիայի ժամանակ։
Sinks-ում ոչ մի դյուցազնական ազդեցություն չկա։
Ընտրության թուղթ
- SLO թարմություն: Քանի՞ վայրկյան/րոպե/ժամ թույլատրելի է։
- Մուտքեր ՝ կա՞ արդյոք out-of-order/կրկնօրինակներ։
- Արդյո՞ ք անհրաժեշտ են առցանց արձագանքներ/վիտրիններ։
- Արժեքը 'rantaim 24/7 vs «պատուհան ըստ ժամանակացույցի»։
- Ուղղման մեթոդ ՝ retract/ups.ru կամ գիշերային վերահաշվարկ։
- Թիմը և վիրահատական հասունությունը (աստղադիտարան, on-call)։
- Պահանջներ «հենց մեկ էֆեկտին»։
- PII/retentia/մոռացման իրավունք։
Հանրաքվե-արտոնագրեր
Վիրահատական վիտրինը (Hybrid)
STREAM: EDC-ը (KV/Redis, OLTP) UI-ի համար, idempotent ups.ru-ի համար։
Batch: nightly սոդը OLAP-ում, reconciliation, ML-fici-ում։
Անտիֆրոդը
Stream: session-պատուհանը, CEP կանոնները, ալերտները <1-5 s։
Batch 'մոդելների փոխպատվաստում, օֆլեյն-վալիդացիա։
Մարքեթինգը/CRM
Stream: Ձգումներ, հատվածներ իրական ժամանակում։
Batch: Կարիճներ, LTV մոդելներ, հաշվետվություններ։
FAQ
Կարո՞ ղ եք ստանալ «գրեթե real-time» -ը batch-ում։
Այո, միկրոբատչին/ձգողական ջոբները (յուրաքանչյուր 1-5 րոպե) փոխզիջում են, բայց առանց պատուհանների/late-events բարդությունների։
Արդյո՞ ք Lambda-ի մոտեցումը ամենուր է։
Ոչ։ Եթե հոսքը փակում է բոլոր խնդիրները, և դուք կարող եք անել replay-Kappa-ը ավելի հեշտ է երկար։ Հակառակ դեպքում հիբրիդ է։
Ինչպե՞ ս կարելի է հաշվել արժեքը։
Commirual + storage + ops. Stream-ի համար ավելացրեք «24/7» և վթարային գիշերները։ Batch-ը տվյալների «ուշացման» գինն է։
Արդյունքը
Ընտրեք Batch-ը, երբ կարևոր են ցածր արժեքը, պարզությունը և պարբերական կամարները։ Stream, երբ քննադատում է ռեակտիվությունը և թարմությունը։ Գործնականում հաղթում է հիբրիդը 'հոսքը առցանց և ազդանշանների համար, մարտը' ամբողջական և էժան պատմական վերափոխումների համար։ Ամենակարևորն այն է, որ SLO-ն ուղղել, ապահովել գաղափարախոսությունը/դիտարկումը և նախօրոք ձևավորել ուղղումների ճանապարհը։