Message Broker Alternatives.md - 100-hours-a-week/KTB4-17th-wiki GitHub Wiki

๊ทธ์™ธ ๋Œ€์•ˆ ๋น„๊ต

RDS ์ฃผ๊ธฐ ์กฐํšŒ

๋ธŒ๋กœ์ปค ์—†์ด ๊ฐ ์ฑ„ํŒ… ์„œ๋ฒ„๋‚˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ RDS๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์กฐํšŒํ•  ์ˆ˜๋Š” ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์กฐํšŒ ๊ฐ„๊ฒฉ์ด ๋™์‹œ ์ ‘์†์ž 12.8๋งŒ ๋ช…์„ ๋ชจ๋‘ 5๋ถ„๋งˆ๋‹ค ์กฐํšŒํ•˜๋Š” ๊ตฌ์„ฑ์ด๋ผ๋ฉด ํ‰๊ท  427์กฐํšŒ/์ดˆ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋™์‹œ ์ ‘์†์ž๋ฅผ ์ „๋ถ€ 5๋ถ„๋งˆ๋‹ค ์กฐํšŒํ•˜๋Š” ๊ฒƒ๋งŒ ํ•ด๋„ ํ‰๊ท  ์•ฝ 420์กฐํšŒ/์ดˆ๊ฐ€ RDS์— ๊ธฐ๋ณธ ๋ถ€ํ•˜๋กœ ๋“ค์–ด๊ฐ„๋‹ค. ๋˜ํ•œ 5๋ถ„๋งˆ๋‹ค ์กฐํšŒํ•˜๋ฉด ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€๊ฐ€ ์˜จ ์ง€ 5๋ถ„ ๋’ค์—์•ผ ์•Œ๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์—๋Š” ๋งž์ง€ ์•Š๊ณ  ์ง€์—ฐ์„ ์ค„์ด๋ ค๊ณ  ๊ฐ„๊ฒฉ์„ ๋” ์ขํžˆ๋ฉด ๊ธฐ๋ณธ ๋ถ€ํ•˜๋Š” ๋” ๋Š˜์–ด๋‚œ๋‹ค.

Amazon SQS

SQS๋Š” ํ•˜๋‚˜์˜ ํ๋ฅผ ์—ฌ๋Ÿฌ ์„œ๋ฒ„๊ฐ€ ๋‚˜๋ˆ  ๊ฐ–๋Š” ๊ตฌ์กฐ๋ผ ์ด๋ฒคํŠธ ํ•˜๋‚˜๊ฐ€ ํ•œ ์„œ๋ฒ„ํ•œํ…Œ๋งŒ ๊ฐ„๋‹ค. ๋‘ ์„œ๋ฒ„๊ฐ€ ๊ฐ™์€ ์•Œ๋ฆผ์„ ๋‹ค ๋ฐ›๊ฒŒ ํ•˜๋ ค๋ฉด SNS๊ฐ™์€ ๋ณ„๋„์˜ ์„œ๋น„์Šค๋กœ ๋ฐ›์•„์„œ ์„œ๋ฒ„๋งˆ๋‹ค ํ๋ฅผ ๋”ฐ๋กœ ๋‘๋Š” ํŒฌ์•„์›ƒ ๊ตฌ์„ฑ์„ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‘ ์„œ๋ฒ„๊ฐ€ ๊ฐ™์€ Valkey ์ฑ„๋„์„ ๊ตฌ๋…ํ•˜๋ฉด ํŒฌ์•„์›ƒ์ด ์ž๋™์ ์œผ๋กœ ๋งŒ์กฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— SNS + SQS ์กฐํ•ฉ์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค.(https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html), SNSยทSQS ํŒฌ์•„์›ƒ

Apache Kafka

Kafka๋ฅผ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ธด ํ•˜์ง€๋งŒ ๊ฐ™์€ ์†Œ๋น„์ž ๊ทธ๋ฃน์— ์†ํ•œ ์„œ๋ฒ„๋Š” ๋ฉ”์‹œ์ง€ ํ•˜๋‚˜๋ฅผ ํ•œ ์„œ๋ฒ„๋งŒ ๋‚˜๋ˆ  ๋ฐ›์œผ๋ฏ€ ๋‘ ์„œ๋ฒ„ ๋ชจ๋‘ ๋ฐ›์œผ๋ ค๋ฉด ์„œ๋ฒ„๋งˆ๋‹ค ๋ณ„๋„์˜ ๊ทธ๋ฃน์ด ์žˆ์–ด์—ฌ ํ•œ๋‹ค. ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€๋Š” ์ด๋ฏธ RDS์— ์ €์žฅํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ Kafka์— ์ด๋ฒคํŠธ๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ทธ๋ž˜์„œ ํ˜„์žฌ๋Š” ์„ค์ •์ด ๊ฐ„๋‹จํ•œ Valkey Pub/Sub์„ ์„ ํƒํ–ˆ๋‹ค.Apache Kafka ์†Œ๋น„์ž ๋ฌธ์„œ

