Строим плот - Как не утонуть в данных

35

Upload: vitebsk-miniq

Post on 21-Feb-2017

234 views

Category:

Software


3 download

TRANSCRIPT

Page 1: Строим плот - Как не утонуть в данных
Page 2: Строим плот - Как не утонуть в данных

Who is who

• Денис

• EPAM Systems

• Ведущий JEE-разработчик

Page 3: Строим плот - Как не утонуть в данных

Agenda

• Архитектура «Producer/Consumer»

• Публикация данных

• Publishing Tool

• Dead message workflow

Page 4: Строим плот - Как не утонуть в данных
Page 5: Строим плот - Как не утонуть в данных
Page 6: Строим плот - Как не утонуть в данных

Потому что зоопарк

• Зоопарк источников данных

• Зоопарк хранилищ данных

• Независимые наборы данных

• Распределенная инфраструктура

• Различные сценарии работы

Page 7: Строим плот - Как не утонуть в данных

Publishing System

Page 8: Строим плот - Как не утонуть в данных

Архитектура «Producer/Consumer»

PRODUCER CONSUMER

220

Page 9: Строим плот - Как не утонуть в данных

Используемые технологии

• JMS

• Apache Camel

• Apache ActiveMQ

• Apache Thrift

Page 10: Строим плот - Как не утонуть в данных

1

Пересылать сообщениена конкретные

окружение/датасет/хранилище

Проблема

Page 11: Строим плот - Как не утонуть в данных

RegionCoherence

RegionOracle

PROD-1

VehicleCoherence

VehicleHBase

InventorySolr

InventoryOracle

DealerSolr

DealerOracle

RegionCoherence

RegionOracle

QA-1

VehicleCoherence

VehicleHBase

InventorySolr

InventoryOracle

DealerSolr

DealerOracle

Page 12: Строим плот - Как не утонуть в данных

JMS

Page 13: Строим плот - Как не утонуть в данных

Topic

Queue

PRODUCER TOPIC

CONSUMER #1

CONSUMER #2

CONSUMER #3

{M1, M2, M3}

{M1, M2, M3}M1

M1

M1

{M1, M2, M3}

{M1, M2, M3}

QUEUEPRODUCER

CONSUMER #1

CONSUMER #2

CONSUMER #3

{M1, M2, M3}

M1

M2

M3

M1

M2

M3

Page 14: Строим плот - Как не утонуть в данных

2 Проблема

PRODUCER

CONSUMER

CONSUMER

Page 15: Строим плот - Как не утонуть в данных

PRODUCER

CONSUMER

CONSUMER

CONSUMER

2 Проблема

?

Page 16: Строим плот - Как не утонуть в данных

PRODUCER

CONSUMER

CONSUMER

CONSUMER

2 Решение

?

Page 17: Строим плот - Как не утонуть в данных

PRODUCER

CONSUMER

CONSUMER

CONSUMER

2 Решение

?

Page 18: Строим плот - Как не утонуть в данных

TOPIC

QUEUE

QUEUE

QUEUE

PRODUCER

CONSUMER

CONSUMER

CONSUMER

VIRTUAL TOPIC

Page 19: Строим плот - Как не утонуть в данных

3 Проблема

TOPIC

QUEUE

QUEUE

QUEUE

PRODUCER

VIRTUAL TOPIC

OK

FAIL

FAIL CONSUMER 1

CONSUMER 2

CONSUMER 3

Page 20: Строим плот - Как не утонуть в данных

3 Решение

TOPIC

QUEUE

QUEUE

QUEUE

PRODUCER

VIRTUAL TOPIC

OK

CONSUMER 1

CONSUMER 2

CONSUMER 3

DestinationInterceptor

Page 21: Строим плот - Как не утонуть в данных

4 Проблемаvoid doMagic(); void doNothing(); int return42();

MESSAGE

?

Page 22: Строим плот - Как не утонуть в данных

3

Apache Camel+

Thrift

Решение

Page 23: Строим плот - Как не утонуть в данных

RECEIVERSERVICE void doMagic();

void doNothing();

int return42();

CAMEL ROUTE

executeThrift();

THRIFTBODY

JMS message

THRIFT PROCESSOR

THRIFT PROCESSOR

void doMagic();

void doNothing();

int return42();

THRIFT PROCESSOR

findProcessorProcessFunc

ProcessFunc

ProcessFunc

CONSUMER

CONSUMER

Page 24: Строим плот - Как не утонуть в данных

Apache Thrift

Page 25: Строим плот - Как не утонуть в данных

Apache Thrift

namespace java com.example.counter.thrift.gen

service CounterService {

oneway void increment(1:i32 value)

}

Содержимое файла example.thrift:

Page 26: Строим плот - Как не утонуть в данных

Producer/Consumer

// Producer

CounterService.Client client

= new CounterService.Client(sender.getProtocol());

client.increment(1);

// Consumer

@Component("counterConsumer")

public class CounterConsumer extends AbstractDataHandler

implements CounterService.Iface {

@Override

public void increment(int value) {

// perform your business logic here

}

}

Page 27: Строим плот - Как не утонуть в данных

Publishing Tool(Shasta)

Page 28: Строим плот - Как не утонуть в данных
Page 29: Строим плот - Как не утонуть в данных
Page 30: Строим плот - Как не утонуть в данных
Page 31: Строим плот - Как не утонуть в данных

Dead message workflow

Page 32: Строим плот - Как не утонуть в данных
Page 33: Строим плот - Как не утонуть в данных

А если «что-то не так»?

1) Dead queue на брокере

2) Dead-message-consumer

3) MongoDB

4) Dead-message-producer

Page 34: Строим плот - Как не утонуть в данных

Итого

15 окружений

44 уникальных наборов данных

73 консьюмера

#

#

#

Page 35: Строим плот - Как не утонуть в данных