JavaCro'14 - Log as basis for distributed systems – Vjeran Marčinko
Upcoming SlideShare
Loading in...5
×
 

JavaCro'14 - Log as basis for distributed systems – Vjeran Marčinko

on

  • 714 views

Log, or historical storage of system events, has always occupied central place in architectures of all traditional databases and analytical systems, but nowadays it serves more and more as backbone of ...

Log, or historical storage of system events, has always occupied central place in architectures of all traditional databases and analytical systems, but nowadays it serves more and more as backbone of modern distributed systems. Some of architectures and tools which use this type of data storage will be presented – Kafka message broker, Datomic database, CQRS/Event-sourcing architecture …

Statistics

Views

Total Views
714
Views on SlideShare
83
Embed Views
631

Actions

Likes
0
Downloads
1
Comments
0

3 Embeds 631

http://javacro.org 627
http://www.slideee.com 3
http://www.google.hr 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    JavaCro'14 - Log as basis for distributed systems – Vjeran Marčinko JavaCro'14 - Log as basis for distributed systems – Vjeran Marčinko Presentation Transcript

    • | 1Log kao osnova distribuiranih sustava .
    • Kapsch – O kompaniji | 2Log kao osnova distribuiranih sustava .
    • Što je log? (1) „Činjenica” je nepromjenjivi podatak o nekom događaju koji se dogodio u nekom trenutku Primjeri: • MoneyDeposited • timestamp = 201401T140102 | 3Log kao osnova distribuiranih sustava . • timestamp = 201401T140102 • accountId = 1341 • amount = 45.5 • UserAddressChanged • timestamp = 201401T140112 • userId = 7009 • address = „Vukovarska 13, 10000 Zagreb” • AccountBlocked • …
    • Što je log? (2) Log je način pohrane podataka • samo dodavanje činjenica - (Create, Read, Update, Delete) • činjenice su vremenski poredane • sekvencijalno čitanje - od starijeg prema novijem zapisu • svaka činjenica ima svoj indeks u logu | 4Log kao osnova distribuiranih sustava .
    • Log i stanje sustava Indeks u logu Činjenica Stanje sustava 1 AccountOpened • accountId=701 • Account ID 701, balance = 0 Indeks neke činjenice u logu trenutak u vremenu stanja tog sustava !!! | 5Log kao osnova distribuiranih sustava . • accountId=701 2 MoneyDeposited • accountId = 701 • amount = 45.5 • Account ID 701, balance = 45.5 3 AccountOpened • accountId=702 • Account ID 701, balance = 45.5 • Account ID 702, balance = 0 4 MoneyWithdrawn • accountId=701 • amount=5 • Account ID 701, balance = 40.5 • Account ID 702, balance = 0
    • Proizvođač činjenica public class AccountManager { private AccountDao accountDao; private EventLogger eventLogger; @Transactional | 6Log kao osnova distribuiranih sustava . @Transactional public void depositMoney(long accountId, float amount) { Account account = accountDao.findById(accountId); float newBalance = account.getBalance() + amount; account.setBalance(newBalance); eventLogger.logEvent( new MoneyDeposited(accountId, amount) ); } }
    • Što log nudi? (1) • Univerzalan način integracije sustava • „message bus” ? • „event-driven” SOA? | 7Log kao osnova distribuiranih sustava .
    • Što log nudi? (2) • Zaštita opterećenja potrošača • svaki potrošač konzumira svojom brzinom • Replikacija node-ova unutar potrošačkih clustera • nodeovi potrošačkih clustera mogu replicirati stanje preko loga • nije potreban poseban mehanizam replikacije | 8Log kao osnova distribuiranih sustava . • nije potreban poseban mehanizam replikacije • Jedinstveni „izvor istine” sustava • referentna vrijednost neke činjenice je u logu • svaka greška među činjenicama se ispravlja samo na tom jednom mjestu (nova kompenzirajuća činjenica), a propagira do svih potrošača
    • Što log nudi? (3) • Bootstrapiranje novih potrošača • novi servisi (ili novi nodeovi u servis clusteru) konzumiraju log od početnog indeksa (0) • nije potreban poseban mehanizam za inicijalni import podataka | 9Log kao osnova distribuiranih sustava . • Restoriranje privremenih padova potrošača • privremeno srušeni servisi (ili nodeovi u njihovom clusteru) nakon oporavka konzumiraju log od zadnjeg validnog indeksa u prošlosti
    • Količina podataka u logu • Log zapisa obično ima 1-2 reda veličine više od zapisa stanja • Idealno: podaci se nikad ne brišu • Realno: podaci se dugo drže • Hard diskovi: • jeftini • sekvencijalno čitanje (upravo to i treba) | 10Log kao osnova distribuiranih sustava . • sekvencijalno čitanje (upravo to i treba)
    • Kafka (1) – Uvod • nastao u LinkedIn-u • hibrid baze i message brokera (kontrast sa ActiveMQ/RabbitMQ-om) • model: • broker • topic • partitition • poredak zapisa | 11Log kao osnova distribuiranih sustava . • poredak zapisa samo u particiji • potrošači „pull”-aju zapise • potrošači sami pamte „offset” zadnje poruke
    • Kafka (2) - Features • ne degradira sa količinom zapisa, kao i brojem potrošača • horizontalno skalabilan • veliki throughput (nije napravljen za minimalnu latenciju) • podržava velike backlog-ove (tjedni, mjeseci…) • replikacija (v0.8) • relativno low-level u usporedbi sa drugim message brokerima/ESB-ovima | 12Log kao osnova distribuiranih sustava .
    • Datomic baza - Uvod • Clojure! Rich Hickey! F*** yeah! • baza nepromjenjivih činjenica u obliku „entity-attribute-value-time” (EAVT) | 13Log kao osnova distribuiranih sustava . • log svih činjenica je dio public API-a • stanje baze za bilo koji trenutak u prošlosti (ne pohranjuje snapshot-ove, već perzistentne data strukture - poput Git-a)
    • Datomic baza (2) - pisanje | 14Log kao osnova distribuiranih sustava .
    • Datomic baza (3) - čitanje | 15Log kao osnova distribuiranih sustava .
    • CQRS/Event-sourcing (1) • command i query dio aplikacije razdvojeni (Command-Query-Responsibility-Separation) • command (write) dio • brine o atomičnosti procesiranja akcije koja nešto mijenja (npr. ne smije se skinuti više novaca nego što ima na bankovnom računu) | 16Log kao osnova distribuiranih sustava . (npr. ne smije se skinuti više novaca nego što ima na bankovnom računu) • često je dovoljan samo dohvat cjelokupnih entiteta po ID-u (key-value baza, in-memory?) • query (read) dio • brine o različitim načinima prikaza podataka (npr. kako najlakše JOIN-ati ovaj podatak sa nekim drugim radi prikaza na toj web stranici) • potreban je dohvat preko bogatog query API-a (npr. SQL)
    • CQRS/event-sourcing (2) • svaka izvršena komanda logira event • log evenata služi za • bootstrap in-memory modela „command” dijela • real-time opskrbljivanje query/RDBMS dijela | 17Log kao osnova distribuiranih sustava . query/RDBMS dijela • Axon framework
    • Hvala! | 18Log kao osnova distribuiranih sustava . Hvala!