Community

๐Ÿ“ˆ API Gateway Throttling ๊ตฌํ˜„

MSA ์„ค๊ณ„ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ API Gateway ๊ฐ€ ์žˆ๋Š”๋ฐ์š”, ์ด API Gateway ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ API Throttling ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜ ์†Œ๊ฐœํ•ด๋“œ๋ฆด ๋ธ”๋กœ๊ทธ๋Š” ์ด๋Ÿฐ API Throttling ์ด ๋ฌด์—‡์ด๊ณ  ์‹ค์ œ ๊ตฌํ˜„์€ ์–ด๋–ป๊ฒŒ ๋˜์–ด์žˆ๋Š”์ง€๋ฅผ ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ API Throttling? API ์š”์ฒญ์— ์†๋„์™€ ํšŸ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” Rate Limit ๊ธฐ๋Šฅ ์ž…๋‹ˆ๋‹ค. API Throttling ์„ ๊ตฌํ˜„ํ•˜๋ฉด ํŠน์ • ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ์ด ๋ฒ„๊ทธ๊ฐ€ ์žˆ์–ด ์š”์ฒญ๋Ÿ‰์ด ํญ์ฆํ•˜๊ฑฐ๋‚˜ ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ DoS(Denial of service)์™€ ๊ฐ™์€ ๊ณต๊ฒฉ์„ ์‹œ๋„ํ•˜๋”๋ผ๋„ ์„œ๋น„์Šค ๊ฐ€์šฉ์„ฑ(Availability)์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ API Throttling ์ข…๋ฅ˜ API Throttling ์˜ ๊ตฌํ˜„์€ ์ผ๋ฐ˜์ ์œผ๋กœ Bucket ๊ณผ Window ๋ฅผ ์ปจ์…‰์œผ๋กœ ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. โœ”๏ธ Leaky Bucket - https://en.wikipedia.org/wiki/Leaky_bucket โœ”๏ธ Token Bucket - https://en.wikipedia.org/wiki/Token_bucket โœ”๏ธ Fixed Window, Sliding Window- https://konghq.com/blog/how-to-design-a-scalable-rate-limiting-algorithm/ ๐Ÿ“Œ Leaky Bucket - ๊ณ ์ •๋œ ๋ฒ„ํ‚ท์ตœ๋Œ€๊นŠ์ด(T)์˜ ๋ฒ„ํ‚ท์— ๋„คํŠธ์›Œํฌ ์š”์ฒญ ์œ ์ž…์†๋„์˜ ํ•œ๊ณ„๊ฐ’(ฯ„)์„ ์ •ํ•˜๊ณ  ์ง€์ •๋œ ์†๋„์— ๋งž์ถฐ์„œ ์ผ์ •ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํ•œ๊ณ„๊ฐ’์„ ์ดˆ๊ณผํ•˜๋ฉด ๊ทธ ๋’ค์— ์œ ์ž…๋œ ์š”์ฒญ์€ ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. - ๊ณ ์ •๋œ ์ฒ˜๋ฆฌ๋Ÿ‰(๊ฐœ์ˆ˜/์†๋„)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘์„ ํ•˜๊ธฐ์—, ์•ˆ์ •๋œ ์ฒ˜๋ฆฌ์œจ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. - Peek ์‹œ๊ฐ„์— ์ ์ ˆํ•œ Rate ์ธ์ž๋ฅผ ๋ฐฐ์ •ํ•˜์ง€ ๋ชปํ•˜๋ฉด, ์‹ ๊ทœ ์š”์ฒญ๊ฑด๋“ค์ด Queue ์—์„œ ๋„˜์ณ๋ฒ„๋ฆฌ๊ฒŒ๋˜๊ณ  ๋‹ค์Œ Rate Time ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ Token Bucket - Bucket ์— ์ €์žฅ ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํ† ํฐ์˜ ์ˆซ์ž๋ฅผ ์ •ํ•˜๊ณ  ์ผ์ •์ฃผ๊ธฐ๋กœ ํ•ด๋‹น ํ† ํฐ์„ ์ฑ„์›Œ์ฃผ๋„๋ก ํ•˜๋Š” ์ƒํƒœ์—์„œ ์š”์ฒญ๋งˆ๋‹ค ํŠน์ • ๊ฐฏ์ˆ˜์˜ ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํ† ํฐ์ด ์—†์œผ๋ฉด ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. - ์งง์€ ์‹œ๊ฐ„์— ์ง‘์ค‘๋˜๋Š” ํŠธ๋ž˜ํ”ฝ๋„ ํ† ํฐ๋งŒ ์žˆ์œผ๋ฉด ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ Rate Time ์„ ๊ธฐ๋‹ค๋ ค์•ผํ•˜๋Š” Leaky Bucket ์˜ ๋‹จ์ ์ด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. - ์ดˆ๋‹น์ฒ˜๋ฆฌ๋Ÿ‰๊ณผ ์ตœ๋Œ€ ๋ฒ„ํ‚ทํฌ๊ธฐ์˜ ๊ฐ’์„ ์ ์ ˆํžˆ ํŠœ๋‹ํ•ด์•ผํ•˜๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต์œ ๋“œ๋ฆฐ ๋ธ”๋กœ๊ทธ์— ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…๊ณผ ๊ตฌํ˜„ ๋‚ด์šฉ์ด ์žˆ์œผ๋‹ˆ ๊ด€์‹ฌ์žˆ์œผ์‹  ๋ถ„๋“ค๊ป˜์„œ๋Š” ํ•œ๋ฒˆ ๋ณด์‹œ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ“š ํ•จ๊ป˜๋ณด๋ฉด ์ข‹์€ ๊ธ€ - ๐Ÿงฉ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์„ค๊ณ„ ํŒจํ„ด: https://careerly.co.kr/comments/84921?utm_campaign=self-share https://doublem.org/api-gateway-basic/

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค