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

1,616 views

Published on

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 …

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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

  1. 1. | 1Log kao osnova distribuiranih sustava .
  2. 2. Kapsch – O kompaniji | 2Log kao osnova distribuiranih sustava .
  3. 3. Š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 • …
  4. 4. Š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 .
  5. 5. 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
  6. 6. 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) ); } }
  7. 7. Što log nudi? (1) • Univerzalan način integracije sustava • „message bus” ? • „event-driven” SOA? | 7Log kao osnova distribuiranih sustava .
  8. 8. Š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
  9. 9. Š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
  10. 10. 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)
  11. 11. 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
  12. 12. 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 .
  13. 13. 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)
  14. 14. Datomic baza (2) - pisanje | 14Log kao osnova distribuiranih sustava .
  15. 15. Datomic baza (3) - čitanje | 15Log kao osnova distribuiranih sustava .
  16. 16. 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)
  17. 17. 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
  18. 18. Hvala! | 18Log kao osnova distribuiranih sustava . Hvala!

×