๋Œ€๊ธฐ์—ด ์„œ๋น„์Šค 10๋งŒ๋ช… ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ ์—ฌ์ •๊ธฐ(feat. AWS Support)

2chan
  • #virtual waiting room
  • #redis
  • #load test
  • #elasticache

๋Œ€๊ธฐ์—ด ์„œ๋น„์Šค ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ

์›๋”์›” ๋ธ”๋กœ๊ทธ ์ดˆ์ฐฝ๊ธฐ์— ๋Œ€๊ธฐ์—ด ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๊ธ€์„ ์ž‘์„ฑํ•œ ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ํ•ด๋‹น ๋Œ€๊ธฐ์—ด ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๊ฒช์—ˆ๋˜ ๋‚ด์šฉ๋“ค์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๊ธฐ์—ด ์„œ๋น„์Šค ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•œ VWR(๋Œ€๊ธฐ์—ด ์„œ๋น„์Šค)๋ฅผ ๋จผ์ € ๋ณด๊ณ  ์˜ค์‹œ๋Š” ๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ธํ”„๋ผ ๊ตฌ์กฐ ๋ณ€๊ฒฝ

์œ„ ํฌ์ŠคํŠธ๋ฅผ ๋ณด๊ณ  ์˜ค์‹  ๋ถ„๋“ค์€ ์•„์‹œ๊ฒ ์ง€๋งŒ, ๊ธฐ์กด์˜ ๋Œ€๊ธฐ์—ด ์„œ๋น„์Šค๋Š” Api Gateway + Lambda์˜ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์„œ๋น„์Šค๋Š” ์ง€๊ธˆ๊นŒ์ง€ ๋งŽ์€ ์•„ํ‹ฐ์ŠคํŠธ๋“ค์˜ ์ƒํ’ˆ ํŒ๋งค์™€ ์ด๋ฒคํŠธ์— ์‚ฌ์šฉ๋˜์—ˆ๊ณ  22๋…„๋„์˜ ํ•˜์šฐ์Šค ์˜ค๋ธŒ ์›๋” ์ฝ˜์„œํŠธ ํ‹ฐ์ผ“ ํŒ๋งค ๋‹น์‹œ์—๋Š” ์ˆ˜์ฒœ๋ช…์˜ ์ ‘์†์ž๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํšŒ์‚ฌ๊ฐ€ ์„ฑ์žฅํ•จ์— ๋”ฐ๋ผ ๋Œ€ํ˜• ์•„ํ‹ฐ์ŠคํŠธ๋“ค์ด ์ž…์ ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ , ํŠธ๋ž˜ํ”ฝ์ด ๋น ๋ฅด๊ฒŒ ๋Š˜์–ด๋‚˜๋ฉด์„œ ์•ฝ 2๋…„์ „์— ๋งŒ๋“ค์—ˆ๋˜ ์ธํ”„๋ผ๋กœ๋Š” ๋” ๋งŽ์€ ์ ‘์†์ž๋ฅผ ๊ฐ๋‹นํ•˜๊ธฐ ์–ด๋ ค์›Œ์กŒ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฐฑ์—”๋“œ ํŒ€์—์„œ๋Š” ์ตœ๋Œ€ ๋™์ ‘์ž 10๋งŒ๋ช…์„ ๋ชฉํ‘œ๋กœ ์žก๊ณ  ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์ธํ”„๋ผ ๋ฐ ์ฝ”๋“œ ๊ฐœ์„ ์„ ํ•˜๊ธฐ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๋จผ์ € ๊ฐœ์„ ์ด ํ•„์š”ํ–ˆ๋˜ ๊ฒƒ์€ Api Gateway์˜€์Šต๋‹ˆ๋‹ค. Api Gateway๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Request Per Second(RPS) limit์€ 1๋งŒํšŒ์ด๋ฉฐ burst ํ• ๋‹น๋Ÿ‰์— ๋”ฐ๋ผ ๋” ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(burst ํ• ๋‹น๋Ÿ‰์€ region๋ณ„๋กœ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.)

