[244] 분산 환경에서 스트림과 배치...

91
분산 환경에서 스트림과 배치 처리 통합 모델 정재부 이도경 네이버 검색정제개발랩

Upload: naver-d2

Post on 07-Jan-2017

5.210 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

분산 환경에서 스트림과 배치 처리 통합 모델

정재부 이도경

네이버 검색정제개발랩

Page 2: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

contents

1. 배치 처리 vs. 스트림 처리 2. Domaine Architecture 3. Domaine Development Kit Example 4. 초기 구축 배치 처리 방법 5. Stack Overview 6. 분산 환경 구성 7. 정리 8. QnA

2

Page 3: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

1. 배치 처리 vs. 스트림 처리

3

Page 4: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

배치 처리(Batch Processing)

배치 처리 vs. 스트림 처리

4

Page 5: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

배치 처리(Batch Processing)

배치 처리 vs. 스트림 처리

Hadoop Mapreduce, Spark…

5

Page 6: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

스트림 처리(Stream Processing)

배치 처리 vs. 스트림 처리

6

Page 7: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

스트림 처리(Stream Processing)

배치 처리 vs. 스트림 처리

Storm, Flink, Samza…

7

Page 8: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

배치 처리 vs. 스트림 처리

High Throughput vs. Low Latency

8

Page 9: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

배치 처리 vs. 스트림 처리

Throughput Latency

트레이드오프

9

Page 10: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

검색 문서 정제란?

정규화된 데이터를 검색에 적합한 형태로 가공하는 작업

질문

답변1

답변2

질문DB

답변DB

사용자DB

번호:233482408 카테고리:게임 질문자:a**** 질문자등급:평민 질문:목욕 여신 코니 쓸만한가요? 내용:라인레인저스 하고 있는데요... 답변자1:b**** 답변자1등급:영웅 답변1:신규 캐릭치곤 별로예요. 답변자2:c**** 답변자2등급:수호신 답변2:최곱니다. …

Search Document

검색 문서 정제

10

Page 11: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

1. 많은 검색 대상 문서 처리가 가능해야함(High Throughput)

2. 최신 문서를 빠르게 검색에 노출(Low Latency)

3. 서비스별 비지니스 로직 적용

요구 사항

검색 문서 정제란?

11

Page 12: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Lambda Architecture

스트림과 배치 처리 통합 모델 사례

http://lambda-architecture.net/

12

Page 13: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

예) Stage1은 1주일마다, Stage2는 1일마다, Stage3는 1시간마다, Stage4는 1분마다

Timewise Staged 배치 시스템

기존 검색 문서 정제 방식

Stage1 Weekly

Stage2 Daily

Stage3 Hourly Stage4

Minutely

13

Page 14: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Timewise Staged 배치 시스템

기존 검색 문서 정제 방식

Stage1 Weekly

Stage2 Daily

Stage3 Hourly Stage4

Minutely

Stage3 Stage2 Stage1

14

Page 15: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

1. 배치 처리만으로 Low Latency 만족 가능

➡Latency 요구 사항을 만족하지못하면 Stage를 추가하면 된다.

2.정제 로직 변경이 단순

➡모든 데이터는 결국 다시 처리

Timewise Staged 배치 시스템의 장점

15

Page 16: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

1. Stage간에 부정확성이 발생

➡상위 Stage가 재수행되면 해결

2.주기적인 전체 데이터 재처리 수행

변경되지 않은 99억999만건

변경되거나����������� ������������������  추가된����������� ������������������  1만건Stage1이 매번 처리해야할 문서량

Timewise Staged 배치 시스템의 단점

16

Page 17: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

증분 시스템(Incremental System)을 만들자.

네이버의 검색 증분화 프로젝트(BREW Project) ➡2015년 상반기 첫 검색 서비스 적용

어떻게하면 전체 재처리를 피할까?

17

Page 18: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

1. Random Read/Write Storage 2. Transaction 3. Stream(Event-driven) Processing

증분 시스템을 만들려면?

18

Page 19: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

장점

➡주기적인 전체 재처리 X

➡Low Latency

증분 시스템의 특징

19

Page 20: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

단점

➡Persistent Storage Maintenance Hell

➡배치 처리 로직과 스트림 처리 로직의 통합은 아직...

증분 시스템의 특징

20

Page 21: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

증분 시스템은 어떻게 만들지?

21

Page 22: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

1.너무 많은 솔루션(필요한데...) 2.너무 많은 서비스(적용하기엔...)

