
Spike Traffic์ ๋ํ ๊ณ ์ฐฐ ๋ฐ ์ฒ๋ฐฉ

- #Spike Traffic
- #NoSQL
- #DynamoDB
- #fromm
๋ค์ด๊ฐ๋ฉฐ
์๋ ํ์ธ์. ๋ ธ๋จธ์ค์์ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ๊ณ ์๋ ์ ์๊ธฐ์ ๋๋ค.
์ ๋ ์ด์ ์ ์ ํฌ๊ฐ DynamoDB๋ฅผ ๋์
ํ๋ฉด์ ๋๋ ํต์ฐฐ์ ๊ทธ๋ฆผ์ผ๋ก ํํํ ์ ์ด ์์ต๋๋ค.
์๋ณธ์ ๊ฐ๊น์ด ์ฒ๋ฆฌ ์ ๋ฐ์ดํฐ๋ RDB์,
์ฒ๋ฆฌ ํ ์๋นํ๊ธฐ ์ข์ ํํ์ ๋ฐ์ดํฐ๋ NoSQL์
์ ์ฅํ๋ ๊ฒ์ด ํจ๊ณผ์ ์ด๋ผ๋ ๋ด์ฉ์ด์์ต๋๋ค.
์ด๋ฒ์๋ NoSQL์ ๊ดํ ๋ด์ฉ์ธ๋ฐ, ํธ๋ํฝ ๊ด์ ์์ ๋ฐ๋ผ๋ณธ ์ค์ ์ ์ฉ ์ฌ๋ก์ ๊ทธ ํจ๊ณผ์ ๋ํด ๊ณต์ ํ๊ณ ์ ํฉ๋๋ค.
RDS Proxy๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง, ๊ฐ์ ํธ๋ํฝ์์ Lambda๋ ECS๋ณด๋ค ํจ์ฌ ๋ง์ RDS connection์ ์ฌ์ฉํฉ๋๋ค.
์ ํฌ๋ latency๊ฐ ์ค์ํ ์๋น์ค์์๋ ECS๋ฅผ ์ฌ์ฉํ์ง๋ง, ๋ง์ ๋ถ๋ถ Lambda๋ก ๊ตฌ์ฑ๋์ด ์์ด, ํนํ spike ํธ๋ํฝ์์ ๋์ฑ ๋ถ๋ฆฌํ ์ฒ์ง์์ต๋๋ค.
์ด๋ฒ์ ์ ํฌ๋ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ์ ๋๊ท๋ชจ read spike ํธ๋ํฝ์ ํด๋นํ๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ DynamoDB๋ก ์ด๊ดํ์์ต๋๋ค.
Fromm Channel์๋ Artist๊ฐ ์ฑํ
๊ณผ ํจ๊ป Live ๋ฐฉ์ก์ ํ ์ ์๋ ๊ธฐ๋ฅ์ด ์๋๋ฐ,
์ด๋ ์ฝ์ด์์ผ ํ๋ ์ฌ์ฉ์๋ง๋ค์ ๊ณ ์ ์ ๋ณด๋ฅผ NoSQL๋ก ์ด๊ดํ์ฌ, ๋์ฉ๋ ํธ๋ํฝ์ ๋ถ์ฐํ ์ ์์์ต๋๋ค.
write์๋ ์ฌ์ฉ์์๊ฒ ์ฝ๊ฐ์ ์ง์ฐ์ ๊ฐ๋ฏธํด๋ ์ฌ์ฉ์ ๊ฒฝํ์ด ํฌ๊ฒ ํผ์๋์ง ์๋๋ฐ,
read๋ ๋๋ฆฐ ์๋ต์ด ์ฌ์ฉ์ ๋ง์กฑ๋์ ๋ ํฐ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
์ด๋ฌํ ์ค์ ๊ฒฝํ์ ๋ฐํ์ผ๋ก, ๋๊ท๋ชจ ํธ๋ํฝ ์ํฉ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ํ๊ณผ ์ค๊ณ์ ๋ํ ์ ๊ทผ ๋ฐฉ์์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. ๋๊ท๋ชจ ํธ๋ํฝ์ ์ผ๋ฐ์ ์ธ ๋์ฒ ๋ฐฉ์
๋๊ท๋ชจ ํธ๋ํฝ์ read/write์ ๋ฐ์ดํฐ ๋์ผ์ฑ ๊ด์ ์์ ๊ตฌ๋ถํ๊ณ ,
์ ๊ฐ ์๊ฐํ๋ ์ผ๋ฐ์ ์ธ ๋์ฒ ๋ฐฉ์์ ๋ ์ฌ๋ ค ๋ณด์์ต๋๋ค.
read | write | |
---|---|---|
๋์ผํ ๋ฐ์ดํฐ | Cache | Ignore |
์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ | Replication | Queuing |
์ฌ๊ธฐ์ ๊ฐ ์ ๋ต์ ๋ํด ๊ฐ๋ตํ ์ค๋ช ํ์๋ฉด:
- Cache(์บ์): ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ฝ๋ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ์ ์ค์ด๊ธฐ ์ํด Redis๋ Memcached ๊ฐ์ ์ธ๋ฉ๋ชจ๋ฆฌ ์บ์๋ฅผ ํ์ฉํฉ๋๋ค. ์ด๋ ๋ง์ ์ฌ์ฉ์๊ฐ ๋์ผํ ์ํ ์ ๋ณด๋ฅผ ์กฐํํ๋ ๊ฒฝ์ฐ์ ํจ๊ณผ์ ์ ๋๋ค.
- Ignore(๋ฌด์): ๋์ผํ ๋ฐ์ดํฐ์ ๋ํ ์ค๋ณต ์ฐ๊ธฐ ์์ฒญ์ ์ผ๋ถ ๋ฌด์ํ๊ฑฐ๋ ๋ณํฉํ ์ ์์ต๋๋ค.
- Replication(๋ณต์ ): ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ๋ฌ ๋ ธ๋๋ก ๋ณต์ ํ์ฌ ๋ถํ๋ฅผ ๋ถ์ฐ์ํต๋๋ค. ๊ฐ ์ฌ์ฉ์๊ฐ ์์ ์ ๊ณ ์ ํ ์ ๋ณด๋ฅผ ์กฐํํ๋ ๊ฒฝ์ฐ์ ํจ๊ณผ์ ์ ๋๋ค.
- Queuing(๋๊ธฐ์ด): ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ์ ๋ํ ์ฐ๊ธฐ ์์ฒญ์ด ๋ง์ ๊ฒฝ์ฐ, SQS๋ Kafka ๊ฐ์ ๋ฉ์์ง ํ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ ๋ง์ ์ฌ์ฉ์๊ฐ ๊ฐ์ ๋ค๋ฅธ ์ฃผ๋ฌธ์ ์์ฑํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค.
2. ์ฃผ์ ํ ์ด๋ธ ๋ ์ฝ๋ ์ ํํฉ
ํ ์ด๋ธ | row ๊ฐ์ |
---|---|
์ํ | XXXXX |
์ฌ์ฉ์ | XXXXXX |
์ฃผ๋ฌธ | XXXXXXX |
์ํ < ์ฌ์ฉ์ < ์ฃผ๋ฌธ : ์์ผ๋ก ๋ ์ฝ๋ ์๊ฐ ๋ง์ต๋๋ค.
์ด๋ ๋น์ฆ๋์ค ๋๋ฉ์ธ์ ํน์ฑ์ ๋ฐ์ํฉ๋๋ค.
์ํ ์๋ ์๋์ ์ผ๋ก ์ ํ์ ์ธ ๋ฐ๋ฉด, ์ฌ์ฉ์ ์๋ ๋ ๋ง๊ณ , ์ฃผ๋ฌธ์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๊ณ์ ๋์ ๋ฉ๋๋ค.
์ด๋ฌํ ๋ฐ์ดํฐ ํน์ฑ์ ๊ฐ ํ
์ด๋ธ์ ์ ํฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ํ๊ณผ ํธ๋ํฝ ์ฒ๋ฆฌ ์ ๋ต์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
3. ๋๊ท๋ชจ ํธ๋ํฝ์์ ์ฃผ์ ํ ์ด๋ธ์ ํธ๋ํฝ ํจํด
ํ ์ด๋ธ | read | write |
---|---|---|
์ํ | ๋์ฉ๋ ์ค๋ณต ์ฝ๊ธฐ (๋ง์ ์ฌ์ฉ์๊ฐ ๋์ผํ ์ํ ์ ๋ณด ์กฐํ) | ์๊ท๋ชจ ์์ฑ ํธ๋ํฝ |
์ฌ์ฉ์ | ๋์ฉ๋ ๋ถ์ฐ ์ฝ๊ธฐ (๊ฐ ์ฌ์ฉ์๊ฐ ์์ ์ ์ ๋ณด๋ง ์กฐํ) | ์๊ท๋ชจ ๊ฐฑ์ ํธ๋ํฝ |
์ฃผ๋ฌธ | ์๊ท๋ชจ ์กฐํ ํธ๋ํฝ | ๋์ฉ๋ ๋ถ์ฐ ์ฐ๊ธฐ (๋ง์ ์ฌ์ฉ์๊ฐ ๊ฐ์ ๋ค๋ฅธ ์ฃผ๋ฌธ ์์ฑ) |
๊ฐ ํ ์ด๋ธ์ ํธ๋ํฝ ํจํด์ ์์ธํ ์ดํด๋ณด๋ฉด:
- ์ํ ํ ์ด๋ธ: ์ธ๊ธฐ ์ํ์ด๋ ์ธ์ผ ์ํ์ ์๋ง์ ์ฌ์ฉ์๊ฐ ๋์์ ์กฐํํ๋ ์ค๋ณต ์ฝ๊ธฐ ํจํด์ด ๋ฐ์ํฉ๋๋ค.
- ์ฌ์ฉ์ ํ ์ด๋ธ: ์ด๋ฐ ํจํด์ ๋จ์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํ๋ฅผ ์ค ์ ์์ผ๋ฉฐ, ํนํ ๋์ ์ ์์ ์๊ฐ ๊ธ์ฆํ ๋ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค.
- ์ฃผ๋ฌธ ํ ์ด๋ธ: ํน๋ณ ์ด๋ฒคํธ ์ ์งง์ ์๊ฐ์ ๋๋์ ์ฃผ๋ฌธ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ธฐ ์ฉ๋๊ณผ ๋์์ฑ ์ ์ด ๋ฉ์ปค๋์ฆ์ ํฐ ๋ถ๋ด์ ์ค๋๋ค.
4. ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ์ ๋๊ท๋ชจ ํธ๋ํฝ ๋์ ์ ๋ต: NoSQL ์ ์ฉ
read | write | |
---|---|---|
์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ | replication or NoSQL | queuing or NoSQL |
์์ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ์ ๋ํ ๋๊ท๋ชจ ํธ๋ํฝ ์ฒ๋ฆฌ๋ฅผ ์ผ๋ฐ์ ์ธ ๋ฐฉ์์ผ๋ก replication๊ณผ queuing์ผ๋ก ์ ๋ฆฌํ์ต๋๋ค.
ํ์ง๋ง ์ด๋ฌํ ํจํด์์๋ ํ์ฌ ์ ํฌ๊ฐ ์ฌ์ฉ ์ค์ธ DynamoDB ๊ฐ์ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋์
๋ ํจ๊ณผ์ ์ธ ๋์์ด ๋ ์ ์์ต๋๋ค.
NoSQL์ ์ฅ์
DynamoDB์ ๊ฐ์ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋๊ท๋ชจ ํธ๋ํฝ ์ฒ๋ฆฌ์ ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ด ์์ต๋๋ค:
- ์ํ์ ํ์ฅ์ฑ (์๋ฒ ๋ ธ๋ ์ถ๊ฐ๋ก ์ฉ๋ ํ์ฅ)
- ์๋ ์ค๋ฉ (๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ํํฐ์ ์ ์๋ ๋ถ์ฐ)
- ๋์ ๊ฐ์ฉ์ฑ (์ฌ๋ฌ ๋ฆฌ์ ์ ๋ฐ์ดํฐ ๋ณต์ )
- ์จ๋๋งจ๋ ์ฉ๋ (ํธ๋ํฝ์ ๋ฐ๋ฅธ ์๋ ์ฉ๋ ์กฐ์ )
๋ง์น๋ฉฐ
replication๋ฅผ ์ฌ์ฉํ๋๋ผ๋, ์์ธก ๋ถ๊ฐ๋ฅํ ๋๊ท๋ชจ ํธ๋ํฝ์ ๋๋นํ๋ ค๋ฉด ๋ง์ ์์ replica๊ฐ ํ์ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ ํฌ๊ฐ ์ฆ๊ฒจ ์ฌ์ฉํ๋ Lambda๋ DynamoDB์ ๋น์ฉ ๊ด์ ์์ ๋งค์ฐ ์ ๋ฆฌํ ์กฐํฉ์
๋๋ค.
๋ค๋ฅธ ๋ฐ์ดํฐ์ Join ๋์ง ์์ ์ ์๊ณ (Key Value ํํ๋ก ์ ์ฅํ ์ ์๊ณ , ์ฌ์ฉ์๋ผ๋ฆฌ ๊ณต์ ํ์ง ์๋ ๋ฐ์ดํฐ),
์งง์ ์๊ฐ์ read ํน์ write๋๋ ๋ฐ์ดํฐ๋ผ๋ฉด NoSQL์ ๊ณ ๋ คํด ๋ณผ ๋งํฉ๋๋ค.
๊ฐ์ฌํฉ๋๋ค.