์ด๋Š” ์ €ํฌ์˜ ๋ชฉํ‘œ์ธ 10๋งŒ์— ๋น„ํ•˜๋ฉด ๋งŽ์ด ๋ถ€์กฑํ•œ ์ˆ˜์น˜์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ region๋ณ„๋กœ limit์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ ๊ฐ™์€ region์— Api Gateway๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๋ฉด limit๋„ ๊ฐ™์ด ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๊ณ , RPS limit์„ ๋Š˜๋ฆด ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ๋Œ€์‹  Api Gateway Timeout์„ ์ค„์—ฌ์•ผ ํ•œ๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ Application Load Balancer(ALB)๋กœ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ ALB๋Š” RPS limit์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๋ฒˆ์— ์ ‘์†์ž๊ฐ€ ๋ชฐ๋ ค 10๋งŒํšŒ์˜ ๋ถ€ํ•˜๊ฐ€ ๋“ค์–ด์™€๋„ ๊ฒฌ๋”œ ๊ฒƒ์ด๋ผ ์˜ˆ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

API๋Š” Lambda๋กœ ๋ฐฐํฌ๋˜์–ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Lambda๋Š” ๋ช‡๊ฐ€์ง€ ๋‹จ์ ์ด ์žˆ์—ˆ๋Š”๋ฐ ์ฒซ๋ฒˆ์งธ๋Š” cold start์ž…๋‹ˆ๋‹ค. ๋ถ€ํ•˜๊ฐ€ ํ•œ๋ฒˆ์— ๋ชฐ๋ฆฌ๋Š” ๊ฒฝ์šฐ ๊ฐ€์žฅ ํฐ ๋ณ‘๋ชฉ์ด ๋ฉ๋‹ˆ๋‹ค.

๋‘๋ฒˆ์งธ๋กœ๋Š” Lambda์˜ ์žฌ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ถ€ํ•˜๋ฅผ ์ฃผ๊ณ  ์—ฌ๋Ÿฌ๋ฒˆ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด์•˜์„ ๋•Œ, latency๊ฐ€ ์ผ์ •ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Lambda ํ•จ์ˆ˜๊ฐ€ ์™„๋ฃŒ๋œ๋‹ค๊ณ  ํ•ด์„œ ๋ฐ”๋กœ ์ข…๋ฃŒ๋˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๋‹ค์Œ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์„ ์˜ˆ์ƒํ•˜์—ฌ ์ผ์ • ์‹œ๊ฐ„๋™์•ˆ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์œ ์ง€ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ์š”, ์ด ๋Œ€๊ธฐํ•˜๋Š” ์‹œ๊ฐ„์ด ๋žœ๋ค์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด 5๋งŒํšŒ์˜ API ์ฝœ ํ…Œ์ŠคํŠธ๋ฅผ ์ผ์ • ์‹œ๊ฐ„์„ ๋‘๊ณ  2๋ฒˆ ์ง„ํ–‰ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฒซ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ์—์„œ๋Š” 5๋งŒ๊ฐœ์˜ ๋žŒ๋‹ค๊ฐ€ ์ „๋ถ€ cold start๋กœ ์ธํ•œ ์ง€์—ฐ์ด ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‘๋ฒˆ์งธ ์‹คํ–‰ํ•œ ์‹œ์ ์—์„œ๋Š” ์ด์ „์— ์‹คํ–‰๋œ 5๋งŒ๊ฐœ์˜ Lambda์ค‘์—์„œ ๋ช‡๊ฐœ๊ฐ€ ์žฌ์‹คํ–‰๋ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์ธ์ง€, ๋ช‡๊ฐœ๊ฐ€ ์ข…๋ฃŒ๋˜์„œ cold start๊ฐ€ ๋˜๋Š”๊ฑด์ง€์˜ ์—ฌ๋ถ€๋Š” ๋งค๋ฒˆ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์•Œ ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์‚ฌ์šฉ์ž๋Š” ์ด ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์„ค์ •ํ•  ์ˆ˜ ์—†๊ณ  AWS์˜ ๋‚ด๋ถ€ ์„ค์ •์— ์˜ํ•ด ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋™์ผ ๋ถ€ํ•˜๋ฅผ ์ฃผ๋ฉฐ ์ง„ํ–‰ํ•œ ํ…Œ์ŠคํŠธ์—์„œ๋„ ๊ท ๋“ฑํ•œ latency๋ฅผ ์–ป์–ด๋‚ด๊ธฐ ์–ด๋ ค์› ๊ณ  ๋ถ€ํ•˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก latency์˜ ํŽธ์ฐจ๋„ ์ปค์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด API๋“ค์€ ECS(Fargate) ๋กœ ์ด์ „ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์€ ALB + ECS ๋กœ ์ธํ”„๋ผ๋ฅผ ์ด์ „ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๋ฐฉ์‹๊ณผ ์‹œ๋‚˜๋ฆฌ์˜ค

ํ…Œ์ŠคํŠธ๋Š” Locust ํˆด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒ€ ๋‚ด์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜์–ด ๋งŽ์€ ์ง€์‹์ด ์Œ“์ธ ์ƒํƒœ์ด๊ธฐ๋„ ํ–ˆ์—ˆ๊ณ  ์ด์ „์— ์‚ฌ์šฉํ•ด๋ณด์•˜๋˜ artillery์— ๋น„ํ•ด์„œ ์‹œ๋‚˜๋ฆฌ์˜ค ์ž‘์„ฑ์ด ๋งค์šฐ ์ˆ˜์›”ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ์œผ๋กœ ์ž‘์„ฑ์„ ํ•ด์•ผํ•ด์„œ ์•ฝ๊ฐ„์˜ ์–ธ์–ด ๊ณต๋ถ€๊ฐ€ ํ•„์š”ํ•˜๊ธด ํ•˜์ง€๋งŒ ์‹œ๋‚˜๋ฆฌ์˜ค ์ž‘์„ฑ๋งŒ ํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Locust๋ฅผ ECS(Fargate) ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€๋Š”๋ฐ, ์•„๋ž˜๋Š” ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

  • task1: ๋Œ€๊ธฐ์—ด์— ๋ณธ์ธ์˜ ์ •๋ณด๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.
  • task2: ๋‚ด๊ฐ€ ๋Œ€๊ธฐ์—ด์—์„œ ๊ณ„์† ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๋Š”์ง€, ์•„๋‹ˆ๋ฉด ํ†ต๊ณผํ• ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์•Œ๋ ค์ฃผ๋Š” API๋ฅผ 1์ดˆ์— 1๋ฒˆ์”ฉ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. task1์˜ ๊ฒฐ๊ณผ๋ฅผ task2์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— SequentialTaskSet๋ฅผ ์ ์šฉํ•˜์—ฌ ์ˆœ์ฐจ ์‹คํ–‰์„ ๋ณด์žฅํ•ด์ค๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ 10๋งŒ๋ช…์ด ๋™์‹œ์— ๋“ค์–ด์˜จ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด Max RPS๋Š” 10๋งŒํšŒ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

class QuickstartUser(SequentialTaskSet):
    message_id = None

    @task()
    def _vwr(self):
        response = self.client.post("/test/example-send", json={"message": "Hello, World!"})
        print(response)
        self.message_id = response['MessageId']

    @task()
    def _polling(self):
        while True:
            self.client.post("/test/example-polling", json={"messageId": "Hello, World!"})
            time.sleep(1)

class AppUser(FastHttpUser):
    tasks = [QuickstartUser]

ํ…Œ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ๋Š” ์ฒซ๋ฒˆ์งธ๋กœ ์ตœ๋Œ€ํ•œ ์‹ค์ œ ์ƒํ™ฉ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ํ•˜๋ ค๊ณ  ํ•œ๋ฒˆ์— 5๋งŒ, 10๋งŒ์˜ ๋ถ€ํ•˜๋ฅผ ํ•œ๋ฒˆ์— ์ฃผ๋Š” ๋ฐฉ์‹์„ ์„ ํƒํ–ˆ์—ˆ๋Š”๋ฐ ํŠน์ • ์ˆ˜์น˜ ์ด์ƒ์œผ๋กœ ๋ถ€ํ•˜๋ฅผ ์ฃผ๋ฉด Locust์˜ ๋ถ€ํ•˜๋ถ„์‚ฐ๊ธฐ์—์„œ ๊ทธ ๋ถ€ํ•˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ณผ์ •์—์„œ๋ถ€ํ„ฐ latency๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์‹ค์ œ๋กœ ๋Œ€๊ธฐ์—ด ์„œ๋น„์Šค๊ฐ€ ๋Š๋ฆฐ ๊ฒƒ์ด ์•„๋‹Œ๋ฐ๋„, ์ดˆ๋ฐ˜ ๋ถ€ํ•˜๋ถ„์‚ฐ๊ธฐ์— ์˜ํ•œ latency ๋•Œ๋ฌธ์— p99์ง€ํ‘œ๊ฐ€ ๋งค์šฐ ๋Š๋ฆฐ ๊ฒƒ์ฒ˜๋Ÿผ ๋‚˜์˜ต๋‹ˆ๋‹ค.