결국 Abstraction이 답! ➡Programming Model Abstraction

정제 로직에만 집중할 수 없을까?

22

Page 23: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

2. Domaine Architecture

23

Page 24: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

주요 특징

Transaction, Data Load/Sink Code 숨기기

Event: No Data, No action

Diff: previous/current value 제공

Domaine Architecture

24

Page 25: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Unlimited Memory Space

공간 제약이 없는

메모리가 있고

Domaine Architecture

25

Page 26: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Unlimited Memory Space

메모리상의

어떤 Cell의 값이 변하면

Domaine Architecture

26

Page 27: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Unlimited Memory Space

그 Cell에 관심이 있던

Yeast가 실행된다. Yeast

Domaine Architecture

27

Page 28: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Unlimited Memory Space

Yeast는 Process Unit이고

실행되면 로직에 따라

필요한 값을 읽어서 Yeast

Domaine Architecture

28

Page 29: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Unlimited Memory Space

Yeast

Domaine Architecture

결과를 메모리에 반영한다.

29

Page 30: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Unlimited Memory Space

새로 반영된 값에

관심이 있는

다른 Yeast가 있으면

해당 Yeast가 실행된다. Yeast

Yeast

Domaine Architecture

30

Page 31: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Unlimited Memory Space

Yeast 하나가

실행되는 동안에는

논리적으로 전체 메모리를

혼자서만 바꿀수 있다.

Yeast

Yeast

Domaine Architecture

31

Page 32: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Unlimited Memory Space

Domaine

Yeast A Yeast B Yeast C Yeast D

Yeast와 메모리는 Domaine이라는 영역(Scope)으로 한정 같은 Domaine내 메모리는 R/W가 가능, 다른 Domaine은 R만 가능

Domaine Architecture

Yeast …Yeast Yeast Yeast YeastX O

W R

32

Page 33: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Domaine Architecture

오직 메모리에서 읽어서 처리후 다시 메모리에 쓴다.Software Transactional Memory와 유사

int a = c1.getInt(0);c1.set(a + 1);

Cell c1 = domaine.table(“t1”).row(“r2”).family(“f3”).qualifier(“q4”);

t1 f3 f4

row⑊cq q3 q4 q5 q6

r1

r2

f3

33

Page 34: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Domaine Development Kit

int a = a1.getInt(0);

Physical StorageStorageSandbox

a1 a1 3

b1 5

miss!

Yeast Layer DDK Layer Storage Layer

34

Page 35: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

int a = a1.getInt(0);

Physical StorageStorageSandbox

a1 3 F a1 3

b1 5

fetch!a : 3

Domaine Development Kit

35

Page 36: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

int a = a1.getInt(0);

int b = a1.getInt(1);

Physical StorageStorageSandbox

a1 3 F a1 3

b1 5b : 3

Domaine Development Kit

36

Page 37: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

int a = a1.getInt(0);

int b = a1.getInt(1);

int c = c1.getString(“c”);

Physical StorageStorageSandbox

a1 3 F

c1 null F

a1 3

b1 5miss!

miss!

c: “c”

Domaine Development Kit

37

Page 38: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

a1.set(5);

int a2 = a1.get();

b1.delete();

Physical StorageStorageSandbox

a1 5 W

c1 null F

b1 null D

a1 3

b1 5a2: 5

Domaine Development Kit

38

Page 39: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

a1.set(5);

int a2 = a1.get();

b1.delete();

Physical StorageStorageSandbox

a1 5 W

c1 null F

b1 null D

a1 5

b1

a1 5 W

b1 null D

WriteSet sink!

Domaine Development Kit

39

Page 40: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

a1.set(5);

int a2 = a1.get();

b1.delete();

Physical StorageStorageSandbox

a1 5 W

c1 null F

b1 null D

a1 5

a1 5 W

b1 null D

WriteSet

Domaine Development Kit

40

Page 41: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Yeast … Event Event Event Event Event Event Event Event …

Address Operator Data triggered time

Cell A Insert I am a boy 2015-09-07 10:57:47 KST

일반적인 Event Message

41

Page 42: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Event에는 변한 메모리 주소만 있을 뿐 Operator와 Data가 없다. ➡데이터 순서 역전 방지 및 최신성 문제를 해결 ➡Operator는 Yeast가 직접 결정

Yeast … Event Event Event Event Event Event Event Event …

Address Operation Data triggered time

Cell A Insert I am a boy 2015-09-07 10:57:47 KSTX X X

