티스토리 뷰
개요
회사 업무 관련으로, Google cloud platform의 PubSub와 dataflow 를 이용한 파이프라인을 만들다가 알게 된 것을 정리 해보고자 한다.
모르는 부분에 대해서는 Google Japan의 직원에게 물어보았지만, 불확실한 곳도 있을 것으로 생각되기 때문에, 틀린 곳이 있으면 지적해주길 바란다.
이번에 구상한 간단한 파이프라인
서버 → PubSub에 message를 publish → dataflow에서 처리→ GCS에 보존
- 서버에서 PubSub topic 에 message 를 publish 한다.
- subscription에 PubSub topic에 들어온 message 를 배포한다.
- Dataflow가 subscription에서 읽어들인 message 를 Persistent Disk(PD)에 기록한다.
- 이 데이터는 in-flight data 라고 불리운다.
- Dataflow가 PubSub subscription에 ACK를 보낸다.
- PubSub subscription에 있던 message 를 삭제한다.
- Dataflow는 PD에서 message 를 읽어들여, 처리 후 GCS 에 데이터를 보존한다.
PubSub
- Global리소스 이므로 Google 서비스 중에서 제일 가용성이 높다고 한다.
- Google 서비스의 가용성 : Zone < Regional < Global
- Google 서비스 전체에 영향을 끼칠 정도의 장애가 아니고서는 PubSub 에 publish 한 데이터를 잃어버리거나, publish 못하는 경우는 없을 것 같다.
Service Level Agreement(SLA)
- Monthly Uptime Percentage : 99.95%
- 1개월이라는 기간을 분으로 환산해 거기에서 Downtime Periods을 뺀 것의 비율.
- 즉 1개월이라는 시간의 99.95%는 동작한다.
- Downtime Periods : 연속 60초의 Downtime。60초 이하의Downtime은 Downtime Periods에 포함되지 않는다.
- Monthly Downtime Percentage: 0.05%
- 1개월간, 21.6분 이하로 서비스가 다운될 것을 보증한다.
즉
- 1개월간, 60초 이상으로 서비스가 다운되는 시간을 합치면 21.6분 이하이다.
- 60초 이하로 다운되는 시간은 Downtime Period 에 포함되지 않기 때문에, 다운되는 시간을 전부 합치면 21.6분 이상이 될ㅈ도 모른다.
Dataflow
- 데이터를 PubSub subscription에서부터 읽어들여, PD에 옮긴 후에 ACK를 보낸다.
- PD에서 데이터를 읽어들여, 처리 후 GCS에 데이터를 작성
- GCE에 존재한다.
- GCE : Virtual Machine(VM)와 Persistent Disk(PD)의 컴포넌트로 구성되어, 독자의 가용성을 가지고 운영된다.
GCP에 장애가 일어났을 경우
Subscription
- subscription가 PubSub에서 정상적으로 message를 읽어들이지 못할 경우, subscriber는 PubSub에 ACK를 보내지 않기 때문에 PubSub에 message가 남아 있는다. PubSub는 ackDeadline때 까지 subscription에 message를 반복해서 보낸다.
Dataflow
- Dataflow가 정지되어, PubSub subscription에서부터 데이터를 받아들이지 못하게 되었을 경우, ACK를 보내지 않기 때문데, PubSub subscription에 메시지가 쌓이게 된다.
Dataflow 장애 테스트를 하기 위해 , Cancel와 Drain으로 정지 시켜보았다.
- Cancel 혹은 Drain 버튼을 누르면 shutdown 하라는 신호가 간다.
- VM과 PD가 shutdown.
- 실제 장애상황을 가정한 테스트는 할 수 없었다.
- Cancel : in-flight data 가 있어도 바로 shutdown 한다.
- Drain : in-flight data 의 처리를 끝낸 후, shutdown 한다.
Dataflow 가 장애로 정지 되는 상황
- VM가 다운 되어도 PD는 살아있다.
- PD는 복수의 디스크에 복제되어 분산배치 되어있기 때문에, PD에 장애가 발생해도 데이터를 잃어버릴 가능성은 낮다.
- 복구 된 VM은 PD에 저장되어 있는 데이터를 읽어들이기 때문에 데이터의 손실은 일어나지 않는다.
Dataflow job를 재개한다
- PubSub subscription에 쌓여있던 데이터를 읽어들여, 처리 후, GCS에 작성하는 작업을 계속한다.
결론
- 서버에서 PubSub에 message를 publish하는 것만 성공한다면, GCP 장애로 인해 message 손실이 일어날 확률은 꽤 낮을 것으로 생각된다.
'IT & Programming' 카테고리의 다른 글
일본 암호화폐(가상화폐) 거래소 API를 잠깐 만져본 소감 (0) | 2018.03.19 |
---|---|
Google dataproc timezone, spark unix_timestamp timezone 문제 (0) | 2018.02.09 |
PubSub, Dataflow에 대해서 알게 된 것 정리 (0) | 2017.10.15 |
PubSub와 Dataflow 연동해서 GCS 에 로그 보존하기 (0) | 2017.09.13 |
[LeetCode] Encode and Decode TinyURL (0) | 2017.06.16 |
[LeetCode] Median of Two Sorted Arrays (0) | 2017.06.06 |
댓글