ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ ๋์์ฑ ์ ์ด ๋ฐฉ์ ๋น๊ต
Series
โ ๏ธ
๋ก์ปฌ์์ ํ ์คํธํ ๊ฒฐ๊ณผ์ด๊ณ ,
์๋ฒ ํ๊ฒฝ๊ณผ ์ฌ๋ฌ ์์ธ๋ค์ ์ํด ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์๊ณ , ์ ํํ์ง ์์ ์ ์์ต๋๋ค.
Case 01
ํ์ ์๋ : 50,000
- Total User :
296
- Processes :
8
- Threads :
37
(DB Named ๋ฐฉ์์ ์ ์ธ)
.
์๊ฐ ๋ด์ ๋ชจ๋ ํธ๋ํฝ์ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ ๋ฐฉ์
- DB Pessimistic
- Redis Incr
- Kafka + Redis
.
์ผ๋ถ ์ฑ๊ณต์ ํ๊ธด ํ์์ง๋ง, ํธ๋ํฝ์ ๋ฒํฐ์ง ๋ชปํ๊ณ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๋ฐฉ์ (์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ์ธ์ ์ธ ์๊ฐ๋ ๋ด์๋ณด์๋ค.)
- DB Optimistic โ ์ถฉ๋ ์ฒ๋ฆฌ ๋น์ฉ (์ถฉ๋ ์ ํด๋น ํธ๋์ญ์ ์ฌ์๋) ์ผ๋ก ์ธํ ์ฑ๋ฅ ์ ํ
- DB Named โ ์ปค๋ฅ์ ํ ๋ถ์กฑ์ผ๋ก ์ธํ DeadLock ๋ฐ์ ๋ฐ ์ฑ๋ฅ ์ ํ
- Redis Lettuce โ Spin Lock ๋ฐฉ์ (๋ฐ๋ณต์ ์ผ๋ก ํ์ธํ๋ฉด์ ๋ฝ ํ๋์ ์๋) ์ผ๋ก ์ธํ CPU ๋ถํ
- Redis Redisson โ ๋ด๋ถ์ ์ผ๋ก ๊ตฌํ๋ ์ฌ์๋ ๋ก์ง (ํน์ ๊ฐ๊ฒฉ์ผ๋ก ์ฌ์๋) ์์ ๋ฐ์ํ๋ ๋ถํ
.
๋ก์ปฌ PC์์ ๋ฒํธ ์ ์๋ ํธ๋ํฝ์ด ์๋๋ผ์ ๊ฒฐ๊ณผ๊ฐ ํ์ค๊ณผ๋ ๋ค๋ฅผ ์๋ ์์ง๋ง,
์ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์์ ๋ ๋น ๋ฅธ ์ฑ๋ฅ์ ์๋ํ๋ Redis ์ Lettuce, Redisson ๋ฐฉ์์ด ์ฑ๋ฅ ์ ํ ์ด์๊ฐ ์์ ์ค์ ๋ชฐ๋๋ค.
๋ฝ ํ๋์ ์ํ ์ฌ์๋ ๋ก์ง์ผ๋ก ์ธํด์ ๋ฐ์ํ๋ ์ฑ๋ฅ ์ ํ์ผ ์๋ ์์ ๊ฒ์ด๋ผ๋ ์๊ฐ์ด ๋ ๋ค.
Case 02
ํ์ ์๋ : 1,000
- Total User :
99
- Processes :
3
- Threads :
33
.
์๊ฐ ๋ด์ ๋ชจ๋ ํธ๋ํฝ์ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ ๋ฐฉ์
- DB Pessimistic
- DB Optimistic
- Redis Incr
- Redis Lettuce
- Redis Redisson
- Kafka + Redis
.
์ผ๋ถ ์ฑ๊ณต์ ํ๊ธด ํ์์ง๋ง, ํธ๋ํฝ์ ๋ฒํฐ์ง ๋ชปํ๊ณ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๋ฐฉ์
- DB Named โ ์ปค๋ฅ์ ํ ๋ถ์กฑ์ผ๋ก ์ธํ DeadLock ๋ฐ์ ๋ฐ ์ฑ๋ฅ ์ ํ
.
ํ์ ์๋์ด 50,000 ๊ฑด์ผ ๊ฒฝ์ฐ์ ๋นํด ๋๋ถ๋ถ์ ๋ฐฉ์์ด ์ฑ๊ณต์ ์ผ๋ก ๋ชจ๋ ํธ๋ํฝ์ ์ฒ๋ฆฌํ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ ๊ฒฐ๊ณผ๋ค์ ํตํด ์ง๊ทนํ ๊ฐ์ธ์ ์ธ ์๊ฐ์ผ๋ก ๊ฐ ๋ฐฉ์์ ๋ํ ๊ฒฐ๋ก ์ ๋ด๋ณด๋ ค๊ณ ํ๋ค.
Compare
Java
- Java Async
- ๋์์ฑ ์ด์ ์ฌ๋ก์ ํ๋ณธ
- Java Sync
- ์๋ฒ๊ฐ 2๋ ์ด์์ผ ๊ฒฝ์ฐ ๋์์ฑ ์ด์ ๋ฐ์
์ค๋ฌด์์ ๋์์ฑ ์ฒ๋ฆฌ์
์ ๋ ์ฌ์ฉํ ์ ์๋
๋ฐฉ์.
Database
- Databse Pessimistic Lock
- ์ถฉ๋์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ ์ ์๋ ์ํฉ์ด๊ฑฐ๋
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํ๊ฐ ์ฌ ์ ๋์ ๋์ ํธ๋ํฝ์ ๊ฒฌ๋์ผ ํ๋ ์ํฉ์ด ์๋๋ผ๋ฉด ์ ํฉํ๋ค๊ณ ์๊ฐ
- Databse Optimistic Lock
- ์ ๋นํ ํธ๋ํฝ์์๋ ์ฌ์ฉํ ๋ง ํ์ง๋ง,
- Ramp-Up ํ ์คํธ๋ฅผ ํตํด ์ผ๋งํผ ๋ฒํธ ์ ์์์ง ๊ฒ์ฆ์ด ํ์
- Databse Named Lock
- ์ปค๋ฅ์ ํ ๋ถ์กฑ ํ์์ผ๋ก ์ค๋ฌด์์ ์ ์ฉ์ ์ด๋ ค์ ๋ณด์
๊ฐ์ธ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฝ์ ์ ์ฉํ๋ ๋ฐฉ์์
๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์๋น์ค์ ์ฑ๋ฅ ์ด์๋ฅผ ์ ํํ ์ ์๋ค๊ณ ์๊ฐํด์
๋๋์ ํธ๋ํฝ
์ ๊ฒฌ๋์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉดRedis
,Kafka
๋ฅผ ํ์ฉํ๊ณ
์๋์ ํธ๋ํฝ
๋ง ๊ฒฌ๋๋ ๋๋ ์ํฉ์ด๋ผ๋ฉดPessimistic Lock
์ ์ ์ฉํ๋๊ฒ ์ ์ ํ๋ค๊ณ ์๊ฐ
Redis
- Redis Incr
- ๊ฐ์ฅ ์ข์ ์ฑ๋ฅ์ ๋ณด์
- ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ด๊ณ ์๋ฒ๊ฐ ์ฌ์์๋๊ฑฐ๋ ์ฅ์ ๋ฐ์ ์ ๋ฐ์ดํฐ ์ ์ค ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ ๋จ์
- Redis Lettuce / Redisson
- ์ฌ์๋ ๋ก์ง์ผ๋ก ์ธํ ๋ถํ๋ก ๋๋์ ํธ๋ํฝ์์ ์ข์ ์ฑ๋ฅ์ ๋ผ ์๋ ์์ ๊ฒ ๊ฐ์
- ๋ถ์ฐ๋ฝ์ ํ๊ณ๋ ์กด์ฌ โ ๋ ๋์ค๊ฐ ์ ๊ณตํ๋ ๋ถ์ฐ๋ฝ(RedLock)์ ํน์ง๊ณผ ํ๊ณ
- Ramp-Up ํ ์คํธ๋ฅผ ํตํด ์ผ๋งํผ์ ํธ๋ํฝ์์ ์ฑ๋ฅ์ ๋ผ ์ ์์์ง ๊ฒ์ฆ์ด ํ์
Redis Incr
๋ฐฉ์์ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋๋ ์ํฉ์ ๋ํ ๋๋น๋ง ์ ๋์ด์๋ค๋ฉด ๊ฐ์ฅ ์ข์ ๋ฐฉ์์ด๋ผ๊ณ ์๊ฐ
Kafka
- Kafka + Redis
- ์๊ณ๊ฐ ์ ์ด์ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ์ ์ญํ ์ ๋ถ๋ฆฌ
- ๋ถํ๊ฐ ๋ถ์ฐ๋๋ฏ๋ก ๋๋์ ํธ๋ํฝ์ ์ ํฉํ ๋ฐฉ์์ด๋ผ๊ณ ์๊ฐ
Redis Inc
๋ฐฉ์์ ํ์ฉํ์ง๋ง, ๋๋ถ๋ถ์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌ ์๊ฐ์ด ๋ค์ ์์๋๋ค ๋ณด๋์๊ณ๊ฐ ์ ์ด๋ Redis์์ ์ฒ๋ฆฌํ๊ณ , ๋น์ฆ๋์ค ๋ก์ง์ Kafka Consumer๊ฐ ์ฒ๋ฆฌํ๋ฉด์
๋ถํ๋ฅผ ๋ถ์ฐ์์ผ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐ
Reference.
'Web > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Monitoring] Prometheus & Grafana (0) | 2024.10.04 |
---|---|
[๋์์ฑ] Kafka Concurrency Control(feat. Redis) (0) | 2024.08.20 |
[๋์์ฑ] Redis Concurrency Control(incr, Lettuce, Redisson Lock) (0) | 2024.08.18 |
[๋์์ฑ] DataBase Concurrency Controll(Pessimistic, Optimistic, Named Lock) (0) | 2024.08.17 |
[๋์์ฑ] Java Concurrency Control(asynchronous, synchronized) (2) | 2024.08.16 |