Redis OSS

Redis OSS๋„ Pub/Sub์„ ์ง€์› ํ•˜์ง€๋งŒ ํ˜„์žฌ ์„œ๋น„์Šค์—๋Š” Redis OSS์—๋งŒ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด๋‚˜ ๊ธฐ์กด Redis ์ „์šฉ ์˜์กด์„ฑ์ด ์—†๋‹ค. Valkey๋Š” Redis์™€ ํ˜ธํ™˜๋˜๋Š” Pub/Sub ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ํ˜„์žฌ ๊ตฌํ˜„ ๋ฐฉ์‹์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  AWS ๊ธฐ์ค€ ๋™์ผ ์กฐ๊ฑด์—์„œ Redis OSS๋ณด๋‹ค ๋…ธ๋“œ ๋น„์šฉ๋„ 20% ๋‚ฎ์•„ Valkey Pub/Sub์„ ์„ ํƒํ–ˆ๋‹ค.

Transactional Outbox ๋ฌธ์ œ ๊ณ ๋ ค

๋ฌธ์ œ )DB์™€ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์ด๋ฏ€๋กœ ์ผ๋ฐ˜์ ์ธ DB ํŠธ๋žœ์žญ์…˜ ํ•˜๋‚˜๋กœ ๋‘ ์ž‘์—…์„ ํ•จ๊ป˜ ์ปค๋ฐ‹ํ•˜๊ฑฐ๋‚˜ ๋กค๋ฐฑํ•  ์ˆ˜ ์—†์Œ.

Application
   โ”œโ”€ Database์— UPDATE
   โ””โ”€ Message Broker์— PUBLISH
   
   - ๋ฉ”์„ธ์ง€๋ธŒ๋กœ์ปค์™€ DB๋Š” ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋จ.
   - DB๋ฅผ ๋จผ์ € update ๊ฒฝ์šฐ
   - ๋ฉ”์„ธ์ง€๋ฅผ ๋จผ์ € ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ , ๋‘ ์ž‘์—…์„ ๋™์‹œ์— ์‹คํ–‰ํ•ด๋„ ์›์ž์„ฑ์€ ์ƒ๊ธฐ์ง€ ์•Š์Œ

์›๋ณธ ํ…Œ์ด๋ธ”๊ณผ Outbox ํ…Œ์ด๋ธ”์— ๊ฐ™์€ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ €์žฅํ•œ ๋’ค Relay๊ฐ€ Outbox ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์— ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰.

ํ˜„์žฌ ๋„์ž…ํ•˜์ง€ ์•Š๋Š” ์ด์œ 

๋ฐœํ–‰์ด ์œ ์‹ค๋˜๋”๋ผ๋„ ๋ฉ”์‹œ์ง€ ์›๋ณธ์€ RDS์— ์ €์žฅ๋˜์–ด ์žˆ๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์žฌ์ ‘์†ํ•  ๋•Œ ๋งˆ์ง€๋ง‰ ์ˆ˜์‹  ์ดํ›„๋ฅผ RDS์—์„œ ์กฐํšŒํ•ด ๋ณต๊ตฌํ•œ๋‹ค. ์ €์žฅ์€ ๋์œผ๋‚˜ ๋ฐœํ–‰์ด ์‹คํŒจํ•œ ๋ฉ”์‹œ์ง€๋„ ์ด ๋ณต๊ตฌ ์กฐํšŒ๊ฐ€ ์ฑ„์šด๋‹ค. Outbox ํ…Œ์ด๋ธ”๊ณผ polling์ด๋‚˜ ๋กœ๊ทธ๋ฐฉ์‹์œผ๋กœ outbox์—์„œ read์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ถ”๊ฐ€ ๊ด€๋ฆฌ ํฌ์ธํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ RDS ๋ณต๊ตฌ ๊ฒฝ๋กœ๊ฐ€ ์ œ๊ณตํ•˜๋Š”๋ฐ ๊ตณ์ด ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค