본문 바로가기
CSP (Cloud Service Provider)/GCP

[GCP] Cloud pub/sub

by BTC_JGT 2022. 5. 20.

Cloud Pub/Sub

개요

네트워크를 통해 데이터 센터에 지능적으로 자동 분산됩니다.

메시징 서비스

메시지들을 큐에 넣고 차례로 전달해주는 서비스

서버가 응답을 처리하지 못할때 큐에 집어 넣어 서버가 살아 났을때 처리를 할 수도 있습니다.

Pub/Sub 구성

하나의 Topic
1개 이상의 Subscription

  • Topic(주제) : 게시자가 메시지를 전송하는 이름이 지정된 리소스
  • Subscription(구독) : 특정 주제의 메시지 수신 의향을 나타내는 이름이 지정된 항목
  • Message(메시지) : 서비스를 통해 이동하는 데이터
  • Publisher(게시자) : 특정 주제에 대한 메시지를만들어 메시지 서비스를 전송하는 사람
  • Subscriber(구독자) : 지정한 구독에 대한 메시지를 받는 사람

이벤트 제작자 및 소비자 시스템을 만들 수 있습니다.

통신

게시자는 동기식 리모트 프로시저 콜(RPC)이 아니라 이벤트를 브로드캐스트하여 구독자와 비동기적으로 통신합니다.

구글 Pub/Sub 은 Message Provider (보내는쪽)과 Message Consumer (받는쪽)이 1:1 관계가 아니라. 1:N 관계

Pull / Push 구독 방법

Pull 구독

Pull 방식은 구독자가 데이터를 요청할때 전달받는 구조의 구독 방식입니다.

Push 구독

비교

||Pull|Push|
|--|||
|엔드 포인트|자격을 증명한 인터넷 상의 모든 기기는 API 호출 가능|자격 증명이 어려운 서비스에서 하용할 수 있음|
|부하 분산|여러 구독자가 Share와 같은 Pull 요청을 구성할 수 있음|엔드포인트가 부하분산기가 될 수 있음|
|구성|구성필요 없음|내보내기 엔드포인트를 구성해야함|
|흐름 관리|구독자가 전달 속도를 조절함|Cloud Pub/Sub 서버가 자동으로 흐롬제어 구현|
|지침|대량 메시지
메시지 처리의 효율성과 처리량이 중요할 경우|Google Cloud 종속 서비스와의 환경 동일한 webgook에 의한 여러 주제를 처리해야 하는 경우
App Engine 표준 구독자|

메시지 서비스의 성능 판단

메시지 서비스의 성능판단 요소

  1. 확장성
  2. 가용성
  3. 지연시간

확장성

  • 주체 수
  • 게시자 수
  • 구독 수
  • 구독자 수
  • 메시지 수
  • 메시지 크기
  • 게시하거나 소비된 메시지 비율 (처리량)
  • 특정 구독의 백로그 크기

가용성

다양한 유형의 문제를 얼마나 잘 처리해서 최종 사용자가 오류 해결을 알아차리지 못하게 하는가를 기준으로 측정

지연 시간

시스템 성능을 시간 기준으로 측정한 것으로 대부분의 서비스는 지연 시간을 최소화 하려고 합니다.

  • 게시된 메시지를 확인하는데 걸리는 시간
  • 게시된 메시지가 구독자에게 전달되는데 걸리는 시간

기본 아키텍처

  • Pub/Sub 서버는 전 세계의 모든 GCP 리전에서 실행됩니다. 이로 인해 서비스가 빠른 글로벌 데이터 액세스를 제공하고 사용자는 메시지가 저장되는 위치를 제어
  • Pub/Sub의 부하 분산 메커니즘은 IAM 및 관리 콘솔의 리소스 위치 제한 섹션에 정의된 대로 데이터 저장이 허용되는 가장 가까운 GCP 데이터 센터로 게시자 트래픽을 전송

즉, 여러 리전의 게시자가 하나의 주제에 대한 메시지를 짧은 지연 시간으로 게시할 수 있습니다. 모든 개별 메시지는 단일 리전에 저장됩니다. 하지만 하나의 주제에는 여러 리전에 저장된 메시지가 있을 수 있습니다. 구독자 클라이언트가 이 주제에 게시된 메시지를 요청하면 해당 주제에 게시된 모든 메시지의 데이터를 집계하여 클라이언트에게 전달하기 위해 가장 가까운 서버에 연결합니다.

주요 영역

데이터 영역

게시자와 구독자 간의 데이터 이동을 처리 = 메시지의 라이프사이클

서버 - 포워더 / 구독자와 연결된 부분을 구독 포워더

메시지가 거치는 과정

  1. 게시자가 메시지를 전송
  2. 메시지를 스토리지에 기록
  3. Pub/Sub가 메시지 수신 확인을 게시자에게 전송하고 연결된 모든 구독에 대한 메시지 전송을 보장
  4. 메시지를 스토리지에 기록함과 동시에 Pub/Sub가 이를 구독자에게 전달
  5. 구독자가 메시지 처리 확인을 Pub/Sub에 전송
  6. 각 구독에 대해 하나 이상의 구독자가 메시지를 확인하면 Pub/Sub가 메시지를 스토리지에서 삭제

제어 영역

게시자와 구독자를 데이터 영역의 서버에 할당하는 작업을 처리

서버 - 라우터

Code

pull 구독 만들기

const {PubSub} = require('@google-cloud/pubsub');
const pubSubClient = new PubSub();

async function createSubscription() {
  await pubSubClient.topic(topicName).createSubscription(subscriptionName);
  console.log(`Subscription ${subscriptionName} created.`);
}

createSubscription().catch(console.error);

push 구독 만들기

const {PubSub} = require('@google-cloud/pubsub');

const pubSubClient = new PubSub();

async function createPushSubscription() {
  const options = {
    pushConfig: {
      pushEndpoint: `https://${pubSubClient.projectId}.appspot.com/push`,
    },
  };
  await pubSubClient
    .topic(topicName)
    .createSubscription(subscriptionName, options);
  console.log(`Subscription ${subscriptionName} created.`);
}
createPushSubscription().catch(console.error);

댓글