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

Post on 21-Feb-2017

246 Views

Category:

Software

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Who is who

• Денис

• EPAM Systems

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

Agenda

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

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

• Publishing Tool

• Dead message workflow

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

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

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

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

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

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

Publishing System

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

PRODUCER CONSUMER

220

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

• JMS

• Apache Camel

• Apache ActiveMQ

• Apache Thrift

1

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

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

Проблема

RegionCoherence

RegionOracle

PROD-1

VehicleCoherence

VehicleHBase

InventorySolr

InventoryOracle

DealerSolr

DealerOracle

RegionCoherence

RegionOracle

QA-1

VehicleCoherence

VehicleHBase

InventorySolr

InventoryOracle

DealerSolr

DealerOracle

JMS

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

2 Проблема

PRODUCER

CONSUMER

CONSUMER

PRODUCER

CONSUMER

CONSUMER

CONSUMER

2 Проблема

?

PRODUCER

CONSUMER

CONSUMER

CONSUMER

2 Решение

?

PRODUCER

CONSUMER

CONSUMER

CONSUMER

2 Решение

?

TOPIC

QUEUE

QUEUE

QUEUE

PRODUCER

CONSUMER

CONSUMER

CONSUMER

VIRTUAL TOPIC

3 Проблема

TOPIC

QUEUE

QUEUE

QUEUE

PRODUCER

VIRTUAL TOPIC

OK

FAIL

FAIL CONSUMER 1

CONSUMER 2

CONSUMER 3

3 Решение

TOPIC

QUEUE

QUEUE

QUEUE

PRODUCER

VIRTUAL TOPIC

OK

CONSUMER 1

CONSUMER 2

CONSUMER 3

DestinationInterceptor

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

MESSAGE

?

3

Apache Camel+

Thrift

Решение

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

Apache Thrift

Apache Thrift

namespace java com.example.counter.thrift.gen

service CounterService {

oneway void increment(1:i32 value)

}

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

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

}

}

Publishing Tool(Shasta)

Dead message workflow

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

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

2) Dead-message-consumer

3) MongoDB

4) Dead-message-producer

Итого

15 окружений

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

73 консьюмера

#

#

#

top related