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

Post on 28-Nov-2014

942 views 1 download

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 …

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!