๐ง Cloud Pub/Sub ์ด๋
๋์ฉ๋ ๋ถ์ฐ ํ ์๋น์ค์ด๋ฉฐ ๋ฉ์์ง ์์คํ ์ด๋ค. ๋ฉ์์ง๋ฅผ Queue์ ์์๋๋ ํ ํฝ์ ์์ฑํ๊ณ ๊ทธ ํ ํฝ์ ๊ตฌ๋ ํ๋ ๊ตฌ๋ ์๋ฅผ ๋ง๋ค์ด ๋ฉ์์ง๋ฅผ ์๋นํ๋ ์์คํ ์ด๋ค. Pub/Sub์ ํตํด ์๋น์ค๋ ๋น๋๊ธฐ์ ์ผ๋ก 100๋ฐ๋ฆฌ ์ด์ ์ง์ฐ ์๊ฐ์ผ๋ก ํต์ ํ ์ ์๋ค.
๐ Cloud Pub/Sub ์ ํต์ฌ ๊ฐ๋
Topic: ๊ฒ์์๊ฐ ๋ฉ์์ง๋ฅผ ์ ์กํ๋ ๋ฆฌ์์ค
Message: ๊ฒ์์๊ฐ Topic ์ ์ ๋ฌํด ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ตฌ๋ ์์๊ฒ ์ ๋ฌ๋๋ ๋ฐ์ดํฐ์ ์์ฑ์ ์กฐํฉ
Subscriber: ๋จ์ผ ๋๋ ๋ค์ค ์ฃผ์ ์ ๋ํ ๊ตฌ๋ ์ ์ฌ์ฉํ์ฌ ๋ฉ์์ง๋ฅผ ์์ ํ๋ ์ ํ๋ฆฌ์ผ์ด์
Acknowledgement(or "Ack"): Subscriber ๊ฐ ๋ฉ์์ง๋ฅผ ์ ์์ ์ผ๋ก ์์ ํ ํ ๊ตฌ๋ ์๊ฐ Pub/Sub ์ ๋ณด๋ด๋ ์ ํธ. ์ด Ack์ ๋ฐ์ ํ์ธ๋ ๋ฉ์์ง๋ ๊ตฌ๋ ๋ฉ์์ง ํ์์ ์ญ์ ๋๋ค.
Push and Pull: ๋ ๊ฐ์ง ๋ฉ์์ง ์ ์ก๋ฐฉ๋ฒ. Push์ ๊ฒฝ์ฐ ๊ตฌ๋ ์๊ฐ ์ ํํ ์๋ํฌ์ธํธ๋ก Pub/Sub ์ด ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋๊ฒ. Pull์ ๊ฒฝ์ฐ ๊ตฌ๋ ์๊ฐ ๋ฉ์์ง๋ฅผ Pull ํ๋ ๊ฒ
๊ทธ์ค ๋๋ Push์ Pull์ ๊ฐ๋ ์ด ์กฐ๊ธ ํท๊ฐ๋ ธ๋ค.
โ๏ธ Push/Pull ๊ตฌ๋ ๋ฐฉ๋ฒ
์๋ ํ์ด๋ผ์ดํธํ ๋ถ๋ถ์ด ํต์ฌ์ธ ๊ฒ ๊ฐ๋ค.
Pull: Subscriber ๊ฐ Message ๋ฅผ ์์ฒญํ ๋ ์ ๋ฌ๋ฐ๋ ๊ตฌ๋ ๋ฐฉ์
์ฆ, ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Pull ๋ฐฉ์์ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ฉด Pub/Sub ์์ ๋ณด๋ด์ฃผ๋ ํ์์ด๊ณ Subscriber ์๊ฒ์ Ack์ ๋ฐ์ผ๋ฉด ๋ฉ์์ง๋ ์ญ์ ๋๋ค.
Push: Message ๊ฐ ์ค๋ฉด ๋ฐ๋ก Subscriber ์๊ฒ ์ ๋ฌ๋๋ ๋ฐฉ์
Push ๋ฐฉ์์ Topic ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ก๋์๋ง์ Subscriber์๊ฒ ๋ฐ๋ก ๋ณด๋ด์ฃผ๊ณ Subscriber ๊ฐ Ack์ ์ ์กํ๋ฉด ๋ฉ์์ง๋ ์ญ์ ๋๋ค.
GCP์ EventArc ์๋น์ค๊ฐ ์๋๋ฐ ์ด ์๋น์ค๊ฐ ๋ฐ๋ก Push ๋ฐฉ์์ผ๋ก ์๋๋๋ค.
๋ฐ๋ผ๋ณด๊ณ ์๋ ํน์ cloud ์๋น์ค์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ํด๋น ์ด๋ฒคํธ์ ๋ํ ๋ฉ์์ง๋ฅผ Subscriber์๊ฒ ๋ณด๋ธ๋ค.
EventArc์ ๋ํด ๊ถ๊ธํ๋ค๋ฉด ์ด ํฌ์คํธ๋ฅผ ์ฝ์ด๋ณด๋ฉด ์ข๋ค. ๊ฐ์ธ์ ์ผ๋ก ๊ตฌ๊ธ ์๋น์ค๋ ์ด ๋ถ ๋ธ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด์ ๋ง์ด ๋ฐฐ์ ๋ค. ํ์ฌ EventArc๋ฅผ ์ฌ์ฉํด ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์๋๋ฐ ํด๋น ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ฌ์ฉํ๋ EventArc์ ๋ํ ๊ธ์ ๋ ์์ธํ ์จ๋ด์ผ๊ฒ ๋ค.
๐Cloud Pub/Sub ์ค์ ์์
๋ง์ง๋ง์ผ๋ก Pub/Sub์ setting ์ ๋ํด์ ์์๋ณด์.
โ๏ธ Ack Deadline
- How long Pub/Sub waits for the subscriber to acknowledge receipt before resending the message
- Pub/Sub ์ด subscriber ์ ack message๋ฅผ ์ผ๋งํผ๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฒ ํ ๊ฑด์ง์ ๋ํ ์ค์ ์ด๋ค.
- 10s ~ 600s(10m) ๊น์ง ์ค์ ๊ฐ๋ฅํ๋ค.
- 10s๋ก ๋๋ฌด ์งง์ผ๋ฉด ๊ทธ ์ฌ์ด ack์ ๋ฐ์ง ๋ชปํด ์ค๋ณต๋ ๋ฉ์์ง๊ฐ ์ฌ๋ฌ ๋ฒ ๋ฐํ๋ ์ ์์ผ๋ ๊ตฌํํ ์๋น์ค์ ๋ง๊ฒ ์ ์กฐ์ ํ๋๋ก ํด์ผ ํ๋ค.
โ๏ธ Dead Letter
- Pub/Sub ์๋น์ค๊ฐ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ค๊ณ ํ์ง๋ง ๊ตฌ๋ ์๊ฐ ์ด๋ฅผ ํ์ธํ ์ ์๋ ๊ฒฝ์ฐ Pub/Sub๋ ์ ๋ฌํ ์ ์๋ ๋ฉ์์ง๋ฅผ ๋ฐ๋ ๋ ํฐ ์ฃผ์ ๋ก ์ ๋ฌํ ์ ์๋ค.
โ๏ธ Retention
- Retain unacknowledged messages for a specified duration. If retain acknowledged messages is enabled, acknowledged messages are retained for the same duration.
- subscriber๋ก๋ถํฐ ์ ์์ ์ธ ack์ ๋ฐ์ง ๋ชปํ ๋ฉ์์ง๋ค(์ฆ ์ ์ก๋์ง ์์๋ค๊ณ ์ฌ๊ฒจ์ง๋ ๋ฉ์์ง๋ค)์ ์ผ๋งํผ ๋์ ๋ณด๊ดํ๊ณ ์์ ๊ฒ์ธ๊ฐ์ ๋ํ ์ค์ ์ด๋ค.
โ๏ธ Backoff(Retry Policy)
- ์ฌ์๋ ์ ์ฑ ์ค ํ๋๋ก, ์ฌ์๋์ ๋ํ ํ ์ ์ค์ ํ๋ ์์๋ก ๋ณด๋ฉด ๋๋ค.
- ์ง์ ๋ฐฑ์คํ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์๋ ์ฌ์ด์ ์ ์ง์ ์ผ๋ก ์ข ๋ ๊ธด ์ง์ฐ ์๊ฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์ ์ก ์คํจ ํ Pub/Sub๋ ์ต์ ๋ฐฑ์คํ ์๊ฐ์ ๊ธฐ๋ค๋ฆฐ ํ ์ฌ์๋ํฉ๋๋ค. ๋ฉ์์ง๊ฐ ์ฐ์ํด์ ์คํจํ ๋๋ง๋ค ์ง์ฐ ์๊ฐ์ ๋ ๋ง์ ์๊ฐ์ด ์ต๋ ์ง์ฐ ์๊ฐ(0~600์ด)๊น์ง ์ถ๊ฐ๋ฉ๋๋ค.
์ฐธ๊ณ )
https://cloud.google.com/pubsub/docs/handling-failures
https://jhryu1208.github.io/gcp/2021/06/29/Cloud_Pub_Sub/
๋ค์์ ๋ฉ์์ง ํ ํ๋ซํผ์ธ ์นดํ์นด๋ก ๋ฏธ๋ ํ๋ก์ ํธ๋ฅผ ์งํํด๋ด์ผ๊ฒ ๋ค!
๋๊ธ