์ˆ˜์ดˆ ๋’ค, ์ดˆ๋ฐ˜์— ๋ฐœ์ƒํ–ˆ๋˜ latency๊ฐ€ ์„œ์„œํžˆ ์ค„์–ด๋“ฆ์— ๋”ฐ๋ผ(๋ถ€ํ•˜๋ถ„์‚ฐ๊ธฐ์˜ ํ™œ์„ฑํ™”) p95, medium๊ณผ ๊ฐ™์€ ์ง€ํ‘œ๋Š” ์•ˆ์ •์ ์œผ๋กœ ๋‚˜์˜ค๊ฒŒ ๋˜์–ด ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘๊ณ„ํ•˜๋Š” ๋ฐ์— ์žˆ์–ด์„œ๋Š” ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์•˜์ง€๋งŒ ์„œ๋น„์Šค์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ ํ…Œ์ŠคํŠธ ํˆด์˜ ์ด์Šˆ๋กœ ์ด๋Ÿฐ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค๋Š”๊ฒŒ ์กฐ๊ธˆ ์•„์‰ฌ์› ์Šต๋‹ˆ๋‹ค. Locust์˜ ์ดˆ๋ฐ˜ latency์— ๊ด€ํ•œ ์ด์Šˆ๋Š” ์•„๋ž˜ ๋งํฌ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ํ•œ๊ฐ€์ง€์˜ ๋ฐฉ๋ฒ•์„ ๋” ์‚ฌ์šฉํ•ด์„œ ํ…Œ์ŠคํŠธํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” Locust์—์„œ ์ง€์›ํ•˜๋Š” ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค.

๋ถ€ํ•˜ํ…Œ์ŠคํŠธ3

์œ ์ €๋ฅผ ์„œ์„œํžˆ ์˜ฌ๋ ค peak๊นŒ์ง€ ๋„๋‹ฌ์‹œํ‚ค๊ณ  ๊ทธ๊ฒƒ์„ ๊ณ„์† ์œ ์ง€ํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ค‘์ ์ ์œผ๋กœ ๋ณผ ๊ฒƒ์€ Total Request Per Second์™€ Response Time 2๊ฐ€์ง€์ธ๋ฐ ์ด๊ฒƒ์ด ๊ณ„์† ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€๋˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์ง„์„ ๋ณด๋ฉด ์œ ์ €๊ฐ€ ๊ธ‰์ฆํ• ๋•Œ Response Time์ด ์‚ด์ง ๋ถˆ์•ˆ์ •ํ•˜์ง€๋งŒ (๊ทธ๋ž˜๋„ 200ms ์ดํ•˜๋ผ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค), peak๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ„ ์ดํ›„์—๋Š” ์•ˆ์ •์ ์ธ ๋ชจ์Šต์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ˆœ๊ฐ„์ ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ถ€ํ•˜๋ฅผ ๋ฐ›์•„๋‚ธ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ์ด๊ฒƒ์„ ์œ ์ง€ํ•˜๋‹ค๊ฐ€ ๊ฐ‘์ž๊ธฐ cpu๊ฐ€ ํŠ„๋‹ค๊ฑฐ๋‚˜, ์–ด๋”˜๊ฐ€์—์„œ ๋ณ‘๋ชฉ์ด ์ƒ๊ฒจ latency๊ฐ€ ํŠ€๋Š” ๊ฒฝ์šฐ๋„ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€ํ•˜๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ ๋˜ํ•œ ๋Œ€๊ธฐ์—ด ์„œ๋น„์Šค์—์„œ๋Š” ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋‘๊ฐ€์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ํ…Œ์ŠคํŠธ์˜ ์‹ ๋ขฐ๋„๋ฅผ ๋†’์˜€์Šต๋‹ˆ๋‹ค.

