ย ๋ฌธ์ ์ํฉ
๋ถํ ํ
์คํธ ์ค 40์ด ์ดํ๋ถํฐ ์๋ต์ง์ธ๊ณผ socket timeout์ด ๋ฐ์ํ์ต๋๋ค. ํนํ Ramp-up ์ข
๋ฃ ์์ (๋ชจ๋ Thread ๋์ ํ์ฑ ๊ตฌ๊ฐ)์ ์ง์ค์ ์ผ๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
ํ
์คํธ ๊ตฌ์ฑ
โข
๋ธ๋ ํ๋ผ์ด๋ฐ์ด ํธ๋ํฝ ๊ธ์ฆ ์ํฉ ๊ฐ์
โข
1์๊ฐ ๊ธฐ์ค Thread Pool 5000ea ๋์ ์์ฒญ (์ผ์ผ ํ๊ท 50,000 ํธ๋ํฝ)
โข
๋์ ์ ์์์ ์ฝ 2%๊ฐ ๋งค์ด ์์ฒญ์ ๋ฐ์์ํจ๋ค๊ณ ๊ฐ์
โฆ
5000 * 0.02 = 100 (TPS)
โฆ
100 TPS ์ฑ๋ฅ ์์
โข
๋ก๊ทธ์ธ โ ์ํ ์กฐํ โ ์ฃผ๋ฌธ ์๋๋ฆฌ์ค
โข
์ ์ฒด ์กฐํ์ 10%๊ฐ ์ฃผ๋ฌธ์ผ๋ก ์ด์ด์ง์ ๊ฐ์
โฆ
๋ก๊ทธ์ธ: 100 * 0.3 = 30 (TPS)
โฆ
์ํ ์กฐํ: 100 * 0.6 = 60 (TPS)
โฆ
์ฃผ๋ฌธ: 100 * 0.1 = 10 (TPS)
โข
์งํ ๋ถํฌ(Zipf Distribution)์ ํ์ฉํ ํน์ ์ํ ์กฐํ ์ง์ค ๊ตฌํ
ย RDS ์ธ์คํฐ์ค ํ์
๋น์ RDS ์ธ์คํด์ค ํ์
์ t3.medium์ด์์ต๋๋ค.
ย ์ง๋จ ์์
1.
โDB ์ปค๋ฅ์
ํโ์ ์์ธ์ผ๋ก ์ ๊ทผํ์ฌ
2.
SpringBoot ์ ํ๋ฆฌ์ผ์ด์
์ HikariCP ์ค์ ์ค maxPoolSize์ ์กฐ์ ํด๋ดค์ง๋ง
3.
์ฝ๊ฐ์ ๋ณํ๋ง ์์ ๋ฟ ๊ทผ๋ณธ์ ์ผ๋ก ํด๊ฒฐ๋์ง ์์์ต๋๋ค.
ย ์์ธ ๊ฐ์
Socket Timeout์ ๋ฐ์ ์์ธ์ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ์ก๊ณ , ์งํํ์์ต๋๋ค.
1.
DB ๋ ๋ฒจ ๋ณ๋ชฉ
2.
๋นํจ์จ์ ์ฟผ๋ฆฌ(N+1 / ์ธ๋ฑ์ค ๋ฏธ๋น)๋ก ์ธํ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ ์๊ฐ ์ฆ๊ฐ
ํ๋ก์ ํธ ๋ง๊ฐ ๊ธฐํ๊น์ง ํ๋ฃจ๋ฐ์ ๋จ์ง ์์ ์ํฉ์ด๋ผ ์ฝ๋ ๋ ๋ฒจ ๋ฆฌํฉํ ๋ง์ ๋๊น์ง ๋ฐ์ด๋ถ์ด๊ธฐ๋ณด๋ค๋, ๋จผ์ โDB ๋ ๋ฒจ ๋ณ๋ชฉ ์ฌ๋ถโ๋ฅผ ์งํ๋ก ๋น ๋ฅด๊ฒ ํ๋ณํ๋ ์ชฝ์ ์ ํํ์ต๋๋ค.
ย ์์ธ ๋ถ์
ย Pool ๋ฌธ์
์ maxPoolSize ํ๋์ด ํจ๊ณผ์ ์ด์ง ์์์๊น?
Pool์ โ๋์์ ์ก์ ์ ์๋ ์ปค๋ฅ์
์ ์โ๋ฅผ ๋๋ ค์ค ์ ์์ง๋ง, DB๊ฐ ์ปค๋ฅ์
์ ๋ฐํํ๋ ์๋๋ฅผ ์ฌ๋ ค์ฃผ์ง ์์์ต๋๋ค.
DB์ ์ฑ๋ฅ ์ ํ์ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
โข
์ฟผ๋ฆฌ ์ฒ๋ฆฌ ์๊ฐ์ด ๋์ด๋จ
โข
ํธ๋์ญ์
์ ์ ์๊ฐ์ด ๊ธธ์ด์ง
โข
์ปค๋ฅ์
๋ฐํ์ด ์ง์ฐ๋จ
โข
ํ์ active๊ฐ ๊ณ ์ ๋๊ณ ์์ฒญ์ด ๋๊ธฐํจ
โข
๊ฒฐ๊ตญ timeout์ผ๋ก ์ด์ด์ง
๋ฐ๋ผ์ Pool์ ํค์๋ ์กฐ๊ธ ์ํ๋๋ ๋ฏํ๋ค๊ฐ ๊ฒฐ๊ตญ ๋ค์ ๋ณ๋ชฉ์ด ๋ฐ์ํ๋ ํ์์ด ๋ฐ๋ณต๋์์ ๊ฒ์ด๋ผ๊ณ ํ๋จํ์ต๋๋ค.
ย Credit ๊ณ ๊ฐ
โข
CPUUtilization: ํน์ ๊ตฌ๊ฐ์์ CPU๊ฐ 90~100%์ ์ ์ง๋๋ ํจํด์ ๋ณด์
โข
CPUCreditUsage: Credit Burst ๊ตฌ๊ฐ์ด ๋ณด์ (t๊ณ์ด์ ์ธ์คํด์ค ํ์
์ Credit์ ์ฌ์ฉ)
์ด ํจํด์ โPoolโ๋ณด๋ค๋ DB ์ฒ๋ฆฌ ์ฑ๋ฅ ์ชฝ์ ๊ฐ๊น์ ์ต๋๋ค.
t ๊ณ์ด์ โ๋ฒ์คํธ๋ก ์ ๊น ๋ฒํธ ์๋ ์์ง๋งโ, ๋ถํ๊ฐ ์ง์๋๋ฉด ํฌ๋ ๋ง ์๋ชจ โ ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
๋ํ ํฌ๋ ๋ง ๊ณ ๊ฐ ์์ ๊ณผ timeout ๊ตฌ๊ฐ์ด ์ผ์นํ์ต๋๋ค.
ย ํด๊ฒฐ ๊ณผ์
์์ ์กฐ์น(์๋์ ๊ฒ์ฆ): RDS ์ธ์คํด์ค ํ์
์ ๊ณผํ๊ฒ ํฅ์
โ์ ๋ง DB์ ์ฑ๋ฅ์ด ์์ธ์ธ๊ฐ?โ๋ฅผ ํ์คํ ๊ท๋ช
ํ๊ธฐ ์ํด, RDS ์ธ์คํด์ค๋ฅผ m5g.8large๋ก ์๋์ ์ผ๋ก ํฌ๊ฒ ์ฌ๋ ค ๊ฒ์ฆํ์ต๋๋ค.
โ๋๋ฌด ํฐ ์ฌ์ ์๋๊ฐ?โ ํ ์ ์์ผ๋ฉฐ, ํฐ ์ฌ์์ด ์ฌ์ค์์๋ ์ธ๊ณผ๊ด๊ณ๋ฅผ ํ์ ์ํค๊ธฐ ์ํ ๊ฒ์ฆ์ด๋ผ๊ณ ํ๋จํ์ต๋๋ค. ๊ฒ์ฆ ์ดํ์๋ ์ฌ์ด์ฆ๋ฅผ ์ค์ฌ ๊ณผ๋ํ ๋น์ฉ์ด ๋ฐ์ํ์ง ์๋๋ก ํ์ต๋๋ค.
ย ๊ฒฐ๊ณผ:
Transaction per Second
โข
์ํ ์กฐํ TPS: 120 TPS ์ ํ
โข
Error Rate 1% ๋ฏธ๋ง
ย ๊ฐ์ ์
์ธ์คํด์ค์ ์คํ์
์ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง๋ง, ๊ทผ๋ณธ์ ์ธ ํด๊ฒฐ ๋ฐฉ์์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๋ฌผ๋ก ์ธ์คํด์ค์ ์คํ์ ํค์์ผ ํ๋ ์ํฉ์ด ์๊ฒ ์ง๋ง, ์ง๊ธ ์ํฉ์์ ์ธ์คํด์ค ์คํ์
์ ์ฅ์ ๋ฅผ ๋ฉ์ถ๋ ์๊ธ ์กฐ์น์์ ๋ฟ์ผ ๊ฒ์
๋๋ค.
๋ชฉํ๋ ํฐ DB๋ก ๋ฒํฐ๊ธฐ๊ฐ ์๋๋ผ, ๋ฎ์ ์คํ์์๋ ์ด์ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ก ๋ฐ๊พธ๋ ๊ฒ์
๋๋ค.
๋ฐ๋ผ์ ์ ๋ฆฌํ ๊ฐ์ ๋ฐฉํฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
โข
์บ์ฑ ์ ์ฉ์ผ๋ก DB ์์กด๋ ๊ฐ์
โข
fetch join / N+1 ์ ๊ฑฐ
โข
DB Replicas ํ์ฅ ๋ฐ ๋ถํ ๋ถ์ฐ
โข
CQRS ํจํด ์ ์ฉ


