bottled water 요약 설명 20151114

15
Bottled Water 요요 요요 2015.10.27 요요

Upload: daeyong-shin

Post on 13-Apr-2017

477 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Bottled water 요약 설명 20151114

Bottled Water 요약 설명2015.10.27 대용

Page 2: Bottled water 요약 설명 20151114

프로그래밍 잘하게 생긴 예

Page 3: Bottled water 요약 설명 20151114

문제 상황

Page 4: Bottled water 요약 설명 20151114

문서의 핵심• DB 그리고 캐쉬등의 다른 스토리지에 어플리케이션이 동시 쓰기를 하면 여러 가지 이점이 있지만 결국에는 데이터가 달라짐• 차이가 커지면 수동으로 교정을 하는데 디비가 큰 경우에는 하루로 끝나지 않는 매우 큰 작업임• 가끔씩 하는 것보다 스냅샷과 변경 분을 fello 하는 것이 좋음• 링크드인과 페이스 북은 이미 이렇게 하고 있음• postgreSQL 은 과거에 사용하던 커밋 로그보다 좀 더 나은 방법을 제공함• kafka 는 key 단위 log aggregation 을 자체적으로 해줌

Page 5: Bottled water 요약 설명 20151114

문제• DB 는 정말 좋은데 ...• 분석을 위해서 다른 곳에다가 복사 하고 싶다 . • 빠른 서비스를 위해서 캐쉬도 하고 싶다 .

Page 6: Bottled water 요약 설명 20151114

dual writes• 프로그램은 DB 에 작업 , 캐쉬 날리고 , 검색 엔진 인덱스 새로 생성하고 , 로그를 남긴다 .

• 문제가 많고 결국에는 각 스토리지에서 각 데이터들은 달라지게 된다 . • 디비 스냅샷을 떠서 교정 작업을 보면 좋은데 디비가 커질수록 비 효율적이고 엄청 오래 걸릴것이다 . • 또한 스냅샷을 작게 만들려면 이러한 배치를 자주 계속 돌려야 한다 ...

Page 7: Bottled water 요약 설명 20151114

replication• 짱 좋음• a consistent snapshot at one point in time, and • a real-time stream of changes form that point onwards.

• 파이프 라인으로 이러한 변경의 스냅샷을 순서 대로 받을 수 있다 .• 디비가 아닌 다른 시스템에도 이 개념을 적용 할 수 있다 .

Page 8: Bottled water 요약 설명 20151114

Chanage Data Capture (CDC)• 이런걸 CDC 라 부름• LinkedIn• Databus

• Facebook• Wormhole

• 이런게 있으면 당신은 = “cental hub of data streams” 에서 데이터를 로드 할 수 있다 .• 리얼 타임• 안정적인 ....

Page 9: Bottled water 요약 설명 20151114

비슷한거• Oracle – GoldenGate• MySQL – binlog• MongoDB – oplog• CouchDB – changes feed• RethinkDB• Firebase

• PostgreSQL – logical decoding!!!!!!!

Page 10: Bottled water 요약 설명 20151114

Bottled Water• Confuent 의 지원을 받아 혼자 만듬• WAL 를 어서 정합성 유지• aborted/bolled-back 등은 남지 않는다 .

• logical decoding 은 지정된 시간 동안 전체 DB 의 변경 스냅샷을 가져 올 수 있다 .

• bottled water 는 logical decoding 으로 부터 스냅샷을 받아서 avro 로 kafka 에 각 테이블을 별개의 topic 으로 넣는다 .

Page 11: Bottled water 요약 설명 20151114

왜 카프카 인가 ?• log compaction feature• log compaction 이 활성화 되면 시간 단위 만료는 꺼진다 .• key 가 주어지면 가장 마지막의 레코드를 기억한다 .• * postgres 의 키를 인식해서 사용한다 .....• replicated log abstraction• 이러한 작업들이 가능하도록 잘 추상화를 해주었다 .

Page 12: Bottled water 요약 설명 20151114

avro• confluent 의 규정• schema registry 가 이미 있음

Page 13: Bottled water 요약 설명 20151114

logical decoding output plugin• C 로 짜면 됨

Page 14: Bottled water 요약 설명 20151114

설치$ docker run -d --name zookeeper --hostname zookeeper confluent/zookeeper

$ docker run -d --name kafka --hostname kafka --link zookeeper:zookeeper \ --env KAFKA_LOG_CLEANUP_POLICY=compact confluent/kafka

$ docker run -d --name schema-registry --hostname schema-registry \ --link zookeeper:zookeeper --link kafka:kafka \ --env SCHEMA_REGISTRY_AVRO_COMPATIBILITY_LEVEL=none confluent/schema-registry

$ docker run -d --name postgres --hostname postgres confluent/postgres-bw:0.1

Page 15: Bottled water 요약 설명 20151114

시연• http://showterm.io/fde6260d684ee3a6ee692