티스토리 뷰

IT & Programming

PubSub, Dataflow에 대해서 알게 된 것 정리

시부야에 사는 사람 2017.10.15 23:23

개요


회사 업무 관련으로, Google cloud platform의 PubSub와 dataflow 를 이용한 파이프라인을 만들다가 알게 된 것을 정리 해보고자 한다.
모르는 부분에 대해서는 Google Japan의 직원에게 물어보았지만, 불확실한 곳도 있을 것으로 생각되기 때문에, 틀린 곳이 있으면 지적해주길 바란다.

이번에 구상한 간단한 파이프라인

서버 → PubSub에 message를 publish → dataflow에서 처리→ GCS에 보존

  1. 서버에서 PubSub topic 에 message 를 publish 한다.
  2. subscription에 PubSub topic에 들어온 message 를 배포한다.
  3. Dataflow가 subscription에서 읽어들인 message 를 Persistent Disk(PD)에 기록한다.
    • 이 데이터는 in-flight data 라고 불리운다.
  4. Dataflow가 PubSub subscription에 ACK를 보낸다.
  5. PubSub subscription에 있던 message 를 삭제한다.
  6. 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 손실이 일어날 확률은 꽤 낮을 것으로 생각된다.


댓글
댓글쓰기 폼