ECS ์ง€ํ‘œ๋Š” ์–ด๋–ค ๊ฒƒ์„ ๋ด์•ผ ํ• ๊นŒ?

๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ŠคํŽ™์„ ์‚ฐ์ •ํ•˜๋Š” ๊ธฐ์ค€์ด ๋˜๋Š” ๊ฒƒ์ด ์ง€ํ‘œ์ธ๋ฐ ์–ด๋–ค ์ง€ํ‘œ๋“ค์„ ์ฃผ๋กœ ๋ณด์•˜๋Š”์ง€ ๊ทธ๋ฆฌ๊ณ  ์ŠคํŽ™ ์‚ฐ์ •์˜ ๊ณผ์ •์— ๋Œ€ํ•ด์„œ ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ์‚ฌ์ง„์€ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ œ๊ฐ€ ์ž„์‹œ๋กœ ๋งŒ๋“  Cloudwatch Dashboard ์ค‘ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

๋ถ€ํ•˜ํ…Œ์ŠคํŠธ1

ECS์˜ ๊ฒฝ์šฐ๋Š” cpu, memory์˜ max๊ฐ’์„ ์œ„์ฃผ๋กœ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. memory์˜ ๊ฒฝ์šฐ ํฌ๊ฒŒ ํŠ€๋Š” ๋ถ€๋ถ„์€ ์—†์—ˆ๊ณ , cpu์˜ ๊ฒฝ์šฐ๋Š” 60%๋ฅผ ์ž„๊ณ„์น˜๋กœ ๋‘๊ณ  ์ŠคํŽ™์„ ์กฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž„๊ณ„์น˜์˜ ๊ฒฝ์šฐ๋Š” ์„œ๋น„์Šค์˜ ๋ชฉ์ ๊ณผ client์˜ ๋ฏผ๊ฐ๋„์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ช…ํ™•ํ•œ ์ •์˜๋ฅผ ๋‚ด๋ฆฌ๊ธฐ ์–ด๋ ค์›Œ ๋‚ด๋ถ€์ ์œผ๋กœ ํŒ๋‹จํ•˜์—ฌ ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Network Bandwidth(๋Œ€์—ญํญ)๋„ ์ค‘์š”ํ•œ ์ง€ํ‘œ ์ค‘์— ํ•˜๋‚˜์ธ๋ฐ ๋Œ€๊ธฐ์—ด ์„œ๋น„์Šค๋Š” ๊ต‰์žฅํžˆ ์ž‘์€ ํŒจํ‚ท์„ ์†ก์ˆ˜์‹ ํ•˜๊ธฐ ๋–„๋ฌธ์— ํ•ด๋‹น ์ง€ํ‘œ์— ๊ฑฐ์˜ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ AWS์—์„œ๋Š” ๊ณต์‹์ ์œผ๋กœ ECS์˜ ์ŠคํŽ™์— ๋”ฐ๋ฅธ ๋Œ€์—ญํญ์„ ๊ณต๊ฐœํ•˜๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ช‡๋ช‡ ๋ถ„๋“ค์ด ์ง์ ‘ ๋Œ€์—ญํญ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ๊ณต์œ ํ•ด ์ฃผ์‹  ๊ฒŒ์‹œ๋ฌผ ๋ณด๊ณ  ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, ์ €๋Š” ๋”œ๋ฆฌ์…”์Šค ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ - ECS Fargate ์„ฑ๋Šฅ ์ธก์ •ํ•˜๊ธฐ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.

ElastiCache๋Š” ์›Œ๋‚™ ๋งŽ์€ ์–‘์˜ ๋ถ€ํ•˜๋ฅผ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์•Œ๋ ค์ ธ ์žˆ์–ด์„œ, ECS์—์„œ ๋ณ‘๋ชฉ์ด ์•ˆ ์ƒ๊ธฐ๋„๋ก ์‹ ๊ฒฝ์„ ์ข€ ๋” ์ผ์—ˆ์Šต๋‹ˆ๋‹ค. Locust๋กœ RPS๋ฅผ ๊ณ„์† ํ™•์ธํ•˜๋ฉด์„œ RPS๊ฐ€ ๋งŽ์ด ๋ฐ€๋ฆฐ๋‹ค ์‹ถ์œผ๋ฉด task์˜ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋Š” ์Šค์ผ€์ผ ์•„์›ƒ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

