2014. 10. 15 ~ 10. 31์ ์์
[StressTest#4 + Performance Tuning]
์ฝ ์ด์ฃผ๋์, ๊ฒ์ผ๋ฆ์ผ๋ก ๋ฏธ๋ฃฌ ์์
์ ํ๊ณ
1. ํผ๋ธ๋ฆฌ์
์ธก์์ ์ ๋ฌ๋ฐ์ ๋ถ๋ฏธ ์๋ฒ ๋จธ์ 3๋์ ๊ฒ์์๋ฒ๋ฅผ ๋ฐฐ์นํ๊ณ , ์คํธ๋ ์ค ํ
์คํธ๋ฅผ ์งํ
ํผ๋ธ๋ฆฌ์
์ธก ์ด๊ธฐ ์ค์ ย
์ฒ์ ํ์
ํ๋ ๋จ๊ณ์ด๊ธฐ์, ์ด๊ธฐ ์ค์ ์ ๊ฐ๋ฐ์ฌ์์ ์งํํ๋ ๊ฒ์ผ๋ก ๊ฒฐ์ .
ssh ์ ๊ทผ์ ํตํด ์
ํ
๋ฐ ํ
์คํธ ์งํํ๊ธฐ๋ก.
1) os๋ฒ์ ๊ณผ ์๋ฒ ๊ตฌ์ฑ๋(์ญํ ๋ฐ ๊ฐ๋ฐฉํฌํธ ๋ช
์)๋ฅผ ํผ๋ธ๋ฆฌ์
์ธก์ ์ ๋ฌ
2) ํ๋์จ์ด ๋ฐฉํ๋ฒฝ ์ธํ
๋ถํ
3) SSH ๊ถํ ํ๋
2. ์ด๊ธฐ ์ธํ
๋ฐ ๊ณผ๋ถํ ํ
์คํธ
์ธ๋ถ ๋ง์์ ๊ณผ๋ถํ ํ
์คํธ ์งํ ์ ๊ฐ์์ ์ ๋ฅผ 20~30๊ฐ๋ง ๊ตฌ๋์์ผ๋ ์ ์ ๊ฑฐ๋ถ(connectoin refused) ์๋ฌ ๋ฐ์ :
-> ๋คํธ์ํฌ ํ๋์จ์ด ๋จ์์ ddos ๋ฐฉ์ด๋ฅผ ์ํด ์ ์์ ์กฐ์ ํ๋ ๊ฒ์ผ๋ก ๋ณด์ฌ,ย ํ ๋น๋ฐ์ ์๋ฒ ๋จธ์ ์์ ํ
์คํฐ๋ฅผ ๋๋ฆผ(vpn ๋ด๋ถ์์ ์งํ)
์ธํ
ํ ํ
์คํธ์ ์ฝ 3~4000์ ๊ฐ์์ ์ ๋ฅผ ๋์ด์๋ฉด ์ด๋น ์ฒ๋ฆฌ๋์ด ๋ ์ฆ๊ฐํ์ง ๋ชปํ๊ณ , DB ๋ฐ ๊ฒ์์๋ฒ์ CPUํ๋ก๋ย -> ์ ์ ๊ฑฐ๋ถ ์๋ฌ ๋ฐ์ (front-end nginx ๋ ๋ฒจ์์ ์ฒ๋ฆฌ๋์ง ์์ ๋ฆฌํ์คํธ ํ๊ฐ ๊ฐ๋์ฐจ ๊ฑฐ์ )
3. ๋ํ
์ผํ ์ฑ๋ฅ ๋ฐ ๋ณ๋ชฉ ํ์ธ์ ์ํด ์ฑ๋ฅํ๊ฐ ๋ชจ๋์ ์ถ๊ฐ
ํ
์คํฐ : ์์ฒญ ๋ฆฌํ์คํธ ์ ๋ฐ ์ฑ๊ณต๋ฅ ๊ธฐ๋ก, ์ด๋น ๋ฆฌํ์คํธ ์ฒ๋ฆฌ๋ ์ธก์
ํ
์คํฐ ํ : ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉํ๋ ๋ฆฌํ์คํธ(๋ญํน ํ์ธ)์ ๋ฆฌ์คํฐ์ค ํ์์ ํ ๋๋ก ์๋ต์๋ ์ฃผ๊ธฐ์ ์ธก์
์๋ฒ ๋ณ๋ชฉ ํ์ธ : ๋ฆฌํ์คํธ ๋ณ ์๋ต์๊ฐ ์ธก์ (ํ๊ท /์ต๋ ์๊ฐ)
4. ๋ณ๋ชฉ ํ์ธ ๋ฐ ์ฑ๋ฅ ๊ฐ์
๋ชฉํ ์ฑ๋ฅ์ ์๋ง์ ๋์ (๊ฐ์์ ์ )์ด๋ฏ๋ก ์ฑ๋ฅ ๊ฐ์ ์๋์ฑ๋ฅ ๊ฐ์ ์๋ 0 : ๋ค์ํ ํ๊ฒฝ์ค์ ย
์ฑ๋ฅ ๊ฐ์ ์๋ 0 : nginx / gunicorn / os ์์ ย ๋คํธ์ํฌ/๋ฆฌํ์คํธ ํ/๋ฐฑ์
ํ ์กฐ์ : ํฐ ๊ฐ์ ์ ์์์ง๋ง ์ต๋์น ํ์ฉ์ ์ํ ๋ฐ ์์
์ผ๋ก ์๊ฐํ๊ณ ์์ ์ผ์
์ฑ๋ฅ ๊ฐ์ ์๋ 1 :ย ย redis๋ฅผ ํตํด ์ ์ ์ ๋ณด ๋ฐ ๋ญํน ๋ฐ์ดํฐ ์บ์ฑ
- ํ
์คํธ ๊ฒฐ๊ณผ ํฐ ์ฑ๋ฅํฅ์์ ์ป์ง ๋ชปํจ(์ด์ ๋ ์ดํ ๊ฒฐ๊ณผ์ ์ฒจ๋ถ)
์ฑ๋ฅ ๊ฐ์ ์๋ 2 : postgresql ์ปค๋ฅ์
ํ๋ง
- ํ
์คํธ ์งํ ์, ์ด๋น ์ฒ๋ฆฌ๋ ํ๊ณ์ ๋ฌํ๋ฉด DB server์ ๋จ์ผ postgresql ํ๋ก์ธ์ค ๋ก๋๋ ์์ง๋ง, ์์์ด ๋ง์ postgresql connection ๋ฐ ๋์ํ๋ ํ๋ก์ธ์ค๊ฐ ์์ฑ๋์ด CPU ํ ๋ก๋. DB์ ์ฒ๋ฆฌ ๋๋ณด๋ค, connection ์ฒ๋ฆฌ์ ์ค๋ฒํค๋๊ฐ ์๋ ๊ฒ์ผ๋ก ํ๋จ, DB ์ปค๋ฅ์
ํ์ ํตํ ๊ฐ์ ์ ์ ํ
1)ย django-postgrespool ์ ์ฉ : ์ฒ๋ฆฌ๋ ํ๊ณ์ ๋ฌํ ๋ ์ฏค connectoin ์ซ์์ ๋ณํจ์ด ์์. ์ต์
๊ฐ์ ์ด๋ฆฌ์ ๋ฆฌ ์์ ํด๋ณด์๋ ๊ฐ์ ๋์ง ์์ ํ๋์ด๋ ๊ฒฐ๊ณผ ํ์ธ๋ณด๋ค, ๋ค๋ฅธ ์๋ฃจ์
์ ์ฌ์ฉํด๋ณด๊ธฐ๋ก. (gevent์ ์ฌ์ฉํ๋ ์ต์
์์ ๊ตฌ๋ ํ์ธ์ด ๋์ง ์์๋ค๋ ํฌ์คํธ๋ฅผ ํ์ธํ๊ณ , ๋ฅ ๋ค์ด๋ธ๋ ๋ค๋ฅธ ์๋ฃจ์
์ผ๋ก ํด๊ฒฐ๋์ง ์์ผ๋ฉด ํ๋ ๊ฒ์ผ๋ก)
2)ย djorm-ext-pool ์ ์ฉ : ๋จ์ผ ์ปค๋ฅ์
์ต์
์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์๋, django appํํ๋ก ๊ตฌํ๋ 'djorm-ext-pool'์ ์ ์ฉํด ๋ด. ํ
์คํธ ๊ฒฐ๊ณผ ์ฒ๋ฆฌ๋์ด ๋์ด๋๋, ์ค์ ํ limit์ ๋์ด์์ง ์๊ณ ์์ ์ ์ธ ์ปค๋ฅ์
ํ๋ง์ด ์งํ ๋จ. ์ปค๋ฅ์
์ค๋ฒํค๋๊ฐ ์ค์ด๋ค๋ฉด์ 1๋ง๊ฐ ๊ฐ๋์ ๊ฐ์์ ์ ๊ตฌ๋์๋ DB์๋ฒ๋ ์ฌ์ ๋กญ๊ฒ ์ฒ๋ฆฌ. ์ดํ๋ ๊ฐ ๊ฒ์์๋ฒ์์ CPUํ๋ก๋๋ก ์ธํด ์ฒ๋ฆฌ๋ ํ๊ณ (์ดํ ํ
์คํฐํ DB์๋ฒ์ ๊ตฌ๋)
5. ๊ธฐํ ์์
๋ฐ ๊ฒฐ๊ณผ
๋ณด์ ์์
์งํย
- ํจํท ์ํธํ ๋ฐ ๊ธฐํ ๋ฏธ๋ค๋์๋ ๋ณด์ ์์
์ํ
์ต์ข
ํ
์คํธ
1) 8000๊ฐ์ ๊ฐ์์ ์ ๊ตฌ๋ : ์ด๋น 208๊ฐ์ ๋ฆฌํ์คํธ๋ฅผ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌ.
ย - ๊ฒ์ ์๋ฒ์ ๊ฒฝ์ฐ 7~80%์ ์ ์ ์จ
ย - DB์๋ฒ์ ๊ฒฝ์ฐ ๋งค์ฐ ์ฌ์ ๋ก์ด ์ ์ ์จ
ย - ๊ฒ์ ์๋ฒ๋ฅผ ๋๋ฆฌ๋ฉด, ์ฝ 6~7๋ฐฐ ์ ๋๊น์ง ์ ํ์ ์ธ ํผํฌ๋จผ์ค ํฅ์์ ๊ธฐ๋
ย ย (์ด๋น 1000๊ฐ ๊ฐ๋์ ๋ฆฌํ์คํธ๊น์ง ๊ธฐ๋ : 5๋ง ์ ์ ๊ตฌ๋์ ๊ฒฝ์ฐ)
๊ฒฐ๊ณผ ๊ธฐ๋ก :ย http://goo.gl/A1MDn8
๋ฉ๋ชจ๋ฆฌ ์บ์ฑ์ ๊ฒฝ์ฐ ๋์
์ ํฐ ํผํฌ๋จผ์ค ํฅ์์ ์ป์ ์ ์์๋ ์ด์ ๋
๋น์ ๋ณ๋ชฉ์์ฒด๊ฐ DB์ ์ฒ๋ฆฌ๋/์๋๊ฐ ์๋์๊ธฐ ๋๋ฌธ. ์ด๋์ ๋ ๊ฐ์ ์ ์์ ์ ์์๊ฒ ์ง๋ง, ๋ก๊ทธ์ธ ์ ๋ฐ์ํ๋ DB ์ ๊ทผ์์ ์์์ด ๋ง์ ์ปค๋ฅ์
์ ์์ฑํ๊ฒ ๋๊ณ , ๊ทธ๋ก์ธํ ์ค๋ฒํค๋๊ฐ ์ฒ๋ฆฌ๋ ํ๊ณ๋ฅผ ๋ง๋ค๊ณ ์์์.
๋ฉ๋ชจ๋ฆฌ ์บ์ฑ์ ๊ฒฝ์ฐ ๋ ๋ง์ ์์ ์ ์ ์
์ด ์์ฑ๋๊ณ , DB์ ์ฒ๋ฆฌ ์๋์ ํ๊ณ๊ฐ ๋ฌํ ๋ ์ฏค ๋น์ ๋ณผ ๊ฒ์ผ๋ก ๊ธฐ๋.
+ ์บ์ ํํธ๋ฅผ ๋์ด๊ธฐ ์ํด, ์บ์ฑ ๋จ์์ ๋ฒ์๋ฅผ ์กฐ๊ธ๋ ๋๋ฆฌ๋ ์ถ๊ฐ ์์
์ To Do๋ก ๋จ๊น
ย ๊ทธ ์ธ TA ํ๋ก์ ํธ์ ๋ํ ๋ด์ฉ๊ณผ ๊ธฐํ ๋ง๋จ์ ๋ฐ๋ก ํฌ์คํธ๋ฅผ ์์ฑ ์์
๋ถ๋ฏธ ์์ฐจ๋ก ์ธํ ์ฌ์ํ ์ด๋ ค์ ์กด์ฌ
๋ฐฉํ๋ฒฝ ์ค์ ์์์ ์ฌ์ํ ์ปค๋ฎค๋์ผ์ด์
๋ฏธ์ค์๋ ๋์ ์๊ฐ์ด ๊ฑธ๋ฆผ
Python๊ณผ Django๋ผ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ป์ ์ฅ์ ์ ์ฒด๊ฐ
1) '์ฑ๋ฅ ์ธก์ ', '์์ธ ๋ถ์', '๋์(์ฑ๋ฅ ๊ฐ์ )'์ ๋๋ ์๊ฐ์ด ๋งค์ฐ ์งง์์
2) '์ธก์ '๊ณผ '๋ถ์'์ ์คํฌ๋ฆฝํธ ์ธ์ด์ ํน์ฑ์ ๋น ๋ฅด๊ฒ ์งํ
3) '๋์'์ ๊ฒฝ์ฐ ์ ๋ง๋ค์ด์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์ด๋ฏธ ๋ง์ด ์กด์ฌํ๊ธฐ์, ์ ๋ถ์๋ ์์ธ์ ๋ง๋ ์๋ฃจ์
์ ์ ์ฉํ์ฌ ์๋ฃ
์ด๋ฌํ ์ฅ์ ์ ๊ฐ๋ฐ์ ํ๋ณต ์์น์ ๋ง์กฑ์ํค๋๋ฐ์ ํฐ ๋์์ด ๋์๋๋ฐ,
์์น2) ๋น ๋ฅธ ํผ๋๋ฐฑ ์ ํตํด ์ฆ๊ฑฐ์์ ๋๋ ์ ์์์ ๋ฟ ์๋๋ผ, ์ด๋ฅผ ํ ๋๋ก ย ์์ธ์ ๋ถ์ํ๊ณ , ๊ฐ์ ์ฌํญ๋ค์ ํ์ธ, ์ฒด๊ฐํ๋ฉด์ ์์น4) ๊ฐ๋ฐ์๋ก์์ ๋์ ์์๊ณผ ์๋ถ์ฌ์ ๋ชจ๋ ๋๋ ์ ์์์