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 표준 구독자|
메시지 서비스의 성능 판단
메시지 서비스의 성능판단 요소
- 확장성
- 가용성
- 지연시간
확장성
- 주체 수
- 게시자 수
- 구독 수
- 구독자 수
- 메시지 수
- 메시지 크기
- 게시하거나 소비된 메시지 비율 (처리량)
- 특정 구독의 백로그 크기
가용성
다양한 유형의 문제를 얼마나 잘 처리해서 최종 사용자가 오류 해결을 알아차리지 못하게 하는가를 기준으로 측정
지연 시간
시스템 성능을 시간 기준으로 측정한 것으로 대부분의 서비스는 지연 시간을 최소화 하려고 합니다.
- 게시된 메시지를 확인하는데 걸리는 시간
- 게시된 메시지가 구독자에게 전달되는데 걸리는 시간
기본 아키텍처
- Pub/Sub 서버는 전 세계의 모든 GCP 리전에서 실행됩니다. 이로 인해 서비스가 빠른 글로벌 데이터 액세스를 제공하고 사용자는 메시지가 저장되는 위치를 제어
- Pub/Sub의 부하 분산 메커니즘은 IAM 및 관리 콘솔의 리소스 위치 제한 섹션에 정의된 대로 데이터 저장이 허용되는 가장 가까운 GCP 데이터 센터로 게시자 트래픽을 전송
즉, 여러 리전의 게시자가 하나의 주제에 대한 메시지를 짧은 지연 시간으로 게시할 수 있습니다. 모든 개별 메시지는 단일 리전에 저장됩니다. 하지만 하나의 주제에는 여러 리전에 저장된 메시지가 있을 수 있습니다. 구독자 클라이언트가 이 주제에 게시된 메시지를 요청하면 해당 주제에 게시된 모든 메시지의 데이터를 집계하여 클라이언트에게 전달하기 위해 가장 가까운 서버에 연결합니다.
주요 영역
데이터 영역
게시자와 구독자 간의 데이터 이동을 처리 = 메시지의 라이프사이클
서버 - 포워더 / 구독자와 연결된 부분을 구독 포워더
메시지가 거치는 과정
- 게시자가 메시지를 전송
- 메시지를 스토리지에 기록
- Pub/Sub가 메시지 수신 확인을 게시자에게 전송하고 연결된 모든 구독에 대한 메시지 전송을 보장
- 메시지를 스토리지에 기록함과 동시에 Pub/Sub가 이를 구독자에게 전달
- 구독자가 메시지 처리 확인을 Pub/Sub에 전송
- 각 구독에 대해 하나 이상의 구독자가 메시지를 확인하면 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);
'CSP (Cloud Service Provider) > GCP' 카테고리의 다른 글
Google Kubernetis Engine 구성 (0) | 2022.05.27 |
---|---|
GKE로 배포 관리하기 (3) Blue/Green 배포 (0) | 2022.05.26 |
[Google Cloud Platform] GCP 스토리지, 컨테이너 (0) | 2022.05.20 |
GKE로 배포 관리하기 (2)Canary 배포 (0) | 2022.05.20 |
[Qwiklab] ETL Processing on Google Cloud Using Dataflow and BigQuery (0) | 2022.05.18 |
댓글