18
|1 Log kao osnova distribuiranih sustava .

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

Embed Size (px)

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

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

| 1Log kao osnova distribuiranih sustava .

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

Kapsch – O kompaniji

| 2Log kao osnova distribuiranih sustava .

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

Š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

• …

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

Š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 .

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

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

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

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) );}

}

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

Što log nudi? (1)

• Univerzalan način integracije sustava• „message bus” ?

• „event-driven” SOA?

| 7Log kao osnova distribuiranih sustava .

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

Š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

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

Š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

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

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)

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

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

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

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 .

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

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)

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

Datomic baza (2) - pisanje

| 14Log kao osnova distribuiranih sustava .

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

Datomic baza (3) - čitanje

| 15Log kao osnova distribuiranih sustava .

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

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)

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

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

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

Hvala!

| 18Log kao osnova distribuiranih sustava .

Hvala!