Yeast Event

42

Page 43: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

이전 값 현재 값 Operator

null A Insert

A B Update

B null Delete

C C NoAction

Yeast에서 관심있던 Cell에 이전 값과 현재 값을 알 수 있다. ➡Operator로 사용

Yeast Event

43

Page 44: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Event Cell 이전값/현재값 제공 방법

Yeast Yeast

Cell 이전 값 현재 값

A null I am a boy

Cell 이전 값 현재 값

A I am a boy You are a girl

Event A Event A

T1 T2

다음 이벤트를 위해 미리 저장!

Diff

44

Page 45: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

3. Domaine Development Kit Example

45

Page 46: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Example Code

46

Page 47: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

관심있는 메모리 영역을 표시

Example Code

47

Page 48: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Diff를 이용한 Extactly-Once 처리

Example Code

48

Page 49: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Example Code

49

Page 50: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Result

Row Count

I 1

am 1

a 1

boy 1

Example Code

Source

Row Sentence

document1 I am a boy

50

Page 51: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Result

Row Count

I 1

am 1

a 2

boy 1

you 1

are 1

girl 1

Example Code

Source

Row Sentence

document1 I am a boy

document2 You are a girl

51

Page 52: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Source

Row Sentence

document1 I am not a girl

document2 You are a girl

Result

Row Count

I 1

am 1

a 2

boy 1

you 1

are 1

girl 1

Example Code

52

Page 53: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Result

Row Count

I 1 - 1

am 1 - 1

a 2 - 1

boy 1 - 1

you 1

are 1

girl 1

Example Code

Source

Row Sentence

document1 I am not a girl

document2 You are a girl

53

Page 54: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Result

Row Count

I 0 + 1

am 0 + 1

a 1 + 1

boy 0

you 1

are 1

girl 1 + 1

not 1

Example Code

Source

Row Sentence

document1 I am not a girl

document2 You are a girl

54

Page 55: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Result

Row Count

I 1

am 1

a 2

boy 0

you 1

are 1

girl 2

not 1

Example Code

Source

Row Sentence

document1 I am not a girl

document2 You are a girl

55

Page 56: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

4. 초기 구축 배치 처리 방법

56

Page 57: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

기존 데이터는 어떻게 처리하지?

현재 들어오는 입력은 스트림으로 처리그러면 이전 데이터도 스트림으로?

➡스트림으로 처리하기에는 양이 너무 많다.

처리량을 높이기 위해서는 배치 처리가 필요➡스트림 로직과 별개로 배치 로직을 작성해줘야 하나?

57

Page 58: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Summingbird

배치 모드와 실시간 모드에서 프로그램 수행 가능➡ 로직을 두번 작성할 필요 없음

같은 키를 갖는 값들에 대한 monoid 연산 제공➡검색 로직 작성이 어려운 경우가 있음

기존 데이터는 어떻게 처리하지?

https://github.com/twitter/summingbird

58

Page 59: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

그냥 Yeast 를 배치로 처리해보면 어떨까?

➡ Yeast는 트랜잭션으로 묶여 있으니 무수히 많은 conflict가 발생할텐데?

➡ Yeast 내에서 Storage에 대한 Random Read가 수행되는데, 처리량이 만족스러울까?

Yeast를 배치로 처리하려면?

59

Page 60: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

배치에서는 write-write conflict 만 체크하면 된다.

➡ 사용하는 데이터는 특정 시점의 storage snapshot 내용이기 때문에 write한 데이터를 입력으로 사용하지 않음

➡ Yeast 결과인 write set이 같은 경우가 있는지 체크

Optimistic Concurrency Control

Yeast 배치 처리 중 Conflict 체크

60

Page 61: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Yeast

Yeast

Yeast

Yeast

Yeast

Interesting Table

MapTask

61

Page 62: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Yeast

Yeast

Yeast

Yeast

Yeast

Random Read Join

Reference Table

62

Page 63: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Yeast

Yeast

Yeast

Yeast

Yeast

1 (A,B,C)

2 (B,C)

3 (C,D,E)

4 (F,K)

5 (A)

WriteSet

입력 문서 1번이 cell A,B,C 에 결과 값을 썼다.

63

Page 64: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Yeast

Yeast

Yeast

Yeast

Yeast

1 (A,B,C)

A((1,o), (5,x))

B((1,o), (2,x))

C((1,o), (2,x), (3,x))

D((3,o))

E((3,o))

F((4,o))

