์ด ํ๋ก์ ํธ๋ ์ ํ๋ ๋ฆฌ์์ค ํ๊ฒฝ(AWS t3.small EC2 ์ธ์คํด์ค 2๋, RDS, Redis)์์ ์์ ์ ์ธ ์ด์์ ๋ชฉํ๋ก ํ๋ ๊ณ ์ฑ๋ฅ ํ์คํฐ๋ฒ ํฐ์ผ ์๋งค ์์คํ ์ ๋๋ค. ์๊ฐ์ ์ธ ๋๊ท๋ชจ ํธ๋ํฝ ์ํฉ์์๋ ์์ ์ ์ผ๋ก ๋์ํ๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ, ํจ์จ์ ์ธ ๋๊ธฐ์ด ๊ด๋ฆฌ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํตํด ์ฌ์ฉ์ ๊ฒฝํ์ ์ต์ ํํฉ๋๋ค.
- ์๋ฒ ์์ ์ฑ ํ๋ณด: CPU ์ฌ์ฉ๋ฅ ํผํฌ ์ 80% ์ดํ ์ ์ง
- ์ฌ์ฉ์ ๊ฒฝํ ์ต์ ํ: ํ๊ท ์๋ต ์๊ฐ 5์ด ์ด๋ด ์ ์ง (ํฐ์ผ ์กฐํ๋ถํฐ ๊ฒฐ์ ๊น์ง)
- ์ค์๊ฐ ๋๊ธฐ์ด ์์คํ : Redis ๊ธฐ๋ฐ์ ๊ณต์ ํ ๋๊ธฐ์ด ๊ด๋ฆฌ
- ํจ์จ์ ์ธ ๊ฒฐ์ ์ฒ๋ฆฌ: ๋น๋๊ธฐ ๋ฐฉ์์ ๊ฒฐ์ ์ฒ๋ฆฌ ๋ฐ ์ฃผ๊ธฐ์ ์ํ ์กฐํ
- ์ค์๊ฐ ํฐ์ผ ์ ์ ๋ฐ ๊ฒฐ์ ๊ธฐํ ๋ณด์ฅ: Redis ๊ธฐ๋ฐ ํฐ์ผ ์ฌ๊ณ ์ ์ ์์คํ
- ๋น๋๊ธฐ ์ฃผ๋ฌธ ์ฒ๋ฆฌ: ์ธ๋ฉ๋ชจ๋ฆฌ ํ ์์คํ ์ ํตํ ์ฃผ๋ฌธ ์ฒ๋ฆฌ ์ต์ ํ
- ์๋ฆฌ: ์ฒญํฌ ๊ธฐ๋ฐ์ ๋๊ธฐ์ด ๊ด๋ฆฌ ์์คํ
- ๋๊ธฐ์ด ๊ด๋ฆฌ:
- Redis Set์ ์ฌ์ฉํ์ฌ ๊ฐ ํฐ์ผ์ ๋ํ ๋๊ธฐ์ด ์ ์ง
- ์ฌ์ฉ์ ์ง์ ์ ํ์ฌ ๋๊ธฐ์ด์ ํฌ๊ธฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋๊ธฐ ์์ ํ ๋น
- ์
์ฅ ๊ด๋ฆฌ:
- passChunkSize ๋จ์๋ก ์ ์ฅ ๊ฐ๋ฅํ ๋ฒ์ ๊ด๋ฆฌ
- ์ฃผ๊ธฐ์ ์ผ๋ก ์ ์ฅ ๊ฐ๋ฅ ๋ฒ์๋ฅผ passChunkSize๋งํผ ์ฆ๊ฐ์์ผ ์์ฐจ์ ์ ์ฅ ํ์ฉ
- ์ํ ํ์ธ ๋ฐ ์
๋ฐ์ดํธ:
- ์ฌ์ฉ์์ ๋๊ธฐ ์์๊ฐ ํ์ฌ ์ ์ฅ ๊ฐ๋ฅ ๋ฒ์ ๋ด์ ์๋์ง ํ์ธ
- ์ฌ๊ณ ์ฌ๋ถ๋ ํจ๊ป ์ฒดํฌํ์ฌ ์ ์ฅ ๊ฐ๋ฅ ์ฌ๋ถ์ ๋จ์ ๋๊ธฐ ์ธ์ ์ ์ ๊ณต
- ์๋ฆฌ: ๋น๋๊ธฐ ๊ฒฐ์ ์ฒ๋ฆฌ ๋ฐ ์ํ ๊ด๋ฆฌ
- ๊ฒฐ์ ํ๋ก์ธ์ค:
- ๊ฒฐ์ ์์ฒญ ์ UUID ๊ธฐ๋ฐ์ ๊ฒฐ์ ID ์์ฑ ํ ๋น๋๊ธฐ๋ก ๊ฒฐ์ ์ฒ๋ฆฌ ์์
- CompletableFuture๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ๊ฒฐ์ ์ฒ๋ฆฌ ๊ตฌํ
- ์ํ ๊ด๋ฆฌ:
- Caffeine ์บ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ์ ์ํ ๊ด๋ฆฌ
- ๊ฒฐ์ ID๋ฅผ ํค๋ก ์ฌ์ฉํ์ฌ ๊ฒฐ์ ์ ๋ณด ๋ฐ ์ํ ์ ์ฅ
- ๊ฒฐ์ ์๋ฃ ํ ์ฒ๋ฆฌ:
- ๊ฒฐ์ ์ฑ๊ณต ์ QueueService๋ฅผ ํตํด ๊ตฌ๋งค ์ ๋ณด ์ฒ๋ฆฌ
- ๊ฒฐ์ ์คํจ ์ CompensationService๋ฅผ ํตํด ์ฌ๊ณ ๋ฐ ์ํ ๋กค๋ฐฑ
- ์๋ฆฌ: Redis๋ฅผ ํ์ฉํ ์ค์๊ฐ ์ฌ๊ณ ๊ด๋ฆฌ
- ์ฌ๊ณ ๊ด๋ฆฌ:
- Redis์ ๊ฐ ํฐ์ผ์ ์ฌ๊ณ ์๋ ์ ์ฅ
- ์์์ ๊ฐ์ ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ๋์์ฑ ๋ฌธ์ ํด๊ฒฐ
- ์ฌ๊ณ ๋๊ธฐํ:
- TicketScheduleService๋ฅผ ํตํด ํ๋งค ์ ์ Redis์ ์ฌ๊ณ ์ ๋ณด ์ ๋ฐ์ดํธ
- ์๋ฆฌ: ์ธ๋ฉ๋ชจ๋ฆฌ ํ๋ฅผ ํ์ฉํ ๋น๋๊ธฐ ์ฃผ๋ฌธ ์ฒ๋ฆฌ
- ์ฃผ๋ฌธ ์ ์:
- InMemoryQueue์ ๊ตฌ๋งค ๋ฐ์ดํฐ(PurchaseData) ์ ์ฅ
- ํ๊ฐ ๊ฐ๋ ์ฐผ์ ๊ฒฝ์ฐ ์ง์ ๋ฐฑ์คํ๋ฅผ ์ ์ฉํ ์ฌ์๋ ๋ก์ง ๊ตฌํ
- ์ฃผ๋ฌธ ์ฒ๋ฆฌ:
- ์ฃผ๊ธฐ์ ์ผ๋ก(5์ด๋ง๋ค) ํ์์ ๋ฐฐ์น ๋จ์๋ก ์ฃผ๋ฌธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- ๋ฐฐ์น ํฌ๊ธฐ๋ ํ์ ํ์ฌ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ์กฐ์
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ:
- ์ฃผ๋ฌธ ์ ๋ณด์ ์ฒดํฌ์ธ ์ ๋ณด๋ฅผ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ด ์ผ๊ด ์ฒ๋ฆฌ
- JDBC batch update๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ์ฐ ์ต์ ํ
- ์ฅ์ ๋ณต๊ตฌ:
- ์๋ฒ ์ฌ์์ ์ ๋ก๊ทธ ํ์ผ์ ๋ถ์ํ์ฌ ๋ฏธ์ฒ๋ฆฌ๋ ์ฃผ๋ฌธ ๋ณต๊ตฌ
- ์ฒ๋ฆฌ ์คํจํ ์ฃผ๋ฌธ์ ๋ํ ์ฌ์๋ ๋ฉ์ปค๋์ฆ ๊ตฌํ
-
์ธ๋ฉ๋ชจ๋ฆฌ ์บ์ฑ
- Caffeine ์บ์๋ฅผ ์ด์ฉํ ์ ํ๋ฆฌ์ผ์ด์
๋ ๋ฒจ ์บ์ฑ
- ์๋ต ์๊ฐ 29% ๋จ์ถ
- Caffeine ์บ์๋ฅผ ์ด์ฉํ ์ ํ๋ฆฌ์ผ์ด์
๋ ๋ฒจ ์บ์ฑ
-
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ต์ ํ
- Skip Lock ์ ์ด์ฉํ ๋์์ฑ ์ ์ด (
SELECT ... FOR UPDATE SKIP LOCKED
)- ์๋ต ์๊ฐ 68% ๋จ์ถ Wiki
- Skip Lock ์ ์ด์ฉํ ๋์์ฑ ์ ์ด (
-
๋น๋๊ธฐ ๋ฐ ๋ฐฐ์น ์ฒ๋ฆฌ
- CompletableFuture๋ฅผ ์ด์ฉํ ๋น๋๊ธฐ ๊ฒฐ์ ์ฒ๋ฆฌ
- ์ฃผ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ปค์คํ ์ธ๋ฉ๋ชจ๋ฆฌ ํ ๊ตฌํ
- JDBC ๋ฐฐ์น ์ ๋ฐ์ดํธ๋ฅผ ํตํ ๋ฒํฌ ์ฐ์ฐ ํจ์จํ
- RPS 23% ํฅ์ Wiki
-
๋๊ธฐ์ด ์์คํ ์ค๊ณ
- ํฐ์ผํ ์ ์๋น์ค ๊ฐ์ฉ์ฑ ํ๋ณด๋ฅผ ์ํ ๋๊ธฐ์ด ์์คํ ๋์
- 5000๋ช ๋์ ์ ์์์๋ ๋ฉ์ธ ์๋ฒ CPU ์ฌ์ฉ๋ฅ 50% ์ดํ๋ก ์์ ์ฑ ํ๋ณด Wiki
-
์์คํ ์์ ์ฑ ๋ฐ ๋ณต๊ตฌ ์ ๋ต
- ์ง์ ๋ฐฑ์คํ๋ฅผ ํ์ฉํ ์ฌ์๋ ๋ก์ง ๊ตฌํ
- ์ฅ์ ์ํฉ ๋๋น ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ ๊ตฌํ (๋ก๊ทธ ๊ธฐ๋ฐ ๋ณต๊ตฌ)
์ ํฌ๋ ํ twoDari์ ๋๋ค. ์ฌ์ฉ์์ ์ถ์ ๋ฅผ ์ด์ด์ฃผ๋ ๋ค๋ฆฌ ์ญํ ์ ํฉ๋๋ค.
์ด๋ฆ | ์ญํ | ์ฃผ์ ๊ธฐ์ฌ | GitHub |
---|---|---|---|
๊นํ์ข | ๋ฐฑ์๋ | MySQL๋น๋๊ธฐ ์ฒ๋ฆฌ, ๋ฐฐ์น ์ฒ๋ฆฌ, ํ๋ก ํธ์๋ ํ๋ฉด ๊ตฌ์ฑ | @bellringstar |
๊น๊ท์ | ๋ฐฑ์๋ | ์บ์ฑ์ ๋ต, Redis๋ฅผ ์ฌ์ฉํ ๋๊ธฐ์ด, ํ๋ก ํธ์๋ ํ๋ฉด ๊ตฌ์ฑ | @kkyu0718 |
๊นํ์ค | ๋ฐฑ์๋ | devops, ์ค์ผ์ฅด๋ง ์์ , ๋ค์ํ ๋ชจ๋ ๊ฐ ์ฐ๊ณ ๋ฐ ์ฑ๋ฅ ๊ฐ์ | @HyeonJun0530 |
๋ฐ๋ฏผ์ง | ๋ฐฑ์๋ | Redis๋ฅผ ์ฌ์ฉํ ๋๊ธฐ์ด ๋ก์ง, ํ๋ก์ ํธ ๋ชจ๋ํ | @minnim1010 |