View
942
Download
1
Category
Preview:
DESCRIPTION
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 …
Citation preview
| 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!
Recommended