ElastiCache(Redis) ์ง€ํ‘œ๋Š” ์–ด๋–ค ๊ฒƒ์„ ๋ด์•ผ ํ• ๊นŒ?

ElastiCache์˜ ๊ฒฝ์šฐ ๋Œ€๊ธฐ์—ด ์„œ๋น„์Šค์—์„œ ๋ฉ”์ธ ์ €์žฅ์†Œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ์ง€ํ‘œ๋“ค์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์˜€๋Š”๋ฐ ๊ทธ ๊ณผ์ •์—์„œ AWS Support์˜ ๋„์›€์„ ๋งŽ์ด ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

๋ถ€ํ•˜ํ…Œ์ŠคํŠธ2

๋Œ€ํ‘œ์ ์ธ ์ง€ํ‘œ 2๊ฐ€์ง€๋Š” CPUUtilization, EngineCPUUtilization ์ž…๋‹ˆ๋‹ค. ๊ฐ ์ง€ํ‘œ์˜ ์ •์˜๋ฅผ ๋จผ์ € ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด EngineCPUUtilization๋Š” Redis ๋ฉ”์ธ thread์˜ CPU ์‚ฌ์šฉ๋ฅ , CPUUtilization๋Š” ์ „์ฒด ํ˜ธ์ŠคํŠธ(Redis๊ฐ€ ํฌํ•จ๋œ ๊ฐ€์ƒ์ปดํ“จํ„ฐ ์ „์ฒด)์— ๋Œ€ํ•œ CPU ์‚ฌ์šฉ๋ฅ ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. AWS ๊ณต์‹๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด vCpu๊ฐ€ 4๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ EngineCPUUtilization๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ์ด์œ ๋Š” Redis์˜ ์„œ๋ธŒ thread๊ฐ€ cpu์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์„œ๋ธŒ thread๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์— ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜ ๋ฐฑ์—…์‹œ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. vCpu๊ฐ€ 4๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉ”์ธ thread๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” vCpu ์ด์™ธ์— 3๊ฐœ์˜ vCpu๊ฐ€ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์—ฌ์œ  vCpu๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฉ”์ธ thread๊ฐ€ ์„ฑ๋Šฅ์ด ๋ถ€์กฑํ•œ ์ƒํ™ฉ(EngineCPUUtilization์ด ๋†’์œผ๋‚˜ CPUUtilization์€ ๋‚ฎ์Œ)์ด ์ผ๋ฐ˜์ ์ด๊ธฐ์— EngineCPUUtilization์„ ๊ธฐ์ค€์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. EngineCPUUtilization์€ ๋ฉ”์ธ thread์˜ ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์— ๋†’์•„์ง€๋ฉฐ CPUUtilization์€ OS ๋ ˆ๋ฒจ์—์„œ ์ „์ฒด vCpu์˜ ๋ถ€ํ•˜๊ฐ€ ๋†’์•„์ง€๋Š” ์ƒํ™ฉ์— ๋†’์•„์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค

๊ทธ๋ ‡๋‹ค๋ฉด vCpu๊ฐ€ 4๊ฐœ ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ๋Š” ์™œ CPUUtilization๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๋Š”๊ฒƒ์ด ์ข‹์„๊นŒ์š”? ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์„œ๋ธŒ thread ๋™์ž‘์— ์˜ํ•ด ๋ฉ”์ธ thread๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” vCpu์˜ cpu ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜์—ฌ EngineCPUUtilization์˜ ์˜ํ–ฅ์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ EngineCPUUtilization๋งŒ ๋ด์„œ๋Š” ์ •ํ™•ํžˆ ์–ด๋–ค ๊ฒƒ์ด ์ง€ํ‘œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ํŒ๋‹จํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ฐ ์ง€ํ‘œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ž‘์—…์€ ์•„๋ž˜์™€ ๊ฐ™์€๋ฐ ์ด ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ElastiCache for Redis ํด๋Ÿฌ์Šคํ„ฐ์—์„œ CPU ์‚ฌ์šฉ๋Ÿ‰์ด ๋งŽ๊ฑฐ๋‚˜ ์ฆ๊ฐ€ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  • EngineCPUUtilization (๋ฉ”์ธ thread์˜ ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ): ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋†’์€ ๋ช…๋ น (keys, hkeys, hgetall, sort ๋“ฑ)์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ, ๋ถ€ํ•˜๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ, new connections์ด ๋งŽ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ
  • CPUUtilization (OS ๋ ˆ๋ฒจ์—์„œ ์ „์ฒด vCpu์˜ ๋ถ€ํ•˜๊ฐ€ ๋†’์•„์ง€๋Š” ์ƒํ™ฉ): ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ํ˜น์€ ์ปค๋„ฅ์…˜์ด ๋งŽ์€ ๊ฒฝ์šฐ

์ €๋Š” 2vCpu๋ฅผ ๊ฐ€์ง„ m6g.large ์ŠคํŽ™์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€๋Š”๋ฐ ์œ„ ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ๋ณด๋ฉด CPUUtilization๋ฅผ ์ค‘์ ์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๋Š” ๊ฒƒ์€ ๋งž์œผ๋‚˜ ๋ถ€ํ•˜๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ• ์ˆ˜๋ก EngineCPUUtilization์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— ๋‘˜ ๋‹ค ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ถ€ํ•˜๊ฐ€ ๋งŽ์•„์กŒ์„ ๋•Œ, Redis์˜ ์ŠคํŽ™์€ ์–ด๋–ค ์ง€ํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณด๊ณ  ์ •ํ•ด์•ผ ํ•˜๊ณ  ์–ด๋–ค ๋ฐฉ์‹(์Šค์ผ€์ผ ์—…/์•„์›ƒ)์„ ์‚ฌ์šฉํ•ด์„œ ์ŠคํŽ™์„ ์กฐ์ ˆํ•ด์•ผ ํ• ๊นŒ์š”? ์Šค์ผ€์ผ ์—…/์•„์›ƒ์˜ ๊ธฐ์ค€์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์Šค์ผ€์ผ ์—…
    • ๋ฐ์ดํ„ฐ ์šฉ๋Ÿ‰(memory๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ)
    • ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ
  • ์Šค์ผ€์ผ ์•„์›ƒ
    • EngineCPUUtilization๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ

๋Œ€๊ธฐ์—ด ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ memory๋‚˜ ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์ด ๋ชจ์ž๋ผ์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์˜ ๊ฒฝ์šฐ NetworkByteIn/NetworkByteOut ์ง€ํ‘œ์˜ ํ•ฉ๊ณ„๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์˜€์Šต๋‹ˆ๋‹ค. Redis๋Š” burst ๋Œ€์—ญํญ์ด ์กด์žฌํ•˜๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๊ธฐ ๋–„๋ฌธ์— burst๋ฅผ ์‚ฌ์šฉ์ค‘์ธ์ง€๋„ ํ™•์ธ์„ ๊ผญ ํ•ด๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Network I/O Allowance Exceeded ์ง€ํ‘œ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ์ง€ํ‘œ๊ฐ€ 0 ์ดˆ๊ณผ์ธ ๊ฒฝ์šฐ burst๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ๋ถ€ํ•˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก EngineCPUUtilization์˜ ์ง€ํ‘œ๊ฐ€ ๊ณ„์† ์ƒ์Šนํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ์œ„์— ์–ธ๊ธ‰ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ replica node๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐ์‹œํ‚ค๋Š” ์Šค์ผ€์ผ ์•„์›ƒ ๋ฐฉ์‹์„ ์„ ํƒํ•˜์˜€๊ณ  replica๋ฅผ ์ถ”๊ฐ€ํ• ์ˆ˜๋ก ๊ฐ node์˜ EngineCPUUtilization์˜ ์ง€ํ‘œ๊ฐ€ ๋–จ์–ด์ง€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

