JavaCro'14 - Log as basis for distributed systems – Vjeran Marčinko
-
Upload
hujak-hrvatska-udruga-java-korisnika-croatian-java-user-association -
Category
Technology
-
view
942 -
download
1
description
Transcript of JavaCro'14 - Log as basis for distributed systems – Vjeran Marčinko
| 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
Indeksu 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!