K((4,o))

2 (B,C)

3 (C,D,E)

4 (F,K)

5 (A)

S T E P 1

R E D U C E R

같은 Cell을 쓴 문서중 하나만 성공 후보로 선정

선정된 후보는 O 실패한 문서는 X

64

Page 65: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Yeast

Yeast

Yeast

Yeast

Yeast

1 (A,B,C)

A((1,o), (5,x))

B((1,o), (2,x))

C((1,o), (2,x), (3,x))

D((3,o))

E((3,o))

F((4,o))

1((A,o),(B,o),(C,o))

2((B,x),(C,x))

3((C,x),(D,o), (E,o))

4((F,o),(K,o))

K((4,o))

5(A,x)

2 (B,C)

3 (C,D,E)

4 (F,K)

5 (A)

S T E P 2

R E D U C E R

65

Page 66: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Yeast

Yeast

Yeast

Yeast

Yeast

1 (A,B,C)

A((1,o), (5,x))

B((1,o), (2,x))

C((1,o), (2,x), (3,x))

D((3,o))

E((3,o))

F((4,o))

1((A,o),(B,o),(C,o))

2((B,x),(C,x))

3((C,x),(D,o), (E,o))

4((F,o),(K,o))

K((4,o))

5(A,x)

2 (B,C)

3 (C,D,E)

4 (F,K)

5 (A)

S T E P 2

R E D U C E R

Success

Success

66

Page 67: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Yeast

Yeast

Yeast

Yeast

Yeast

B((1,o))

C((2,o), (3,x))

D((3,o))

E((3,o))

2((B,o),(C,o))

3((C,x),(D,o), (E,o))

A((5,o))

5((A,o))

1 (A,B,C)

2 (B,C)

3 (C,D,E)

4 (F,K)

5 (A)

Success

Success

실패한 작업은 이 과정을 반복해서 수행하고, 실패 작업이 스트림 처리가 가능한 수준이면, 배치 처리는 종료

67

Page 68: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

처리량을 늘리기 위해 Random Read를 최소화 해야 함

➡ 사용할 데이터를 scan해서 미리 메모리에 저장(Prefetch)

Yeast 배치 처리 성능 최적화

68

Page 69: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

스트림 처리에서의 Random Read

Physical StorageStorageSandbox

Yeast Layer DDK Layer Storage Layer

t1 f3 f4

row⑊cq q3 q4 q3 q4

r1

r2 1 T1 B2

f3

Cell i = t1.r2.f3.q4i.getString();

Cell g1 = t1.r2.f3.q3g1.getInt();

Cell g2 = t1.r2.f4.q4g2.getBytes();

69

Page 70: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Physical StorageStorageSandbox

i T1 F

Yeast Layer DDK Layer Storage Layer

t1 f3 f4

row⑊cq q3 q4 q3 q4

r1

r2 1 T1 B2

f3

Cell i = t1.r2.f3.q4i.getString();

Cell g1 = t1.r2.f3.q3g1.getInt();

Cell g2 = t1.r2.f4.q4g2.getBytes();

스트림 처리에서의 Random Read

RandomRead

70

Page 71: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Physical StorageStorageSandbox

i T1 F

g1 1 F

Yeast Layer DDK Layer Storage Layer

t1 f3 f4

row⑊cq q3 q4 q3 q4

r1

r2 1 T1 B2

f3

Cell i = t1.r2.f3.q4i.getString();

Cell g1 = t1.r2.f3.q3g1.getInt();

Cell g2 = t1.r2.f4.q4g2.getBytes();

스트림 처리에서의 Random Read

RandomRead

71

Page 72: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Physical StorageStorageSandbox

i T1 F

g1 1 F

g2 B2 F

Yeast Layer DDK Layer Storage Layer

t1 f3 f4

row⑊cq q3 q4 q3 q4

r1

r2 1 T1 B2

f3

Cell i = t1.r2.f3.q4i.getString();

Cell g1 = t1.r2.f3.q3g1.getInt();

Cell g2 = t1.r2.f4.q4g2.getBytes();

스트림 처리에서의 Random Read

RandomRead

72

Page 73: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Physical StorageStorageSandbox

i T1 F

g1 1 F

g2 B2 F

Yeast Layer DDK Layer Storage Layer

t1 f3 f4

row⑊cq q3 q4 q3 q4

r1

r2 1 T1 B2

f3

Cell i = t1.r2.f3.q4i.getString();

Cell g1 = t1.r2.f3.q3g1.getInt();