EngineCPUUtilization ์ง€ํ‘œ๋ฅผ ๋ณด๊ณ  Redis ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•ด ์Šค์ผ€์ผ ์—…์„ ํ•ด์•ผํ•˜๋Š”๊ฒŒ ์•„๋‹Œ๊ฐ€ ํ•˜๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ redis๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ElastiCache ์Šค์ผ€์ผ ์—…์„ ํ•˜๋ฉด vCPU ๊ฐฏ์ˆ˜, ๋ฉ”๋ชจ๋ฆฌ, ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ์ด ์ฆ๊ฐ€ํ•˜์ง€๋งŒ ๋‹จ์ผ vCPU์˜ ์„ฑ๋Šฅ์€ ๋ฐ”๋€Œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— EngineCPUUtilization ์ง€ํ‘œ์˜ ๊ฐœ์„ ์„ ๊ธฐ๋Œ€ํ•˜๊ธฐ๋Š” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋™์ผ ๋ถ€ํ•˜๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์ŠคํŽ™์—…์„ ๋ช‡๋ฒˆ ์ง„ํ–‰ํ•ด ๋ณธ ์ ์ด ์žˆ์—ˆ๋Š”๋ฐ EngineCPUUtilization์˜ ์ง€ํ‘œ์˜ ๊ฐœ์„ ์ด ์—†๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. (๋Œ€์‹  OS ๋ ˆ๋ฒจ์—์„œ์˜ cpu์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” CPUUtilization ์ง€ํ‘œ๋Š” vCpu๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ๋ฐ˜๋น„๋ก€ํ•˜์—ฌ ์ค„์–ด๋“œ๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ElastiCache์˜ ์ŠคํŽ™์€ ์ด๊ณณ์—์„œ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์ง€ํ‘œ ์™ธ์—๋„ SetTypeCmds, SetTypeCmdsLatency, Evictions, GetTypeCmdsLatency ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ์ง€ํ‘œ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๊ณณ์—์„œ ์ „๋ถ€ ์„ค๋ช…ํ•˜๊ธฐ์—” ์–‘์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ Redis ์ง€ํ‘œ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋งˆ์น˜๋ฉฐ

์œ„์—์„œ ์„ค๋ช…ํ•œ ๋ฐฉ์‹๋Œ€๋กœ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€๊ณ  ๋ชฉํ‘œ์˜€๋˜ 10๋งŒ๋ช…๊นŒ์ง€ ๋ฌด๋ฆฌ์—†์ด ๋ฐ›์•„๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ŠคํŽ™์„ ์ •ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ถ€ํ•˜ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์‹œ๋Š” ๋ถ„๋“ค์ด ์ด ๊ธ€์„ ๋ณด๊ณ  ๋งŽ์€ ๋„์›€์„ ๋ฐ›์•˜์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

๋” ๊ถ๊ธˆํ•˜์‹  ๊ฒŒ ์žˆ์œผ์‹  ๋ถ„์€ ์ €ํฌํŒ€ ์„ ํ˜•๋‹˜๊ป˜์„œ ์ž‘์„ฑํ•˜์‹  [AWS ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ] Wonderwall ์€ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰ํ–ˆ์„๊นŒ?๋„ ๊ฐ™์ด ์ฝ์–ด๋ณด์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฐฑ์—”๋“œ ํŒ€์—์„œ๋Š” ์ €ํฌ์™€ ํ•จ๊ป˜ ์„œ๋น„์Šค์˜ ํ’ˆ์งˆ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๊ณ ๋ฏผํ•˜๊ณ  ํ•จ๊ป˜ ์„ฑ์žฅํ•ด๋‚˜๊ฐˆ ๊ฐœ๋ฐœ์ž๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ ๋ฐ”๋กœ ๋ฐ‘์— ์žˆ๋Š” ์ฑ„์šฉํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ด ์–ธ์ œ๋“ ์ง€ ์ง€์› ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

โ† ๋ชฉ๋ก์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ

Art Changes Life

๋…ธ๋จธ์Šค์™€ ํ•จ๊ป˜ ์—”ํ„ฐํ…Œํฌ ์‚ฐ์—…์„ ํ˜์‹ ํ•ด๋‚˜๊ฐˆ ๋ฉค๋ฒ„๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

์ฑ„์šฉ ์ค‘์ธ ๊ณต๊ณ  ๋ณด๊ธฐ