1. Redis
Temporary Location For Speed
๋ฐ์ดํฐ์ ์๋ ์์ค๋ณด๋ค ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ก์ธ์คํ ์ ์๋ ์์ ๋ฐ์ดํฐ ์ ์ฅ์
๋ง์ ์ ํ๋ฆฌ์ผ์ด์
์์ ์๋ ํฅ์์ ์ํด ์บ์๋ฅผ ์ด์ฉํ๋ค.
๋น์ฐํ ์๋๋ฅผ ๋์ด๋ ค๋ฉด ์๋ณธ์ ์ ๊ทผํ๋๊ฒ๋ณด๋ค ์บ์์ ์ ๊ทผํ๋๊ฒ ๋นจ๋ผ์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ์ ๋ฐ๋ณต์ ์ก์ธ์ค๊ฐ ๋ง์์ง์๋ก ์บ์๋ฅผ ์ฌ์ฉํ๋๊ฒ ์ ๋ฆฌํ๋ค.
์๋์ ๊ฐ์ ํน์ง์ ๊ฐ์ง๋ค.
- ๋จ์ํ key-value ๊ตฌ์กฐ
- In-memory ๋ฐ์ดํฐ ์ ์ฅ์ (RAM)
- ๋น ๋ฅธ ์ฑ๋ฅ
- ํ๊ท ์์ ์๋ < 1ms
- ์ด๋น ์๋ฐฑ๋ง ๊ฑด์ ์์ ๊ฐ๋ฅ
์ด์ธ์๋
์ต์ ๋ฒ์ ์ Redis๋ ๋ฐ์ดํฐ ์ ์ฅ๋ฟ๋ง ์๋๋ผ PUB/SUB ๊ตฌ์กฐ๋ฅผ ํตํด ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ์ฉ๋๋ก๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
Redis๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฝ์ด ์์ผ๋ฏ๋ก, ์ฃผ๋ก ๋ณด์กฐ ๋ฐ์ดํฐ ์ ์ฅ์๋ก ์ด์ฉ๋๋ค.
ํ์ง๋ง ๋ ๋ง์ ๊ณต๊ฐ์ ์ด์ฉํ๊ธฐ ์ํด์๋ Redis ํด๋ฌ์คํฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ ์ฅ๊ณต๊ฐ์ ํ์ฅํ ์ ์๋ค.
์ฑ๊ธ์ค๋ ๋ ์ ๋ต
Redis๋ ์ฌ์ฉ์๋ค์ด ์คํํ ๋ช
๋ น์ด๋ค์ Event Loop ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ค. ์ฆ, ํด๋ผ์ด์ธํธ๊ฐ ์คํํ ๋ช
๋ น์ด๋ค์ด Event Queue์ ์ ์ฌ๋๊ณ ์ฑ๊ธ ์ค๋ ๋๋ก ํ๋์ฉ ์ฒ๋ฆฌํ๋ค.
๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฑ๊ธ ์ค๋ ๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
๋ฐ๋ผ์ ์๋์ ์ฅ์ ๊ณผ ๋จ์ ์ ๊ฐ์ง๊ฒ ๋๋ค.
- ์ฅ์
- 1. ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์ด ์๋๋ผ์ Context Switching์ด ๋ฐ์ํ์ง ์์ผ๋ฏ๋ก ํจ์จ์ ์ธ ์์คํ ๋ฆฌ์์ค ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- 2. ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์ด ์๋๋ฏ๋ก DeadLock์ด ๋ฐ์ํ์ง ์๋๋ค.
- ๋จ์
- 1. ์ฑ๊ธ ์ค๋ ๋์ด๋ฏ๋ก ์ ์ฒด ๋ฐ์ดํฐ ์ค์บ๊ณผ ๊ฐ์ ์ค๋ฒํค๋๊ฐ ํฐ ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๋์ ๋ค๋ฅธ ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌ ๋ถ๊ฐํ๋ค.
- 2. ์ด๋, ๋ค๋ฅธ ๋ช ๋ น์ด๋ค์ ์ด๋ฒคํธ ํ์ ์ ์ฅ๋์ด ์๋ ์๊ฐ์ด ๊ธธ์ด์ง๋ฏ๋ก ์๋ต ์๋๊ฐ ์ ํ๋๋ค.
2. Memory Hierarchy
์์๋ก PC์ฌ์์ด ์๋์ ๊ฐ๋ค๊ณ ๊ฐ์ ํ์.
- i7 CPU - 12MB Cache Memory
- 16GB DRAM
- 512GB SSD
12MB Cache Memory ๋ SRAM์ผ๋ก CPU Cache์ ํด๋นํ๋ค. ํด๋น ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ ์์ฒญ ๋น ๋ฅด๊ณ , ์์ฒญ ๋น์ธ๊ณ , ์ฉ๋์ด ์๋ค.
16GB DRAM์ Main Memory๋ก ์ ๋นํ ๋น ๋ฅด๊ณ , ์ ๋นํ ๋น์ธ๊ณ , ์ ๋นํ ํฌ๊ณ , ํ๋ฐ์ฑ์ด๋ค.
512GB SSD Storage๋ ๋น๊ต์ ๋๋ฆฌ๊ณ , ๋น๊ต์ ์ ๋ ดํ๊ณ , ์์ฒญ ํฌ๊ณ , ๋นํ๋ฐ์ฑ์ด๋ค.
Redis๋ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๊ณ ์ปค์ง๊ณ ํธ๋ํฝ์ด ๋์ด๋จ์ ๋ฐ๋ผ Man Memory์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ ์กฐ๊ธ ๋ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๊ฐ๋ ์ด๋ค.
3. ์บ์ฑ ์ ๋ต
์ฝ๊ธฐ ์ ๋ต
(1) Look-Aside ์ ๋ต
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ Look-Aside ์ ๋ต์ ๋จผ์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋ ์บ์์์ ๋จผ์ ๊ฒ์ํ๊ณ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์ ๊ทผํ์ฌ ์ฐพ์์จ๋ค ๋ค์ Redis์ ์ ์ฅํ๋ ๊ตฌ์กฐ์ด๋ค. ๋ฐ๋ผ์ ์บ์๋ ์ฐพ๋ ๋ฐ์ดํฐ๊ฐ ์์ ๋๋ง ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ๋๊ธฐ ๋๋ฌธ์ Lazy Loading์ด๋ผ๊ณ ๋ ํ๋ค.
ํด๋น ๊ตฌ์กฐ๋ Redis๊ฐ ๋ค์ด๋๋๋ผ๋ ๋ฐ๋ก ์ฅ์ ๋ก ์ด์ด์ง์ง ์๊ณ , DB์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
ํ์ง๋ง Redis์ ๋ถ์ด์๋ ์ปค๋ฅ์
์ด ๋ง์๋ค๋ฉด ๊ฐ์๊ธฐ DB๋ก ์กฐํํ๋ ์ปค๋ฅ์
์ด ๋ง์์ง๊ธฐ ๋๋ฌธ์ DB์ ๋ถํ๊ฐ ๋ง์ด ๊ฑธ๋ฆด ์ ์๋ค.
์บ์๋ฅผ ์ฒ์ ํฌ์
ํ๊ฑฐ๋, ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ DB์๋ง ์ ์ฅํ๋ค๋ฉด Cache Miss๊ฐ ๋ง์ด ๋ฐ์ํด์ ์ฑ๋ฅ ์ ํ๊ฐ ์ฌ ์ ์๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด DB์์ ๋ฏธ๋ฆฌ ์บ์๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ด ๋ฃ์ด์ฃผ๋ Cache Warming ๊ณผ์ ์ ์งํํ ์ ์๋ค.
์ฐ๊ธฐ ์ ๋ต
(1) Write-Around
Write-Around ๋ฐฉ์์ DB์๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค. Cache Miss๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์ ์บ์๋ก ๋ฐ์ดํฐ๋ฅผ ๋์ด์จ๋ค.
DB๋ด์ ๋ฐ์ดํฐ์ ์บ์๋ด์ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅผ ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
(2) Write-Through
Write-Through ๋ฐฉ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์บ์์๋ ํจ๊ป ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค.
์บ์๋ ํญ์ ์ต์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ์ ์ฅํ ๋๋ง๋ค ๋๋จ๊ณ ์คํ
์ ๊ฑฐ์ณ์ผ ํ๋ฏ๋ก ์๋์ ์ผ๋ก ๋๋ฆฌ๋ค.
์บ์์ ๋ฃ์ ๋ฐ์ดํฐ๊ฐ ์ฌ์ฌ์ฉ๋์ง ์์์๋ ์์ผ๋ฏ๋ก ์ฃผ์ํด์ผ ํ๋ฉฐ Expire Time์ ์ ์ค์ ํด์ค์ผ ํ๋ค.
4. Redis ๋ฐ์ดํฐ ํ์
๋ ๋์ค๋ ์์ฒด์ ์ผ๋ก ๋ค์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ค.
- setCommand๋ฅผ ์ด์ฉํด์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ๋ ๋ชจ๋ String ํํ๋ก ์ ์ฅ๋๋ค.
- ๋นํธ ๋จ์ ์ฐ์ฐ์ด ๊ฐ๋ฅํ Bitmap
- ๋ฐ์ดํฐ๋ฅผ ์์๋๋ก ์ ์ฅํ๋ List๋ ํ๋ก ์ฌ์ฉํ๊ธฐ ์ ์ ํ๋ค.
- ํ๋์ ํค์ ๋๋ค์ ์ฌ๋ฌ ํ๋์ ๊ฐ์ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ Hash๊ฐ ์๋ค.
- ์ค๋ณต๋์ง ์๋ ๊ฐ์ ์งํฉ์ Set
- ์ค๋ณต๋์ง ์๊ณ ํน์ ๊ฐ์ผ๋ก ์ ๋ ฌ๋๋ Sorted Set
- ๊ต์ฅํ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ฌ์ฉํ๋ฉฐ ์ค๋ณต๋์ง ์๋ ๊ฐ์ ๊ฐ์๋ฅผ ์นด์ดํธํ ๋ HyperLogLog๋ฅผ ์ฌ์ฉํ๋ค.
- ๋ก๊ทธ๋ฅผ ์ ์ฅํ ๋ Stream์ ์ฌ์ฉํ๋ค.
5. Redis ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ ์ ์ฅํ๋ ๋ฐฉ๋ฒ
Redis๋ In-memory ๋ฐ์ดํฐ ์คํ ์ด์ด๋ค. ๋ฐ๋ผ์ ์๋์ ๋ฌธ์ ๋ฅผ ๊ฐ์ง๋ค.
- ์๋ฒ ์ฌ์์ ์ ๋ชจ๋ ๋ฐ์ดํฐ ์ ์ค
- ๋ณต์ ๊ธฐ๋ฅ์ ์ฌ์ฉํด๋ ์ฌ๋์ ์ค์ ๋ฐ์ ์ ๋ฐ์ดํฐ ๋ณต์ ๋ถ๊ฐ
- Redis ์บ์ ์ด์ธ์ ์ฉ๋๋ก ์ฌ์ฉํ๋ค๋ฉด ์ ์ ํ ๋ฐ์ดํฐ ๋ฐฑ์ ์ด ํ์
AOF (Append Only File)
Redis Protocol ํํ๋ก ์ ์ฅ๋๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ์ปค๋งจ๋๊ฐ ๋ค์ด์ค๋ฉด ์ปค๋งจ๋๋ฅผ ๊ทธ๋๋ก ๋ชจ๋ ์ ์ฅํ๋ค.
AOF๋ append onlyํ๊ฒ ๋์ํ๋ฏ๋ก ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋ง ๋๋ฏ๋ก ๋ณดํต RDB๋ณด๋ค ์ปค์ง๊ฒ ๋๋ค.
๋ฐ๋ผ์, AOF ํ์ผ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์์ถํด์ ์ฌ์์ฑ๋๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ค.
์๋/ ์๋ ํ์ผ ์ ์ฅ ๋ฐฉ๋ฒ
- ์๋: redis.conf ํ์ผ์์ auto-aof-rewrite-percentage ์ต์ (ํฌ๊ธฐ ๊ธฐ์ค)
- ์๋: BGREWRITEAOF ์ปค๋งจ๋๋ฅผ ์ด์ฉํด CLI ์ฐฝ์์ ์๋์ผ๋ก AOF ํ์ผ ์ฌ์์ฑ
RDB
Binary ํํ๋ก ์ ์ฅ๋๋ฉฐ, Snapshot ๋ฐฉ์์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ์ ์ฅ ๋น์์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ ๊ทธ๋๋ก๋ฅผ ์ฌ์ง์ฐ๋ฏ์ด ๊ทธ๋๋ก ์ ์ฅํ๋ค.
์๋/ ์๋ ํ์ผ ์ ์ฅ ๋ฐฉ๋ฒ
- ์๋: redis.conf ํ์ผ์์ SAVE ์ต์ (์๊ฐ ๊ธฐ์ค)
- ์๋: BGSAVE ์ปค๋งจ๋๋ฅผ ์ด์ฉํด cli ์ฐฝ์์ ์๋์ผ๋ก RDB ํ์ผ ์ ์ฅ
- SAVE ์ปค๋งจ๋๋ ์ ๋ ์ฌ์ฉ X
RDB vs AOF ์ ํ ๊ธฐ์ค
- ๋ฐฑ์
์ ํ์ํ์ง๋ง ์ด๋ ์ ๋์ ๋ฐ์ดํฐ ์์ค์ด ๋ฐ์ํด๋ ๊ด์ฐฎ์ ๊ฒฝ์ฐ
- RDB ๋จ๋ ์ฌ์ฉ
- redis.conf ํ์ผ์์ SAVE ์ต์ ์ ์ ์ ํ ์ฌ์ฉ
- ์ฅ์ ์ํฉ ์ง์ ๊น์ง์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ณด์ฅ๋์ด์ผ ํ ๊ฒฝ์ฐ
- AOF ์ฌ์ฉ (appendonly yes)
- APPENDFSYNC ์ต์ ์ด everysec์ธ ๊ฒฝ์ฐ ์ต๋ 1์ด ์ฌ์ด์ ๋ฐ์ดํฐ ์ ์ค ๊ฐ๋ฅ(๊ธฐ๋ณธ ์ค์ )
- ์ ์ผ ๊ฐ๋ ฅํ ๋ด๊ตฌ์ฑ์ด ํ์ํ ๊ฒฝ์ฐ
- RDB & AOF ๋์ ์ฌ์ฉ
6. Redis ์ํคํ ์ฒ์ ์ข ๋ฅ
- 1. Replication ์ํคํ
์ฒ
- Master์ Replica๋ก ๊ตฌ์ฑ
- ๋จ์ํ ๋ณต์ ์ฐ๊ฒฐ ์ ์ฌ์ฉ (replicaof)
- ๋น๋๊ธฐ์ ๋ณต์ ๋ก ๋ณต์ ๊ฐ ์ฑ๊ณตํ๋์ง ํ์ธํ์ง ์์
- HA(๊ณ ๊ฐ์ฉ์ฑ) ๊ธฐ๋ฅ์ด ์์ผ๋ฏ๋ก ์ฅ์ ์ํฉ ์ ์๋์ผ๋ก ๋ณต๊ตฌ
- 2. Sentinel ์ํคํ
์ฒ
- Sentinel, Master, Replica๋ก ๊ตฌ์ฑ
- Sentinel ๋ ธ๋๊ฐ Redis ๋ง์คํฐ์ ๋ ํ๋ฆฌ์นด ๋ ธ๋๋ฅผ ๋ชจ๋ํฐ๋ง
- Master๊ฐ ๋น์ ์ ์ํ์ผ ๋ ์๋์ผ๋ก failover
- ์ฐ๊ฒฐ ์ ๋ณด ํ์ ์์
- sentinel ๋
ธ๋๋ ํญ์ 3๋ ์ด์์ ํ์๋ก ์กด์ฌํด์ผ ํจ
- ๊ณผ๋ฐ์ ์ด์์ sentinel์ด ๋์ํด์ผ failover ์งํ
- 3. Cluster ์ํคํ
์ฒ
- ์ต์ 3๋์ Master๊ฐ ํ์ํ๋ฉฐ Sharding ๊ธฐ๋ฅ์ ์ ๊ณต
- ์ค์ผ์ผ ์์๊ณผ HA ๊ตฌ์ฑ (High Availability)
- ํค๋ฅผ ์ฌ๋ฌ ๋ ธ๋์ ์๋์ผ๋ก ๋ถํ ํด์ ์ ์ฅ
- ๋ชจ๋ ๋ ธ๋๊ฐ ์๋ก๋ฅผ ๊ฐ์ํ์ฌ, ๋ง์คํฐ ๋น์ ์ ์ํ์ผ ๋ ์๋ failover
7. ์ํคํ ์ฒ ์ ํ ๊ธฐ์ค
์์ ํ๋ก์ฐ ์ฐจํธ๋ฅผ ์ ๋ฐ๋ผ๊ฐ๋ณด๋ฉด์ ์ํคํ ์ฒ๋ฅผ ์ ํํด์ผ ํ๋ค.
'๐ข๏ธDatabase' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MySQL์ ๊ฒฉ๋ฆฌ ์์ค(Isolation Level) (0) | 2023.09.11 |
---|---|
[Real MySQL 8.0] ์ฟผ๋ฆฌ ์์ฑ ๋ฐ ์ต์ ํ - JOIN (0) | 2023.08.22 |
[Real MySQL 8.0] ์ฟผ๋ฆฌ ์์ฑ ๋ฐ ์ต์ ํ - SELECT (0) | 2023.08.14 |
[Real MySQL 8.0] MySQL ์ฐ์ฐ์์ ๋ด์ฅํจ์ (0) | 2023.08.08 |
[Real MySQL 8.0] InnoDB ๋ฒํผ ํโข์ธ๋ ๋ก๊ทธ โข์ฒด์ธ์ง ๋ฒํผโข ๋ฆฌ๋ ๋ก๊ทธ (0) | 2023.08.07 |