Cell g2 = t1.r2.f4.q4g2.getBytes();

배치 처리의 PrefetchYeast 로직 수행 전에 데이터를 미리 메모리에 저장한다.

Scan

73

Page 74: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Physical StorageStorageSandbox

i T1 F

g1 1 F

g2 B2 F

r Spam F

Yeast LayerDDK Layer Storage Layer

Cell i = t1.r2.f3.q4i.getString();

Cell g1 = t1.r2.f3.q3g1.getInt();

Cell g2 = t1.r2.f4.q4g2.getBytes();

Cell r = rt2.r6.rf1.q1r.getString();

배치 처리의 Prefetch

t1 f3 f4

row⑊cq q3 q4 q3 q4

r1

r2 1 T1 B2

f3

rt2 rf1 rf2

row⑊cq q1 q2 q1 q2

r5

r6 Spam

Scan

74

Page 75: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

5. Stack Overview

75

Page 76: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Domaine ArchitectureStack Overview - 스트림 처리

Domaine Development Kit

HBase Storm Cana KafkaStorage Process Transaction Queue

Yeast Yeast Yeast Yeast Yeast

Yeast Yeast Yeast Yeast Yeast

지식iN domaine

카페 domaine

76

Page 77: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Domaine ArchitectureStack Overview - 배치 처리

Domaine Development Kit

HBase SparkStorage Process

Yeast Yeast Yeast Yeast Yeast

Yeast Yeast Yeast Yeast Yeast

지식iN domaine

카페 domaine

77

Page 78: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Domaine ArchitectureStack Overview - 디버깅 & 테스트

Domaine Development Kit

PseudoLocalClusterStorage & Transaction & Process & Queue

Yeast Yeast Yeast Yeast Yeast

Yeast Yeast Yeast Yeast Yeast

지식iN domaine

카페 domaine

78

Page 79: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Domaine ArchitectureStack Overview - 대체가능 솔루션

Domaine Development Kit

MySQL Cluster Spark Stream Kestrel?Storage & Transaction Process Queue

Yeast Yeast Yeast Yeast Yeast

Yeast Yeast Yeast Yeast Yeast

지식iN domaine

카페 domaine

79

Page 80: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

6. 분산 환경 구성

80

Page 81: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

증분 시스템의 Storage 내용은 언제나 변하고 있음

➡ 주기적인 check point 관리가 중요

• Event queue offset => Kafka

• Storage snapshot => HBase

분산 환경 구성

81

Page 82: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

데이터 오염이 발생한 경우

➡ 오염 시점을 알면, Check point부터 스트림으로 재처리

➡ 시점을 알지 못하면, 초기 구축 배치 처리

분산 환경 구성 - Check point

82

Page 83: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

클러스터 관리 도구

➡ Ambari

➡ 필요 서비스 추가 및 stack 구성

분산 환경 구성

83

Page 84: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

성능 지표 모니터링과 로그 검색

➡ 로그 검색 : 데이터 흐름 파악 용도

➡ 자체 모니터링 시스템 구축(Ganglia와 유사)

➡ Fluentd, ElasticSearch, Kibana

분산 환경 구성

84

Page 85: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

시스템 상황에 대한 알람

➡ 알람을 위한 지표 저장 => ElasticSearch

➡ 알람 전달 =>ElastAlert

분산 환경 구성

85

Page 86: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

분산 환경 구성

fluentd

Collector

장비

fluentd

Collector

장비

fluentd

Collector

장비

fluentd

Collector

장비

Metrics 저장소 Elasticsearch

Metrics 뷰어 Kibana ElasticAlert

Metrics 로그

Metrics

86

Page 87: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

7. 적용 사례

87

Page 88: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

증분 시스템 적용 후 변화

네이버 K 서비스 Timewise Staged 배치 시스템 증분 시스템

일주일 간 처리 문서 비율 100%(All Stages) 20.552%

갱신 시간

문서 갱신 최대 수 분(Stage3) 최대 수 초 평균 55.198ms

사용자 정보 갱신 최소 수분(Stage3) ~ 최대 수일(Stage1) 데이터 입수 즉시

88

Page 89: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

증분 시스템이 만능은 아니다.

➡ 주어진 문제를 어떻게 해결하는 게 좋을지 고민이 필요

이제 시작일 뿐...

마무리

89

Page 90: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Q&A

Page 91: [244] 분산 환경에서 스트림과 배치 처리 통합 모델

Thank You