VKontakte ์์ฑ์ ์ญ์ฌ๋ Wikipedia์ ์์ผ๋ฉฐ Pavel์ด ์ง์ ๋งํ์ต๋๋ค. ์ด๋ฏธ ๋ชจ๋๊ฐ ๊ทธ๋
๋ฅผ ์๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. HighLoad++ Pavel ์ฌ์ดํธ์ ๋ด๋ถ, ์ํคํ
์ฒ ๋ฐ ๊ตฌ์กฐ ์ ๋ณด
์๋ ์ธ์ด ์์ฟจ๋ก๋น์น (
XNUMX๋ ๋๊ฒ ๋ฐฑ์๋์ ๊ด๋ จ๋ ์จ๊ฐ ์ ๋ฌด๋ฅผ ๋งก์์์ต๋๋ค.
- ๋ฏธ๋์ด ์ ๋ก๋, ์ ์ฅ, ์ฒ๋ฆฌ, ๋ฐฐํฌ: ๋น๋์ค, ๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ, ์ค๋์ค, ์ฌ์ง, ๋ฌธ์.
- ์ธํ๋ผ, ํ๋ซํผ, ๊ฐ๋ฐ์ ๋ชจ๋ํฐ๋ง, ๋ก๊ทธ, ์ง์ญ ์บ์, CDN, ๋ ์ RPC ํ๋กํ ์ฝ.
- ์ธ๋ถ ์๋น์ค์์ ํตํฉ: ํธ์ ์๋ฆผ, ์ธ๋ถ ๋งํฌ ๊ตฌ๋ฌธ ๋ถ์, RSS ํผ๋.
- ์ ์ ์๋ ์ฝ๋๋ฅผ ํ๊ตฌํด์ผ ํ๋ ๋ค์ํ ์ง๋ฌธ๊ณผ ๋ต๋ณ์ผ๋ก ๋๋ฃ๋ฅผ ๋์ต๋๋ค.
์ด ๊ธฐ๊ฐ ๋์ ๋๋ ์ฌ์ดํธ์ ๋ง์ ๊ตฌ์ฑ ์์๋ฅผ ์์ ๋ฃ์์ต๋๋ค. ๋๋ ์ด ๊ฒฝํ์ ๊ณต์ ํ๊ณ ์ถ๋ค.
์ผ๋ฐ ์ํคํ ์ฒ
ํ์์ ๊ฐ์ด ๋ชจ๋ ๊ฒ์ ์์ฒญ์ ์๋ฝํ๋ ์๋ฒ ๋๋ ์๋ฒ ๊ทธ๋ฃน์์ ์์๋ฉ๋๋ค.
ํ๋ก ํธ ์๋ฒ
์ ๋ฉด ์๋ฒ๋ HTTPS, RTMP ๋ฐ WSS๋ฅผ ํตํด ์์ฒญ์ ์๋ฝํฉ๋๋ค.
HTTPS - ์ฌ์ดํธ์ ๊ธฐ๋ณธ ๋ฐ ๋ชจ๋ฐ์ผ ์น ๋ฒ์ (vk.com ๋ฐ m.vk.com)๊ณผ ๋น์ฌ API์ ๊ธฐํ ๊ณต์ ๋ฐ ๋น๊ณต์ ํด๋ผ์ด์ธํธ(๋ชจ๋ฐ์ผ ํด๋ผ์ด์ธํธ, ๋ฉ์ ์ )์ ๋ํ ์์ฒญ์ ๋๋ค. ๋ฆฌ์ ์ ์ด ์์ด์ RTMP- ๋ณ๋์ ํ๋ก ํธ ์๋ฒ๋ฅผ ๊ฐ์ถ ๋ผ์ด๋ธ ๋ฐฉ์ก์ ์ํ ํธ๋ํฝ ๋ฐ WSS- ์คํธ๋ฆฌ๋ฐ API์ ๋ํ ์ฐ๊ฒฐ์ ๋๋ค.
์๋ฒ์ HTTPS ๋ฐ WSS์ ๊ฒฝ์ฐ ๊ฐ์น๊ฐ ์์ต๋๋ค. Nginx์. RTMP ๋ฐฉ์ก์ ๊ฒฝ์ฐ ์ต๊ทผ ์์ฒด ์๋ฃจ์ ์ผ๋ก ์ ํํ์ต๋๋ค. ํค๋ธ๊ทธ๋ฌ๋ ์ด๋ ๋ณด๊ณ ์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฉ๋๋ค. ๋ด๊ฒฐํจ์ฑ์ ์ํด ์ด๋ฌํ ์๋ฒ๋ ๊ณตํต IP ์ฃผ์๋ฅผ ์๋ฆฌ๊ณ ๊ทธ๋ฃน์ผ๋ก ์๋ํ๋ฏ๋ก ์๋ฒ ์ค ํ๋์ ๋ฌธ์ ๊ฐ ์์ด๋ ์ฌ์ฉ์ ์์ฒญ์ด ์์ค๋์ง ์์ต๋๋ค. HTTPS ๋ฐ WSS์ ๊ฒฝ์ฐ ์ด๋ฌํ ๋์ผํ ์๋ฒ๋ CPU ๋ถํ๋ฅผ ์์ฒด์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ํธ๋ํฝ์ ์ํธํํฉ๋๋ค.
WSS ๋ฐ RTMP์ ๋ํด์๋ ๋ ์ด์ ์ค๋ช ํ์ง ์๊ณ ์ผ๋ฐ์ ์ผ๋ก ์น ํ๋ก์ ํธ์ ๊ด๋ จ๋ ํ์ค HTTPS ์์ฒญ์ ๋ํด์๋ง ์ค๋ช ํฉ๋๋ค.
๋ฐฑ์๋
์ ๋ฉด ๋ค์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฐฑ์๋ ์๋ฒ๊ฐ ์์ต๋๋ค. ํ๋ฐํธ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ๋ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.
๊ทธ๊ฒ kPHP ์๋ฒ, HTTPS๊ฐ ์ด๋ฏธ ํด๋ ๋์๊ธฐ ๋๋ฌธ์ HTTP ๋ฐ๋ชฌ์ด ์คํ๋๊ณ ์์ต๋๋ค. kPHP๋ ๋ค์์์ ์คํ๋๋ ์๋ฒ์ ๋๋ค. ํ๋ฆฌํฌํฌ ๋ชจ๋ธ: ์ฌ๋ฌ ํ์ ํ๋ก์ธ์ค์ธ ๋ง์คํฐ ํ๋ก์ธ์ค๋ฅผ ์์ํ๊ณ ์ฒญ์ทจ ์์ผ์ ์ ๋ฌํ์ฌ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ฌ์ฉ์์ ๊ฐ ์์ฒญ ์ฌ์ด์ ํ๋ก์ธ์ค๊ฐ ๋ค์ ์์๋์ง ์๊ณ ๋จ์ํ ์ํ๋ฅผ ์๋์ XNUMX ๊ฐ ์ํ(๋ค์ ์์ํ๋ ๋์ ์์ฒญ ํ ์์ฒญ)๋ก ์ฌ์ค์ ํฉ๋๋ค.
๋ถํ ๋ถ๋ฐฐ
์ฐ๋ฆฌ์ ๋ชจ๋ ๋ฐฑ์๋๋ ๋ชจ๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฑฐ๋ํ ๋จธ์ ํ์ด ์๋๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ค ๋ณ๋์ ๊ทธ๋ฃน์ผ๋ก ๋๋์ด์ ธ ์์: ์ผ๋ฐ, ๋ชจ๋ฐ์ผ, API, ๋น๋์ค, ์คํ ์ด์ง... ๋ณ๋์ ๋จธ์ ๊ทธ๋ฃน์ ๋ฌธ์ ๋ ๋ค๋ฅธ ๋ชจ๋ ๋จธ์ ์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ์์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ์์ ์ ๋ฃ๋ ์ฌ์ฉ์๋ ๋ฌธ์ ๊ฐ ์๋์ง์กฐ์ฐจ ์ ์ ์์ต๋๋ค. ์์ฒญ์ ๋ณด๋ผ ๋ฐฑ์๋๋ ๊ตฌ์ฑ์ ๋ฐ๋ผ ์ ๋ฉด์ nginx์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค.
์งํ ์์ง ๋ฐ ์ฌ์กฐ์
๊ฐ ๊ทธ๋ฃน์ ๋ช ๋์ ์๋์ฐจ๊ฐ ํ์ํ์ง ์ดํดํ๋ ค๋ฉด QPS์ ์์กดํ์ง ๋ง์ญ์์ค. ๋ฐฑ์๋๊ฐ ๋ค๋ฅด๊ณ ์์ฒญ์ด ๋ค๋ฅด๋ฉฐ ๊ฐ ์์ฒญ์ QPS ๊ณ์ฐ์ ๋ณต์ก์ฑ์ด ๋ค๋ฆ ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๋ ์๋ฒ ์ ์ฒด, ์ฆ CPU ๋ฐ ์ฑ๋ฅ์ ๋ํ ๋ถํ ๊ฐ๋ ์ ๊ฐ์ง๊ณ ์ด์ํฉ๋๋ค..
์ฐ๋ฆฌ๋ ์์ฒ ๊ฐ์ ๊ทธ๋ฌํ ์๋ฒ๋ฅผ ๋ณด์ ํ๊ณ ์์ต๋๋ค. ๊ฐ ๋ฌผ๋ฆฌ์ ์๋ฒ๋ kPHP ๊ทธ๋ฃน์ ์คํํ์ฌ ๋ชจ๋ ์ฝ์ด๋ฅผ ์ฌํ์ฉํฉ๋๋ค(kPHP๋ ๋จ์ผ ์ค๋ ๋์ด๋ฏ๋ก).
์ฝํ ์ธ ์๋ฒ
CS ๋๋ Content Server๋ ์คํ ๋ฆฌ์ง์ ๋๋ค.. CS๋ ํ์ผ์ ์ ์ฅํ๊ณ ์ ๋ก๋๋ ํ์ผ๊ณผ ๊ธฐ๋ณธ ์น ํ๋ฐํธ์๋๊ฐ ํ ๋นํ๋ ๋ชจ๋ ์ข ๋ฅ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๋ ์๋ฒ์ ๋๋ค.
์ฐ๋ฆฌ๋ ํ์ผ์ ์ ์ฅํ๋ ์๋ง ๊ฐ์ ๋ฌผ๋ฆฌ์ ์๋ฒ๋ฅผ ๋ณด์ ํ๊ณ ์์ต๋๋ค. ์ฌ์ฉ์๋ ํ์ผ ์ ๋ก๋๋ฅผ ์ข์ํ๋ฉฐ ์ฐ๋ฆฌ๋ ํ์ผ์ ์ ์ฅํ๊ณ ๊ณต์ ํ๋ ๊ฒ์ ์ข์ํฉ๋๋ค. ์ด๋ฌํ ์๋ฒ ์ค ์ผ๋ถ๋ ํน์ pu/pp ์๋ฒ์ ์ํด ํ์๋ฉ๋๋ค.
ํธ/pp
VK์์ ๋คํธ์ํฌ ํญ์ ์ด๋ฉด pu/pp๊ฐ ๋ณด์ ๋๋ค.
pu/pp๋ ๋ฌด์์
๋๊น? ์๋ฒ๋ฅผ ์ฐจ๋ก๋ก ๋ซ๋ ๊ฒฝ์ฐ ๋ซํ ์๋ฒ์ ํ์ผ์ ์
๋ก๋ํ๊ณ ๋ค์ด๋ก๋ํ๋ ๋ ๊ฐ์ง ์ต์
์ด ์์ต๋๋ค. ์ง์ ๋ฅผ ํตํด http://cs100500.userapi.com/path
๋๋ ์ค๊ฐ ์๋ฒ๋ฅผ ํตํด - http://pu.vk.com/c100500/path
.
Pu๋ ์ฌ์ง ์ ๋ก๋์ ์ญ์ฌ์ ์ด๋ฆ์ด๊ณ pp๋ ์ฌ์ง ํ๋ก์์ ๋๋ค.. ์ฆ, ํ ์๋ฒ๋ ์ฌ์ง ์ ๋ก๋์ฉ์ด๊ณ ๋ค๋ฅธ ์๋ฒ๋ ์ ๋ก๋์ฉ์ ๋๋ค. ์ด์ ์ฌ์ง์ด ๋ก๋๋ ๋ฟ๋ง ์๋๋ผ ์ด๋ฆ๋ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค.
์ด๋ค ์๋ฒ HTTPS ์ธ์ ์ข ๋ฃ์คํ ๋ฆฌ์ง์์ ํ๋ก์ธ์ ๋ก๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๋ํ ์ฌ์ฉ์ ํ์ผ์ ์ด๋ฌํ ์๋ฒ์์ ์ฒ๋ฆฌ๋๋ฏ๋ก ์ด๋ฌํ ์์คํ ์ ์ ์ฅ๋ ์ ๋ณด๋ ๋ ์ค์ํ ์๋ก ์ข์ต๋๋ค. ์๋ฅผ ๋ค์ด HTTPS ์ํธํ ํค์ ๋๋ค.
ํด๋น ๋จธ์ ์ ๋ค๋ฅธ ๋จธ์ ์ ์ํด ๋ซํ ์์ผ๋ฏ๋ก ํด๋น ๋จธ์ ์ "ํ์ดํธ" ์ธ๋ถ IP๋ฅผ ์ ๊ณตํ์ง ์์ ์ฌ์ ๊ฐ ์์ต๋๋ค. "ํ์"์ ์ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ฐ๋ฆฌ๋ IP ํ์ ์ ์ฝํ๊ณ ์ธ๋ถ ์ก์ธ์ค๋ก๋ถํฐ ์์คํ ์ ๋ณดํธํ ์ ์๋๋ก ๋ณด์ฅํ์ต๋๋ค. ์ฌ๊ธฐ์ ๋ค์ด๊ฐ IP๊ฐ ์ ํ ์์ต๋๋ค.
๊ณต์ IP์ ๋ํ ๋ณต์๋ ฅ. ๋ด๊ฒฐํจ์ฑ ์ธก๋ฉด์์ ์ด ์ฒด๊ณ๋ ๋์ผํ๊ฒ ์๋ํฉ๋๋ค. ์ฆ, ์ฌ๋ฌ ๋ฌผ๋ฆฌ์ ์๋ฒ๊ฐ ๊ณตํต ๋ฌผ๋ฆฌ์ IP๋ฅผ ๊ฐ์ง๋ฉฐ ๊ทธ ์์ ์๋ ํ๋์จ์ด๊ฐ ์์ฒญ์ ๋ณด๋ผ ์์น๋ฅผ ์ ํํฉ๋๋ค. ๋ค๋ฅธ ์ต์ ์ ๋ํด์๋ ๋์ค์ ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค.
๋ ผ๋์ ์ฌ์ง๊ฐ ์๋ ์ ์ ์ด ๊ฒฝ์ฐ์ด๋ค. ํด๋ผ์ด์ธํธ๋ ๋ ์ ์ ์์ ์ฐ๊ฒฐ์ ์ ์งํฉ๋๋ค.. ๋์ผํ ํธ์คํธ(pu.vk.com ๋๋ pp.vk.com)๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋ฌ ์์คํ ์ ๋์ผํ IP๊ฐ ์๋ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ ๋ธ๋ผ์ฐ์ ๋ ํ๋์ ํธ์คํธ์ ๋ํ ๋์ ์์ฒญ ์์ ์ ํ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ HTTP/2๊ฐ ๋๋ฆฌ ๋ณด๊ธ๋ ์๋์๋ ์ด๊ฒ์ด ๋ ์ด์ ์ค์ํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด ๊ณํ์ ๋ช ๋ฐฑํ ๋จ์ ์ ๋ชจ๋ ํธ๋ํฝ์ ํํ, ๋ค๋ฅธ ์๋ฒ๋ฅผ ํตํด ์คํ ๋ฆฌ์ง๋ก ์ด๋ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋จธ์ ์ ํตํด ํธ๋ํฝ์ ํํํ๊ธฐ ๋๋ฌธ์ ๋์ผํ ๊ตฌ์ฑํ๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋์ค์ ๊ฐ์ ๊ณผ๋ํ ํธ๋ํฝ์ ์์ง ํํํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฅผ ์ง์ ์ ์กํฉ๋๋ค. ํนํ ๋น๋์ค์ฉ์ผ๋ก ๋ณ๋์ ์ ์ฅ์๋ฅผ ์ํ ๋ณ๋์ ์ง์ ์ฐ๊ฒฐ์ ๋๋ค. ์ฐ๋ฆฌ๋ ํ๋ก์๋ฅผ ํตํด ๋ ๊ฐ๋ฒผ์ด ์ฝํ ์ธ ๋ฅผ ์ ์กํฉ๋๋ค.
์ผ๋ง ์ ์ฐ๋ฆฌ๋ ํฅ์๋ ๋ฒ์ ์ ํ๋ก์๋ฅผ ์ป์์ต๋๋ค. ์ด์ ์ผ๋ฐ ์ ํ๊ณผ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง, ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ํ์ํ ์ด์ ๋ฅผ ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค.
ํ์
2017๋
XNUMX์, ์ด์ ์ Sun์ ์ธ์ํ๋ Oracle์
pp์๋ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ๊ทธ๋ฃน๋น ํ๋์ IP - ๋นํจ์จ์ ์ธ ์บ์. ์ฌ๋ฌ ๋ฌผ๋ฆฌ์ ์๋ฒ๊ฐ ๊ณตํต IP ์ฃผ์๋ฅผ ๊ณต์ ํ๋ฏ๋ก ์์ฒญ์ด ์ด๋ ์๋ฒ๋ก ์ ๋ฌ๋๋์ง ์ ์ดํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ์๋ก ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๋์ผํ ํ์ผ์ ์ฐพ์ผ๋ฌ ์ค๋ฉด ํด๋น ์๋ฒ์ ์บ์๊ฐ ์์ผ๋ฉด ํ์ผ์ ๊ฐ ์๋ฒ์ ์บ์์ ๋จ๊ฒ ๋ฉ๋๋ค. ์ด๊ฒ์ ๋งค์ฐ ๋นํจ์จ์ ์ธ ๊ณํ์ด์ง๋ง ์๋ฌด๊ฒ๋ ํ ์ ์์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก - ์ฝํ ์ธ ๋ฅผ ์ค๋ฉํ ์ ์์ต๋๋ค., ์ด ๊ทธ๋ฃน์ ๋ํด ํน์ ์๋ฒ๋ฅผ ์ ํํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ณตํต IP๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ํ ๋ช ๊ฐ์ง ๋ด๋ถ์ ์ธ ์ด์ ๋ก ์ธํด ์ง์ญ์ ์ด๋ฌํ ์๋ฒ๋ฅผ ์ค์นํ ์ ์์์ต๋๋ค.. ๊ทธ๋ค์ ์ํธํํ ๋ฅด๋ถ๋ฅดํฌ์๋ง ์ ์์์ต๋๋ค.
ํ์๊ณผ ํจ๊ป ์ฐ๋ฆฌ๋ ์ ํ ์์คํ ์ ๋ณ๊ฒฝํ์ต๋๋ค. ์ด์ ์ฐ๋ฆฌ๋ ์ ๋์บ์คํธ ๋ผ์ฐํ : ๋์ ๋ผ์ฐํ , ์ ๋์บ์คํธ, ์์ฒด ๊ฒ์ฌ ๋ฐ๋ชฌ. ๊ฐ ์๋ฒ์๋ ๊ณ ์ ํ ๊ฐ๋ณ IP๊ฐ ์์ง๋ง ๊ณตํต ์๋ธ๋ท์ด ์์ต๋๋ค. ํ ์๋ฒ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ํธ๋ํฝ์ด ์๋์ผ๋ก ๋์ผํ ๊ทธ๋ฃน์ ๋ค๋ฅธ ์๋ฒ๋ก ๋ถ์ฐ๋๋ ๋ฐฉ์์ผ๋ก ๋ชจ๋ ๊ฒ์ด ๊ตฌ์ฑ๋ฉ๋๋ค. ์ด์ ํน์ ์๋ฒ๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์ค๋ณต ์บ์ฑ ์์, ์ ๋ขฐ์ฑ์๋ ์ํฅ์ ๋ฏธ์น์ง ์์์ต๋๋ค.
๋ฌด๊ฒ ์ง์. ์ด์ ์ฐ๋ฆฌ๋ ํ์์ ๋ฐ๋ผ ๋ค์ํ ์ถ๋ ฅ์ ๊ธฐ๊ณ๋ฅผ ์ค์นํ ์ฌ์ ๊ฐ ์์ผ๋ฉฐ, ์ผ์์ ์ธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ์๋ํ๋ "ํ์"์ ๋ฌด๊ฒ๋ฅผ ๋ณ๊ฒฝํ์ฌ ๋ถํ๋ฅผ ์ค์ฌ "ํด์"ํ๊ณ ๋ค์ ์์ ์ ์์ํ ์ ์์ต๋๋ค.
์ฝํ ์ธ ID๋ณ ์ค๋ฉ. ์ค๋ฉ์ ๋ํ ์ฌ๋ฏธ์๋ ์ ์ ์ผ๋ฐ์ ์ผ๋ก ์๋ก ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๋์ผํ "ํ์"์ ํตํด ๋์ผํ ํ์ผ๋ก ์ด๋ํ์ฌ ๊ณตํต ์บ์๋ฅผ ๊ฐ๋๋ก ์ฝํ ์ธ ๋ฅผ ์ค๋ฉํ๋ค๋ ๊ฒ์ ๋๋ค.
์ต๊ทผ 'Clover' ์ ํ๋ฆฌ์ผ์ด์ ์ ์ถ์ํ์ต๋๋ค. ์งํ์๊ฐ ์ง๋ฌธํ๊ณ ์ฌ์ฉ์๊ฐ ์ต์ ์ ์ ํํ์ฌ ์ค์๊ฐ์ผ๋ก ๋ต๋ณํ๋ ๋ผ์ด๋ธ ๋ฐฉ์ก์ ์จ๋ผ์ธ ํด์ฆ์ ๋๋ค. ์ฑ์๋ ์ฌ์ฉ์๊ฐ ์ฑํ ํ ์ ์๋ ์ฑํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๋ฐฉ์ก์ ๋์์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค 100๋ง๋ช ์ด์. ๊ทธ๋ค์ ๋ชจ๋ ๋ชจ๋ ์ฐธ๊ฐ์์๊ฒ ์ ์ก๋๋ ๋ฉ์์ง๋ฅผ ์์ฑํ๊ณ ์๋ฐํ๊ฐ ๋ฉ์์ง์ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค. ํ๋์ "ํ์"์์ ํ๋์ ์๋ฐํ๋ฅผ ์ํด 100๋ง ๋ช ์ด ์ค๋ฉด ๋๋ก๋ ๊ตฌ๋ฆ ๋ค์ ๊ตด๋ฌ๊ฐ ์๋ ์์ต๋๋ค.
๋์ผํ ํ์ผ์ ๋ํ ๊ธ์ฆํ๋ ์์ฒญ์ ๊ฒฌ๋๊ธฐ ์ํด ํน์ ์ ํ์ ์ฝํ ์ธ ์ ๋ํด ํด๋น ์ง์ญ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ "ํ์"์ ํ์ผ์ ๋ถ์ฐ์ํค๋ ์ด๋ฆฌ์์ ๊ณํ์ ์ฌ์ฉํฉ๋๋ค.
๋ด๋ถ์์ ํ์
nginx์ ๋ฆฌ๋ฒ์ค ํ๋ก์, RAM ๋๋ ๋น ๋ฅธ Optane/NVMe ๋์คํฌ์ ์บ์ํฉ๋๋ค. ์: http://sun4-2.userapi.com/c100500/path
โ ๋ ๋ฒ์งธ ์๋ฒ ๊ทธ๋ฃน์ธ ๋ค ๋ฒ์งธ ์ง์ญ์ ์์นํ "sun"์ ๋ํ ๋งํฌ์
๋๋ค. ์๋ฒ 100500์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์๋ ๊ฒฝ๋ก ํ์ผ์ ๋ซ์ต๋๋ค.
์บ์
์ฐ๋ฆฌ์ ์ํคํ ์ฒ ์ฒด๊ณ์ ์บ์ฑ ํ๊ฒฝ์ด๋ผ๋ ๋ ธ๋๋ฅผ ํ๋ ๋ ์ถ๊ฐํฉ๋๋ค.
์๋๋ ๋ ์ด์์ ๋ค์ด์ด๊ทธ๋จ์
๋๋ค. ์ง์ญ ์บ์, ์ฝ 20 ๊ฐ๊ฐ ์์ต๋๋ค. ์ด๊ณณ์๋ ์ค์ค๋ก ํธ๋ํฝ์ ์บ์ํ ์ ์๋ ์บ์์ "ํ์"์ด ์๋ ์ฅ์์
๋๋ค.
์ด๋ ๋ฉํฐ๋ฏธ๋์ด ์ฝํ
์ธ ์ ์บ์ฑ์ด๋ฉฐ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ ์ฌ๊ธฐ์ ์ ์ฅ๋์ง ์์ผ๋ฉฐ ์์
, ๋น๋์ค, ์ฌ์ง๋ง ์ ์ฅ๋ฉ๋๋ค.
์ฌ์ฉ์์ ์ง์ญ์ ํ์ธํ๊ธฐ ์ํด ๋น์ฌ๋ ์ง์ญ์์ ๋ฐํ๋ BGP ๋คํธ์ํฌ ์ ๋์ฌ๋ฅผ ์์งํฉ๋๋ค.. ํด๋ฐฑ์ ๊ฒฝ์ฐ ์ ๋์ฌ๋ก IP๋ฅผ ์ฐพ์ ์ ์์ผ๋ฉด geoip ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ตฌ๋ฌธ ๋ถ์ํด์ผ ํฉ๋๋ค. ์ฌ์ฉ์์ IP๋ฅผ ๊ธฐ์ค์ผ๋ก ์ง์ญ์ ๊ฒฐ์ ํฉ๋๋ค.. ์ฝ๋์์ ์ฌ์ฉ์์ ํ๋ ์ด์์ ์ง์ญ, ์ฆ ์ง๋ฆฌ์ ์ผ๋ก ๊ฐ์ฅ ๊ฐ๊น์ด ์ง์ ์ ๋ณผ ์ ์์ต๋๋ค.
์ด๋ป๊ฒ ์๋ํฉ๋๊น?
์ง์ญ๋ณ ํ์ผ ์ธ๊ธฐ๋๋ฅผ ๊ณ์ฐํฉ๋๋ค.. ์ฌ์ฉ์๊ฐ ์์นํ ์ฌ๋ฌ ์ง์ญ ์บ์์ ํ์ผ ์๋ณ์๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด ์์ ๊ฐ์ ธ์ ๋ค์ด๋ก๋ํ ๋๋ง๋ค ๋ฑ๊ธ์ ๋์ ๋๋ค.
๋์์ ์ ๋ง(์ง์ญ ์๋น์ค)๋ ๋๋๋ก API์ ์์ ๋ค์๊ณผ ๊ฐ์ด ๋งํฉ๋๋ค. โ๋๋ ๊ทธ๋ฐ ์บ์์ ๋๋ค. ์์ง ๋์๊ฒ ์๋ ๋ด ์ง์ญ์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ํ์ผ ๋ชฉ๋ก์ ์๋ ค์ฃผ์ธ์. โ API๋ ๋ฑ๊ธ๋ณ๋ก ์ ๋ ฌ๋ ์ฌ๋ฌ ํ์ผ์ ์ ๋ฌํ๊ณ , ๋ฐ๋ชฌ์ ์ด๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ํด๋น ์ง์ญ์ผ๋ก ๊ฐ์ ธ๊ฐ ํ ๊ฑฐ๊ธฐ์์ ํ์ผ์ ์ ๋ฌํฉ๋๋ค. ์ด๊ฒ์ด ์บ์์์ pu/pp์ Sun์ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด์ ์ ๋๋ค. ์ด ํ์ผ์ด ์บ์์ ์๋๋ผ๋ ์ฆ์ ํ์ผ์ ์์ฒด์ ์ผ๋ก ์ ๊ณตํ๊ณ ์บ์๋ ๋จผ์ ํ์ผ์ ์์ฒด์ ์ผ๋ก ๋ค์ด๋ก๋ํ ๋ค์ ๋ค์ ์ ๊ณตํ๊ธฐ ์์ํฉ๋๋ค.
์ด ๊ฒฝ์ฐ ์ฐ๋ฆฌ๋ ์ป๋๋ค ์ฌ์ฉ์์๊ฒ ๋ ๊ฐ๊น์ด ์ฝํ ์ธ ๊ทธ๋ฆฌ๊ณ ๋คํธ์ํฌ ๋ถํ๋ฅผ ๋ถ์ฐ์ํต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ชจ์คํฌ๋ฐ ์บ์์์๋ง ํผํฌ ์๊ฐ ๋์ 1Tbit/s ์ด์์ ๋ฐฐํฌํฉ๋๋ค.
ํ์ง๋ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค - ์บ์ ์๋ฒ๋ ๊ณ ๋ฌด๊ฐ ์๋๋๋ค. ์ธ๊ธฐ๊ฐ ๋งค์ฐ ๋์ ์ฝํ ์ธ ์ ๊ฒฝ์ฐ ๋ณ๋์ ์๋ฒ๋ฅผ ๊ตฌ์ถํ ๋คํธ์ํฌ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ์ฐ๋ฆฌ์ ์บ์ ์๋ฒ๋ 40-50 Gbit/s์ด์ง๋ง ์ด๋ฌํ ์ฑ๋์ ์์ ํ ๋ง๋ ์ฝํ ์ธ ๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ํด๋น ์ง์ญ์์ ์ธ๊ธฐ ์๋ ํ์ผ์ ๋ณต์ฌ๋ณธ์ ๋ ๊ฐ ์ด์ ์ ์ฅํ๋ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๊ณ ์์ต๋๋ค. ์ฌํด ๋ง๊น์ง ์ํ๋๊ธธ ๋ฐ๋๋๋ค.
์ฐ๋ฆฌ๋ ์ผ๋ฐ์ ์ธ ์ํคํ ์ฒ๋ฅผ ์ดํด๋ณด์์ต๋๋ค.
- ์์ฒญ์ ์๋ฝํ๋ ํ๋ฐํธ ์๋ฒ.
- ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐฑ์๋.
- ๋ ๊ฐ์ง ์ ํ์ ํ๋ก์๋ก ๋ซํ ์๋ ์ ์ฅ์์ ๋๋ค.
- ์ง์ญ ์บ์.
์ด ๋ค์ด์ด๊ทธ๋จ์์ ๋ฌด์์ด ๋น ์ก๋์? ๋ฌผ๋ก , ์ฐ๋ฆฌ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ ์์ง
์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋๋ผ ์์ง์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ ๋ค์ฌ์ง๋ ์๋ฏธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ค์ ๋ก ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๊ฒ์ ํ์ํ ์กฐ์น์
๋๋ค.. ์ด๋ VK๊ฐ ํญ๋ฐ์ ์ผ๋ก ์ธ๊ธฐ๋ฅผ ์ป์๋ 2008~2009๋
์ ํ๋ก์ ํธ๊ฐ ์ ์ ์ผ๋ก MySQL๊ณผ Memcache์์ ์๋ํ๋๋ฐ ๋ฌธ์ ๊ฐ ์์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ์ต๋๋ค. MySQL์ ํ์ผ์ ์ถฉ๋์ํค๊ณ ์์์ํค๋ ๊ฒ์ ์ข์ํ์ผ๋ฉฐ ๊ทธ ํ์๋ ๋ณต๊ตฌํ ์ ์์์ผ๋ฉฐ Memcache๋ ์ ์ฐจ ์ฑ๋ฅ์ด ์ ํ๋์ด ๋ค์ ์์ํด์ผ ํ์ต๋๋ค.
์ ์ ๋ ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์๋ ํ๋ก์ ํธ์๋ ๋ฐ์ดํฐ๋ฅผ ์์์ํค๋ ์๊ตฌ ์คํ ๋ฆฌ์ง์ ์๋๋ฅผ ์ ํ์ํค๋ ์บ์๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์ด๋ฌํ ์ํฉ์์๋ ์ฑ์ฅํ๋ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. ํ๋ก์ ํธ๊ฐ ์ด์ ์ ๋ง์ถ ์ค์ํ ์ฌํญ์ ์ฐ๋ฆฌ ์์ ๊ฑฐ์ ๋ค์ ์์ฑํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์๋ฃจ์ ์ ์ฑ๊ณต์ ์ด์์ต๋๋ค. ๋น์์๋ ๋ค๋ฅธ ํ์ฅ ๋ฐฉ๋ฒ์ด ์กด์ฌํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ํํ ์ ์๋ ๊ธฐํ์ ์ ์คํ ํ์์ฑ์ด ์์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ง์ง ์์๊ณ NoSQL๋ ์์ง ์กด์ฌํ์ง ์์์ผ๋ฉฐ MySQL, Memcache, PostrgreSQL๋ง ์์์ต๋๋ค. ๊ทธ๊ฒ ์ ๋ถ์์ต๋๋ค.
๋ฒ์ฉ ์๋. ๊ฐ๋ฐ์ C ๊ฐ๋ฐ์ ํ์ด ์ฃผ๋ํ์ผ๋ฉฐ ๋ชจ๋ ๊ฒ์ด ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ํ๋์์ต๋๋ค. ์์ง์ ๊ด๊ณ์์ด ๋ชจ๋ ๊ฑฐ์ ๋์ผํ ํ์ผ ํ์์ ๋์คํฌ์ ๊ธฐ๋กํ๊ณ , ๋์ผํ ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ผ๋ฉฐ, ๋์ผํ ๋ฐฉ์์ผ๋ก ์ ํธ๋ฅผ ์ฒ๋ฆฌํ์ผ๋ฉฐ, ์ฃ์ง ์ํฉ ๋ฐ ๋ฌธ์ ๋ฐ์ ์ ๊ฑฐ์ ๋์ผํ๊ฒ ์๋ํ์ต๋๋ค. ์์ง์ ์ฑ์ฅ์ผ๋ก ๊ด๋ฆฌ์๊ฐ ์์คํ ์ ์ด์ํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค. ์ ์ง ๊ด๋ฆฌํด์ผ ํ ๋๋ฌผ์์ด ์์ผ๋ฉฐ ์๋ก์ด ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฐ๊ฐ ์๋ํ๋ ๋ฐฉ๋ฒ์ ๋ค์ ๋ฐฐ์์ผ ํ๋ฏ๋ก ๋น ๋ฅด๊ณ ํธ๋ฆฌํ๊ฒ ์ฆ๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ค์ ๋ฒํธ.
์์ง์ ์ข ๋ฅ
ํ์ ๊ฝค ๋ง์ ์์ง์ ์์ฑํ์ต๋๋ค. ๋ค์์ ๊ทธ ์ค ์ผ๋ถ์ ๋๋ค: ์น๊ตฌ, ํํธ, ์ด๋ฏธ์ง, ipdb, ํธ์ง, ๋ชฉ๋ก, ๋ก๊ทธ, memcached, meowdb, ๋ด์ค, ๋ ธ์คํธ๋ผ๋ค๋ฌด์ค, ์ฌ์ง, ์ฌ์ ๋ชฉ๋ก, pmemcached, ์๋๋ฐ์ค, ๊ฒ์, ์ ์ฅ, ์ข์์, ์์ ๋ฑ
ํน์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ํ์ํ๊ฑฐ๋ ๋น์ ํ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ฐ ์์ ์ ๋ํด C ํ์ ์๋ก์ด ์์ง์ ์์ฑํฉ๋๋ค. ์ ์ ๋ผ.
์์ง์ด ๋ฐ๋ก ์์ด์ memcached, ์ผ๋ฐ ๊ฒ๊ณผ ์ ์ฌํ์ง๋ง ๋ง์ ์ฅ์ ์ด ์๊ณ ์๋๊ฐ ๋๋ ค์ง์ง ์์ต๋๋ค. ClickHouse๋ ์๋์ง๋ง ์๋ํฉ๋๋ค. ๋ณ๋๋ก ๊ตฌ๋งค ๊ฐ๋ฅ pmemcached -๊ฐ์ ์ง์์ ์ธ memcached, ๋ํ ๋ค์ ์์ํ ๋ ๋ฐ์ดํฐ๊ฐ ์์ค๋์ง ์๋๋ก RAM์ ๋ง๋ ๊ฒ๋ณด๋ค ๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์๋ ์์ต๋๋ค. ๊ฐ๋ณ ์์ ์ ์ํ ๋ค์ํ ์์ง(ํ, ๋ชฉ๋ก, ์ธํธ ๋ฑ ํ๋ก์ ํธ์ ํ์ํ ๋ชจ๋ ๊ฒ)์ด ์์ต๋๋ค.
ํด๋ฌ์คํฐ
์ฝ๋ ๊ด์ ์์๋ ์์ง์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ๋ก์ธ์ค, ์ํฐํฐ ๋๋ ์ธ์คํด์ค๋ก ์๊ฐํ ํ์๊ฐ ์์ต๋๋ค. ์ด ์ฝ๋๋ ํนํ ์์ง ๊ทธ๋ฃน์ด ์๋ ํด๋ฌ์คํฐ์์ ์๋ํฉ๋๋ค. ํด๋ฌ์คํฐ๋น ํ๋์ ์ ํ. memcached ํด๋ฌ์คํฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ ๋จ์ง ์์คํ ๊ทธ๋ฃน์ผ ๋ฟ์ ๋๋ค.
์ฝ๋๋ ๋ฌผ๋ฆฌ์ ์์น, ํฌ๊ธฐ ๋๋ ์๋ฒ ์๋ฅผ ์ ํ ์ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ ํน์ ์๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ๋ก ์ด๋ํฉ๋๋ค.
์ด๊ฒ์ด ์๋ํ๋ ค๋ฉด ์ฝ๋์ ์์ง ์ฌ์ด์ ์๋ ์ํฐํฐ๋ฅผ ํ๋ ๋ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ๋๋ฆฌ.
RPC ํ๋ก์
๋๋ฆฌ ์ฐ๊ฒฐ๋ฒ์ค, ๊ฑฐ์ ์ ์ฒด ์ฌ์ดํธ๊ฐ ์คํ๋ฉ๋๋ค. ๋์์ ์ฐ๋ฆฌ๋ ์๋น์ค ๊ฒ์ ์์ โ ๋์ ์ด ํด๋ฌ์คํฐ์ ๋ชจ๋ ํด๋ฌ์คํฐ์ ๋ชจ๋ ์ค๋์ ์์น๋ฅผ โโ์๋ ์ด ํ๋ก์์ ๋ํ ๊ตฌ์ฑ์ด ์์ต๋๋ค. ์ด๊ฒ์ด ๊ด๋ฆฌ์๊ฐ ํ๋ ์ผ์ ๋๋ค.
ํ๋ก๊ทธ๋๋จธ๋ ๋น์ฉ์ด ์ผ๋ง๋, ์ด๋์, ์ผ๋ง์ธ์ง ์ ํ ์ ๊ฒฝ ์ฐ์ง ์๊ณ ํด๋ฌ์คํฐ๋ก ์ด๋ํฉ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ๋ง์ ๊ฒ์ ํ์ฉํฉ๋๋ค. ์์ฒญ์ ๋ฐ์ผ๋ฉด ํ๋ก์๋ ์์น๋ฅผ ์๊ณ ์์ฒญ์ ๋ฆฌ๋๋ ์ ํฉ๋๋ค. ์ด๋ฅผ ์ค์ค๋ก ๊ฒฐ์ ํฉ๋๋ค.
์ด ๊ฒฝ์ฐ ํ๋ก์๋ ์๋น์ค ์ฅ์ ์ ๋ํ ๋ณดํธ ์ง์ ์
๋๋ค. ์ผ๋ถ ์์ง์ด ๋๋ ค์ง๊ฑฐ๋ ์ถฉ๋ํ๋ ๊ฒฝ์ฐ ํ๋ก์๋ ์ด๋ฅผ ์ดํดํ๊ณ ๊ทธ์ ๋ฐ๋ผ ํด๋ผ์ด์ธํธ ์ธก์ ์๋ตํฉ๋๋ค. ์ด๋ฅผ ํตํด ์๊ฐ ์ด๊ณผ๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ฝ๋๋ ์์ง์ด ์๋ตํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์์ง๋ง ์์ง์ด ์๋ํ์ง ์์ผ๋ฉฐ ์ด๋ป๊ฒ๋ ๋ค๋ฅด๊ฒ ์๋ํด์ผ ํ๋ค๋ ๊ฒ์ ์ดํดํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํญ์ ์๋ํ์ง ์๋๋ค๋ ์ฌ์ค์ ๋๋นํ์ฌ ์ฝ๋๋ฅผ ์ค๋นํด์ผ ํฉ๋๋ค.
ํน์ ๊ตฌํ
๋๋๋ก ์ฐ๋ฆฌ๋ ์ฌ์ ํ ์ผ์ข ์ ๋นํ์ค ์๋ฃจ์ ์ ์์ง์ผ๋ก ๊ฐ๊ณ ์ถ์ดํฉ๋๋ค. ๋์์, ์ฐ๋ฆฌ ์์ง์ฉ์ผ๋ก ํน๋ณํ ์ ์๋ ๊ธฐ์ฑ rpc-proxy๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์์ ์ ์ํ ๋ณ๋์ ํ๋ก์๋ฅผ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์์ง ์ฌ๊ธฐ์ ๊ธฐ์ ์๋ MySQL์ ๊ฒฝ์ฐ db-proxy๋ฅผ ์ฌ์ฉํ๊ณ ClickHouse์ ๊ฒฝ์ฐ - ์๋ผ ๊ณ ์์ด ์ง.
์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ์๋ํฉ๋๋ค. kPHP, Go, Python ๋ฑ ์ผ๋ฐ์ ์ผ๋ก RPC ํ๋กํ ์ฝ์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ์ฝ๋๋ฅผ ์คํํ๋ ํน์ ์๋ฒ๊ฐ ์์ต๋๋ค. ์ฝ๋๋ RPC ํ๋ก์์์ ๋ก์ปฌ๋ก ์คํ๋ฉ๋๋ค. ์ฝ๋๊ฐ ์๋ ๊ฐ ์๋ฒ๋ ์์ฒด ๋ก์ปฌ ํ๋ก์๋ฅผ ์คํํฉ๋๋ค. ์์ฒญ ์ ํ๋ก์๋ ์ด๋๋ก ๊ฐ์ผ ํ ์ง ์ดํดํฉ๋๋ค.
ํ ์์ง์ด ๋ค๋ฅธ ์์ง์ผ๋ก ์ด๋ํ๋ ค๋ ๊ฒฝ์ฐ ์ด์์ด๋ผ ํ ์ง๋ผ๋ ์ด์์ด ๋ค๋ฅธ ๋ฐ์ดํฐ ์ผํฐ์ ์์ ์ ์์ผ๋ฏ๋ก ํ๋ก์๋ฅผ ํต๊ณผํฉ๋๋ค. ์์ง์ ์์ ์ด์ธ์ ์์น๋ฅผ โโ์๋ ๋ฐ ์์กดํด์๋ ์ ๋ฉ๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ์ ํ์ค ์๋ฃจ์
์
๋๋ค. ํ์ง๋ง ๋ฌผ๋ก ์์ธ๋ ์์ต๋๋ค :)
๋ชจ๋ ์์ง์ด ์๋ํ๋ TL ๋ฐฉ์์ ์์ ๋๋ค.
memcache.not_found = memcache.Value;
memcache.strvalue value:string flags:int = memcache.Value;
memcache.addOrIncr key:string flags:int delay:int value:long = memcache.Value;
tasks.task
fields_mask:#
flags:int
tag:%(Vector int)
data:string
id:fields_mask.0?long
retries:fields_mask.1?int
scheduled_time:fields_mask.2?int
deadline:fields_mask.3?int
= tasks.Task;
tasks.addTask type_name:string queue_id:%(Vector int) task:%tasks.Task = Long;
์ด๊ฒ์ ๋ฐ์ด๋๋ฆฌ ํ๋กํ ์ฝ์ด๋ฉฐ ๊ฐ์ฅ ๊ฐ๊น์ด ์๋ ๋ก๊ทธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. protobuf. ์คํค๋ง๋ ์ ํ์ ํ๋, ๋ณตํฉ ์ ํ(๋ด์ฅ ์ค์นผ๋ผ ํ์ฅ) ๋ฐ ์ฟผ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์ค๋ช ํฉ๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ด ํ๋กํ ์ฝ์ ๋ฐ๋ผ ์๋ํฉ๋๋ค.
TCP/UDP๋ฅผ ํตํ TL์ ํตํ RPCโฆ UDP?
์ฐ๋ฆฌ๋ TL ์ฒด๊ณ ์์์ ์คํ๋๋ ์์ง ์์ฒญ์ ์คํํ๊ธฐ ์ํ RPC ํ๋กํ ์ฝ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ TCP/UDP ์ฐ๊ฒฐ์ ํตํด ์๋ํฉ๋๋ค. TCP๋ ์ดํดํ ์ ์์ง๋ง UDP๊ฐ ์์ฃผ ํ์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น?
UDP ๋์ ์๋ฒ ๊ฐ์ ์์ฒญ๋ ์์ ์ฐ๊ฒฐ ๋ฌธ์ ๋ฅผ ํผํ์ญ์์ค. ๊ฐ ์๋ฒ์ RPC ํ๋ก์๊ฐ ์๊ณ ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ ์์ง์ผ๋ก ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ ์๋ฒ๋น ์๋ง ๊ฐ์ TCP ์ฐ๊ฒฐ์ด ์์ต๋๋ค. ๋ถํ๊ฐ ์์ง๋ง ์ธ๋ชจ๊ฐ ์์ต๋๋ค. UDP์ ๊ฒฝ์ฐ์๋ ์ด ๋ฌธ์ ๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค.
์ค๋ณต TCP ํธ๋์ ฐ์ดํฌ ์์. ์ด๋ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ๋๋ค. ์ ์์ง์ด๋ ์ ์๋ฒ๊ฐ ์์๋๋ฉด ํ ๋ฒ์ ๋ง์ TCP ์ฐ๊ฒฐ์ด ์ค์ ๋ฉ๋๋ค. UDP ํ์ด๋ก๋์ ๊ฐ์ ์๊ณ ๊ฐ๋ฒผ์ด ์์ฒญ์ ๊ฒฝ์ฐ ์ฝ๋์ ์์ง ๊ฐ์ ๋ชจ๋ ํต์ ์ ๋ ๊ฐ์ UDP ํจํท: ํ๋๋ ํ ๋ฐฉํฅ์ผ๋ก ๋ ์๊ฐ๊ณ , ๋ ๋ฒ์งธ๋ ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋ ์๊ฐ๋๋ค. ํ ๋ฒ์ ์๋ณต - ์ฝ๋๋ ํธ๋์ ฐ์ดํฌ ์์ด ์์ง์ผ๋ก๋ถํฐ ์๋ต์ ๋ฐ์์ต๋๋ค.
์, ๋ชจ๋ ์๋ํฉ๋๋ค ๋งค์ฐ ์ ์ ๋น์จ์ ํจํท ์์ค๋ก. ํ๋กํ ์ฝ์ ์ฌ์ ์ก ๋ฐ ์๊ฐ ์ด๊ณผ๋ฅผ ์ง์ํ์ง๋ง ์์ค์ด ๋ง์ผ๋ฉด ๊ฑฐ์ TCP๋ฅผ ์ป๊ฒ ๋๋ฉฐ ์ด๋ ์์ต์ฑ์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ฐ๋ค๋ฅผ ๊ฑด๋ UDP๋ฅผ ์ด์ ํ์ง ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์์ฒ ๊ฐ์ ๊ทธ๋ฌํ ์๋ฒ๋ฅผ ๋ณด์ ํ๊ณ ์์ผ๋ฉฐ ๊ตฌ์ฑ์ ๋์ผํฉ๋๋ค. ์ฆ, ๊ฐ ๋ฌผ๋ฆฌ์ ์๋ฒ์ ์์ง ํฉ์ด ์ค์น๋ฉ๋๋ค. ์ฐจ๋จ ์์ด ์ต๋ํ ๋น ๋ฅด๊ฒ ์คํํ๊ธฐ ์ํด ๋๋ถ๋ถ ๋จ์ผ ์ค๋ ๋๋ก ๊ตฌ์ฑ๋๋ฉฐ ๋จ์ผ ์ค๋ ๋ ์๋ฃจ์ ์ผ๋ก ๋ถํ ๋ฉ๋๋ค. ๋์์ ์ฐ๋ฆฌ๋ ์ด๋ฌํ ์์ง๋ณด๋ค ๋ ์์ ์ ์ธ ๊ฒ์ ์์ผ๋ฉฐ ์ง์์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ์ ๋ง์ ๊ด์ฌ์ ๊ธฐ์ธ์ด๊ณ ์์ต๋๋ค.
์ง์์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ
์์ง์ binlog๋ฅผ ์์ฑํฉ๋๋ค.. binlog๋ ์ํ๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ํ ์ด๋ฒคํธ๊ฐ ์ถ๊ฐ๋๋ ํ์ผ์
๋๋ค. ๋ค๋ฅธ ์๋ฃจ์
์์๋ ๋ค๋ฅด๊ฒ ํธ์ถ๋ฉ๋๋ค. ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ,
์์ง์ด ๋ค์ ์์ํ ๋ ์๋ ๋์ ์ ์ฒด binlog๋ฅผ ๋ค์ ์ฝ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์์ง์ ๋ค์์ ์์ฑํฉ๋๋ค. ์ค๋ ์ท - ํ์ฌ ์ํ. ํ์ํ ๊ฒฝ์ฐ ๋จผ์ binlog์์ ์ฝ์ ๋ค์ binlog์์ ์ฝ๊ธฐ๋ฅผ ๋ง์นฉ๋๋ค. ๋ชจ๋ binlog๋ TL ์ฒด๊ณ์ ๋ฐ๋ผ ๋์ผํ ๋ฐ์ด๋๋ฆฌ ํ์์ผ๋ก ์์ฑ๋๋ฏ๋ก ๊ด๋ฆฌ์๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ค๋ ์ท์ ๊ทธ๋ฐ ํ์๊ฐ ์์ต๋๋ค. ๋๊ตฌ์ ์ค๋ ์ท์ด int์ธ์ง, ์์ง์ ๋ง๋ฒ์ธ์ง, ๋๊ตฌ์๊ฒ๋ ์ค์ํ์ง ์์ ๋ฐ๋์ธ์ง๋ฅผ ๋ํ๋ด๋ ์ผ๋ฐ ํค๋๊ฐ ์์ต๋๋ค. ์ด๋ ์ค๋ ์ท์ ๊ธฐ๋กํ ์์ง์ ๋ฌธ์ ์ ๋๋ค.
์๋ ์๋ฆฌ๋ฅผ ๋น ๋ฅด๊ฒ ์ค๋ช ํ๊ฒ ์ต๋๋ค. ์์ง์ด ์คํ๋๋ ์๋ฒ๊ฐ ์์ต๋๋ค. ๊ทธ๋ ์ฐ๊ธฐ๋ฅผ ์ํด ์๋ก์ด ๋น ๋ก๊ทธ๋ฅผ ์ด๊ณ ์ด๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํ ์ด๋ฒคํธ๋ฅผ ์์ฑํฉ๋๋ค.
์ด๋ ์์ ์์ ๊ทธ๋ ์ค์ค๋ก ์ค๋
์ท์ ์ฐ๊ธฐ๋ก ๊ฒฐ์ ํ๊ฑฐ๋ ์ ํธ๋ฅผ ๋ฐ์ต๋๋ค. ์๋ฒ๋ ์ ํ์ผ์ ์์ฑํ๊ณ ํ์ผ์ ์ ์ฒด ์ํ๋ฅผ ๊ธฐ๋กํ๋ฉฐ ํ์ฌ binlog ํฌ๊ธฐ(์คํ์
)๋ฅผ ํ์ผ ๋์ ์ถ๊ฐํ๊ณ ๊ณ์ํด์ ๊ธฐ๋กํฉ๋๋ค. ์๋ก์ด binlog๊ฐ ์์ฑ๋์ง ์์ต๋๋ค.
์ด๋ ์์ ์์ ์์ง์ด ๋ค์ ์์๋๋ฉด ๋์คํฌ์ binlog์ ์ค๋
์ท์ด ๋ชจ๋ ๋จ๊ฒ ๋ฉ๋๋ค. ์์ง์ ์ ์ฒด ์ค๋
์ท์ ์ฝ๊ณ ํน์ ์ง์ ์์ ์ํ๋ฅผ ๋์
๋๋ค.
์ค๋
์ท์ด ์์ฑ๋ ์์ ์ ์์น์ binlog์ ํฌ๊ธฐ๋ฅผ ์ฝ์ต๋๋ค.
ํ์ฌ ์ํ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด binlog์ ๋์ ์ฝ๊ณ ๊ณ์ํด์ ์ถ๊ฐ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ์ด๊ฒ์ ๊ฐ๋จํ ๊ณํ์ด๋ฉฐ, ์ฐ๋ฆฌ์ ๋ชจ๋ ์์ง์ ์ด์ ๋ฐ๋ผ ์๋ํฉ๋๋ค.
๋ฐ์ดํฐ ๋ณต์
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ์ ๋ฐ์ดํฐ ๋ณต์ ๋ ๋ช ๋ น๋ฌธ ๊ธฐ๋ฐ โ ์ฐ๋ฆฌ๋ ํ์ด์ง ๋ณ๊ฒฝ ์ฌํญ์ binlog์ ๊ธฐ๋กํ์ง ์์ต๋๋ค. ๋ณ๊ฒฝ ์์ฒญ. ๋คํธ์ํฌ๋ฅผ ํตํด ์ ๊ณต๋๋ ๊ฒ๊ณผ ๋งค์ฐ ์ ์ฌํ๋ฉฐ ์ฝ๊ฐ๋ง ์์ ๋์์ต๋๋ค.
๋์ผํ ๋ฐฉ์์ด ๋ณต์ ์๋ง ์ฌ์ฉ๋๋ ๊ฒ์ด ์๋๋ผ ๋ฐฑ์ ์ ์์ฑํ๋ ค๋ฉด. ์ฐ๋ฆฌ๋ binlog์ ์ฐ๋ ์ฐ๊ธฐ ๋ง์คํฐ์ธ ์์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ด๋ฆฌ์๊ฐ ์ค์ ํ ๋ค๋ฅธ ์์น์๋ ์ด binlog๊ฐ ๋ณต์ฌ๋๋ฉฐ ๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค. ๋ฐฑ์ ์ด ์์ต๋๋ค.
ํ์ํ ๊ฒฝ์ฐ ๋ณต์ ๋ณธ ์ฝ๊ธฐCPU ์ฝ๊ธฐ ๋ถํ๋ฅผ ์ค์ด๊ธฐ ์ํด ์ฝ๊ธฐ ์์ง์ด ์์๋์ด binlog์ ๋์ ์ฝ๊ณ ๋ก์ปฌ์์ ์ด๋ฌํ ๋ช
๋ น์ ์คํํฉ๋๋ค.
์ฌ๊ธฐ์์ ์ง์ฐ์ ๋งค์ฐ ์์ผ๋ฉฐ ๋ณต์ ๋ณธ์ด ๋ง์คํฐ๋ณด๋ค ์ผ๋ง๋ ์ง์ฐ๋๋์ง ํ์ธํ ์ ์์ต๋๋ค.
RPC ํ๋ก์์ ๋ฐ์ดํฐ ์ค๋ฉ
์ค๋ฉ์ ์ด๋ป๊ฒ ์๋ํ๋์? ํ๋ก์๋ ์ด๋ค ํด๋ฌ์คํฐ ์ค๋๋ก ๋ณด๋ผ์ง ์ด๋ป๊ฒ ์ดํดํฉ๋๊น? ์ฝ๋์๋ "์ค๋ 15๊ฐ๋ฅผ ๋ณด๋ด์ธ์!"๋ผ๊ณ ๋์ ์์ง ์์ต๋๋ค. - ์๋์, ์ด๋ ํ๋ก์์ ์ํด ์ํ๋ฉ๋๋ค.
๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ์์ firstint์ ๋๋ค. โ ์์ฒญ์ ์ฒซ ๋ฒ์งธ ์ซ์์ ๋๋ค.
get(photo100_500) => 100 % N.
์ด๋ ๊ฐ๋จํ memcached ํ ์คํธ ํ๋กํ ์ฝ์ ์์ด์ง๋ง ์ฟผ๋ฆฌ๋ ๋ณต์กํ๊ณ ๊ตฌ์กฐํ๋ ์ ์์ต๋๋ค. ์ด ์์์๋ ์ฟผ๋ฆฌ์ ์ฒซ ๋ฒ์งธ ์ซ์๋ฅผ ์ฌ์ฉํ๊ณ ํด๋ฌ์คํฐ ํฌ๊ธฐ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด๋ ๋จ์ผ ์ํฐํฐ์ ๋ฐ์ดํฐ ์ง์ญ์ฑ์ ์ํ ๋ ์ ์ฉํฉ๋๋ค. 100์ด ์ฌ์ฉ์ ๋๋ ๊ทธ๋ฃน ID์ด๊ณ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์ํด ํ ์ํฐํฐ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํ๋์ ์ค๋์ ์๊ธฐ๋ฅผ ์ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
์์ฒญ์ด ํด๋ฌ์คํฐ ์ ์ฒด์ ์ด๋ป๊ฒ ๋ถ์ฐ๋๋์ง ์ ๊ฒฝ ์ฐ์ง ์๋๋ค๋ฉด ๋ ๋ค๋ฅธ ์ต์ ์ด ์์ต๋๋ค. ์ ์ฒด ์ค๋๋ฅผ ํด์ฑ.
hash(photo100_500) => 3539886280 % N
์ฐ๋ฆฌ๋ ๋ํ ํด์, ๋ถํ ์ ๋๋จธ์ง ๋ถ๋ถ ๋ฐ ์ค๋ ๋ฒํธ๋ฅผ ์ป์ต๋๋ค.
์ด ๋ ์ต์ ๋ชจ๋ ํด๋ฌ์คํฐ ํฌ๊ธฐ๋ฅผ ๋๋ฆด ๋ ํด๋ฌ์คํฐ๋ฅผ ๋ถํ ํ๊ฑฐ๋ ์ฌ๋ฌ ๋ฐฐ๋ก ๋๋ฆด ๊ฒ์ด๋ผ๋ ์ฌ์ค์ ๋๋นํ ๊ฒฝ์ฐ์๋ง ์๋ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ค๋๊ฐ 16๊ฐ ์๋๋ฐ ์ถฉ๋ถํ์ง ์์ ๋ ๋ง์ ์ค๋๋ฅผ ์ํฉ๋๋ค. ๋ค์ดํ์ ์์ด ์์ ํ๊ฒ 32๊ฐ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๋ฐฐ์๊ฐ ์๋ ์ฆ๊ฐ๋ฅผ ์ํ ๊ฒฝ์ฐ ์์ค ์์ด ๋ชจ๋ ๊ฒ์ ์ ํํ๊ฒ ๋ถํ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ ์ค์ง ์๊ฐ์ด ๋ฐ์ํฉ๋๋ค. ์ด๋ฌํ ์ต์ ์ ์ ์ฉํ์ง๋ง ํญ์ ๊ทธ๋ฐ ๊ฒ์ ์๋๋๋ค.
์์์ ์์ ์๋ฒ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ค์์ ์ฌ์ฉํฉ๋๋ค. Ketama ๋ง์ ๋ํ ์ผ๊ด๋ ํด์ฑ. ๊ทธ๋ฌ๋ ๋์์ ๋ฐ์ดํฐ์ ์ง์ญ์ฑ์ ์์ ํ ์๊ฒ ๋๋ฏ๋ก ๊ฐ ์กฐ๊ฐ์ด ์์ฒด์ ์์ ์๋ต์ ๋ฐํํ๋๋ก ์์ฒญ์ ํด๋ฌ์คํฐ์ ๋ณํฉํ ๋ค์ ์๋ต์ ํ๋ก์์ ๋ณํฉํด์ผ ํฉ๋๋ค.
๋งค์ฐ ๊ตฌ์ฒด์ ์ธ ์์ฒญ์ด ์์ต๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. RPC ํ๋ก์๊ฐ ์์ฒญ์ ์์ ํ๊ณ ์ด๋ ํด๋ฌ์คํฐ๋ก ์ด๋ํ ์ง ๊ฒฐ์ ํ๊ณ ์ค๋๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฐ๊ธฐ ๋ง์คํฐ๊ฐ ์๊ฑฐ๋ ํด๋ฌ์คํฐ์ ๋ณต์ ๋ณธ ์ง์์ด ์๋ ๊ฒฝ์ฐ ์์ฒญ ์ ๋ณต์ ๋ณธ์ผ๋ก ๋ณด๋ ๋๋ค. ํ๋ก์๊ฐ ์ด ๋ชจ๋ ์์ ์ ์ํํฉ๋๋ค.
๋ก๊ทธ
์ฐ๋ฆฌ๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋ก๊ทธ๋ฅผ ์์ฑํฉ๋๋ค. ๊ฐ์ฅ ๋ถ๋ช ํ๊ณ ๊ฐ๋จํ ๊ฒ์ Memcache์ ๋ก๊ทธ ์ฐ๊ธฐ.
ring-buffer: prefix.idx = line
ํค ์ ๋์ด(๋ก๊ทธ ์ด๋ฆ, ์ค)๊ฐ ์๊ณ ์ด ๋ก๊ทธ์ ํฌ๊ธฐ(์ค ์)๊ฐ ์์ต๋๋ค. 0๋ถํฐ ํ ์์์ 1์ ๋บ ๊ฐ๊น์ง ๋์๋ฅผ ์ทจํฉ๋๋ค. Memcache์ ํค๋ ์ด ๋์์ ์ฐ๊ฒฐ๋ ์ ๋์ฌ์ ๋๋ค. ๋ก๊ทธ ๋ผ์ธ๊ณผ ํ์ฌ ์๊ฐ์ ๊ฐ์ ์ ์ฅํฉ๋๋ค.
๋ก๊ทธ๋ฅผ ์ฝ์ด์ผ ํ๋ ๊ฒฝ์ฐ ๋ฉํฐ๊ฒ ๋ชจ๋ ํค๋ฅผ ์๊ฐ๋ณ๋ก ์ ๋ ฌํ์ฌ ์ค์๊ฐ์ผ๋ก ์์ฐ ๋ก๊ทธ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ด ๊ตฌ์ฑํ๋ ํ๋ก๋์ ์์ ์๋ฌด๊ฒ๋ ์ค๋จํ์ง ์๊ณ ๋ค๋ฅธ ์์คํ ์ ๋ํ ํธ๋ํฝ์ ์ค์งํ๊ฑฐ๋ ํ์ฉํ์ง ์๊ณ ์ค์๊ฐ์ผ๋ก ๋๋ฒ๊น ํด์ผ ํ ๋ ์ฌ์ฉ๋์ง๋ง ์ด ๋ก๊ทธ๋ ์ค๋ ๊ฐ์ง ์์ต๋๋ค.
์์ ์ ์ธ ๋ก๊ทธ ์ ์ฅ์ ์ํด ์์ง์ด ์์ต๋๋ค. ๋ก๊ทธ ์์ง. ์ด๊ฒ์ด ๋ฐ๋ก ์ด๊ฒ์ด ์์ฑ๋์ด ์๋ง์ ํด๋ฌ์คํฐ์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ด์ ์ ๋๋ค. ์ ๊ฐ ์๋ ๊ฐ์ฅ ํฐ ํด๋ฌ์คํฐ๋ 600TB์ ์์ถ๋ ๋ก๊ทธ๋ฅผ ์ ์ฅํฉ๋๋ค.
์์ง์ ๋งค์ฐ ์ค๋๋์์ผ๋ฉฐ ์ด๋ฏธ 6~7๋ ์ด ๋ ํด๋ฌ์คํฐ๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ClickHouse๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ์ฌ ๋ก๊ทธ๋ฅผ ์ ์ฅํ๊ธฐ ์์ํ์ต๋๋ค.
ClickHouse์์ ๋ก๊ทธ ์์ง
์ด ๋ค์ด์ด๊ทธ๋จ์ ์ฐ๋ฆฌ๊ฐ ์์ง์ ๋ค์ด๊ฐ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
RPC๋ฅผ ํตํด RPC ํ๋ก์๋ก ๋ก์ปฌ๋ก ์ด๋ํ๋ ์ฝ๋๊ฐ ์์ผ๋ฉฐ ์์ง์ผ๋ก ์ด๋ํ ์์น๋ฅผ ์ดํดํฉ๋๋ค. ClickHouse์ ๋ก๊ทธ๋ฅผ ์์ฑํ๋ ค๋ฉด ์ด ์ฒด๊ณ์์ ๋ ๋ถ๋ถ์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
- ์ผ๋ถ ์์ง์ ClickHouse๋ก ๊ต์ฒดํ์ธ์.
- ClickHouse์ ์ก์ธ์คํ ์ ์๋ RPC ํ๋ก์๋ฅผ RPC๋ฅผ ํตํด ์ก์ธ์คํ ์ ์๋ ์ผ๋ถ ์๋ฃจ์ ์ผ๋ก ๊ต์ฒดํ์ญ์์ค.
์์ง์ ๊ฐ๋จํฉ๋๋ค. ClickHouse๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ ๋๋ ์๋ฒ ํด๋ฌ์คํฐ๋ก ๊ต์ฒดํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ClickHouse์ ๊ฐ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ๊ทธ๋ ๊ฒ ํ์ต๋๋ค. ์๋ผ ๊ณ ์์ด์ง. KittenHouse์์ ClickHouse๋ก ์ง์ ์ด๋ํ๋ฉด ๋์ฒํ ์ ์์ต๋๋ค. ์์ฒญ์ด ์๋๋ผ๋ ์์ฒญ๋ ์์ ์์คํ ์ ๋ํ HTTP ์ฐ๊ฒฐ์ด ์ถ๊ฐ๋ฉ๋๋ค. ๊ณํ์ด ์๋ํ๋ ค๋ฉด ClickHouse๊ฐ ์๋ ์๋ฒ์์ ๋ก์ปฌ ์ญ๋ฐฉํฅ ํ๋ก์๊ฐ ๋ฐ์ํฉ๋๋ค., ์ด๋ ํ์ํ ์ฐ๊ฒฐ๋์ ๊ฒฌ๋ ์ ์๋๋ก ์์ฑ๋์์ต๋๋ค. ๋ํ ๋น๊ต์ ์์ ์ ์ผ๋ก ์์ฒด์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋งํ ์ ์์ต๋๋ค.
๋๋๋ก ์ฐ๋ฆฌ๋ nginx์ ๊ฐ์ ๋นํ์ค ์๋ฃจ์
์์ RPC ์ฒด๊ณ๋ฅผ ๊ตฌํํ๊ณ ์ถ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ KittenHouse๋ UDP๋ฅผ ํตํด ๋ก๊ทธ๋ฅผ ์์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ฐ์ถ๊ณ ์์ต๋๋ค.
๋ก๊ทธ์ ๋ฐ์ ์์ ์์ ์๊ฐ ๋์ผํ ์์คํ
์์ ์์
ํ๋ ๊ฒฝ์ฐ ๋ก์ปฌ ํธ์คํธ ๋ด์์ UDP ํจํท์ด ์์ค๋ ํ๋ฅ ์ ๋งค์ฐ ๋ฎ์ต๋๋ค. ํ์ฌ ์๋ฃจ์
์์ RPC๋ฅผ ๊ตฌํํด์ผ ํ๋ ํ์์ฑ๊ณผ ์์ ์ฑ ์ฌ์ด์ ์ ์ถฉ์์ผ๋ก ์ฐ๋ฆฌ๋ ๊ฐ๋จํ UDP ์ ์ก์ ์ฌ์ฉํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋์ค์ ์ด ๊ณํ์ผ๋ก ๋์์ฌ ๊ฒ์
๋๋ค.
๋ชจ๋ํฐ๋ง
๋ก๊ทธ์๋ ๋ ๊ฐ์ง ์ ํ์ด ์์ต๋๋ค. ๊ด๋ฆฌ์๊ฐ ์๋ฒ์์ ์์งํ ๋ก๊ทธ์ ๊ฐ๋ฐ์๊ฐ ์ฝ๋์์ ์์ฑํ ๋ก๊ทธ์ ๋๋ค. ์ด๋ ๋ ๊ฐ์ง ์ ํ์ ์ธก์ ํญ๋ชฉ์ ํด๋นํฉ๋๋ค. ์์คํ ๊ณผ ์ ํ.
์์คํ ์ธก์ ํญ๋ชฉ
์ฐ๋ฆฌ์ ๋ชจ๋ ์๋ฒ์์ ์๋ํฉ๋๋ค
์ ํ ์งํ
ํธ์์ ๋ง์ ๋ด์ฉ์ ์์ฑํ์ต๋๋ค. ์๋ฅผ ๋ค์ด, Counts, UniqueCounts ๊ฐ์ ํต๊ณ์ ๊ธฐ๋กํ์ฌ ๋ ๋ฉ๋ฆฌ ๋ณด๋ผ ์ ์๋ ์ผ๋ จ์ ์ผ๋ฐ ํจ์๊ฐ ์์ต๋๋ค.
statlogsCountEvent ( โstat_nameโ, $key1, $key2, โฆ)
statlogsUniqueCount ( โstat_nameโ, $uid, $key1, $key2, โฆ)
statlogsValuetEvent ( โstat_nameโ, $value, $key1, $key2, โฆ)
$stats = statlogsStatData($params)
๊ทธ๋ฐ ๋ค์ ์ ๋ ฌ ๋ฐ ๊ทธ๋ฃนํ ํํฐ๋ฅผ ์ฌ์ฉํ๊ณ ๊ทธ๋ํ ์์ฑ, Watchdog ๊ตฌ์ฑ ๋ฑ ํต๊ณ์์ ์ํ๋ ๋ชจ๋ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์์ฃผ ๊ธ์ ์ด๋ค ๋ง์ ์งํ ์ด๋ฒคํธ ์๋ ํ๋ฃจ์ 600์ต์์ 1์กฐ ๊ฑด์ ์ด๋ฆ ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ๋ค์ ์ ์งํ๊ณ ์ถ์ต๋๋ค. ์ ์ด๋ ๋ช ๋ ์ธก์ ํญ๋ชฉ์ ์ถ์ธ๋ฅผ ์ดํดํฉ๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ ํ๋๋ก ๋ฌถ๋ ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์์ง ํด๊ฒฐํ์ง ๋ชปํ ํฐ ๋ฌธ์ ์ ๋๋ค. ์ง๋ ๋ช ๋ ๋์ ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ด๋ฌํ ์ธก์ ํญ๋ชฉ์ ์์ฑํ๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๋ก์ปฌ memcache๋กํญ๋ชฉ ์๋ฅผ ์ค์ด๊ธฐ ์ํด. ๋จ๊ธฐ๊ฐ๋ง์ ๊ตญ๋ด ์ถ์ ํต๊ณ ๋ฐ๋ชฌ ๋ชจ๋ ๊ธฐ๋ก์ ์์งํฉ๋๋ค. ๋ค์์ผ๋ก ์ ๋ง๋ ์ธก์ ํญ๋ชฉ์ ์๋ฒ์ ๋ ๊ณ์ธต์ผ๋ก ๋ณํฉํฉ๋๋ค. ๋ก๊ทธ ์์ง๊ธฐ, ์ด๋ ์ฌ๋ฌ ๋จธ์ ์ ํต๊ณ๋ฅผ ์ง๊ณํ์ฌ ๊ทธ ๋ค์ ์๋ ๋ ์ด์ด๊ฐ ์ฃฝ์ง ์๋๋ก ํฉ๋๋ค.
ํ์ํ ๊ฒฝ์ฐ ๋ก๊ทธ ์์ง๊ธฐ์ ์ง์ ์ธ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ stas-daemom์ ์ฐํํ์ฌ ์ฝ๋์์ ์์ง๊ธฐ๋ก ์ง์ ์์ฑํ๋ ๊ฒ์ ์์ง๊ธฐ์ ๋ํ ๋ก๋๋ฅผ ์ฆ๊ฐ์ํค๋ฏ๋ก ํ์ฅ์ฑ์ด ๋จ์ด์ง๋ ์๋ฃจ์
์
๋๋ค. ์ด ์๋ฃจ์
์ ์ด๋ค ์ด์ ๋ก ์ธํด ๋จธ์ ์์ memcache stats-daemon์ ์คํํ ์ ์๊ฑฐ๋ ๋จธ์ ์ด ์ถฉ๋ํ์ฌ ์ง์ ์งํํ ๊ฒฝ์ฐ์๋ง ์ ํฉํฉ๋๋ค.
๋ค์์ผ๋ก, ๋ก๊ทธ ์์ง๊ธฐ๋ ํต๊ณ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณํฉํฉ๋๋ค. ์ผ์นDB - ์ด๋ ์ธก์ ํญ๋ชฉ์ ์ ์ฅํ ์๋ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ฝ๋์์ ์ด์ง "SQL์ ๊ฐ๊น์ด" ์ ํ์ ์ํํ ์ ์์ต๋๋ค.
์คํ
2018๋ ์ฌ๋ฆ, ๋ด๋ถ ํด์ปคํค์ด ์์๋๋ฐ ๋ค์ด์ด๊ทธ๋จ์ ๋นจ๊ฐ์ ๋ถ๋ถ์ ClickHouse์ ๋ฉํธ๋ฆญ์ ์ ์ฅํ ์ ์๋ ๊ฒ์ผ๋ก ๋์ฒดํ๋ ค๋ ์์ด๋์ด๊ฐ ๋์์ต๋๋ค. ClickHouse์ ๋ํ ๋ก๊ทธ๊ฐ ์์ต๋๋ค. ์๋ํด ๋ณด๋ ๊ฒ์ ์ด๋จ๊น์?
KittenHouse๋ฅผ ํตํด ๋ก๊ทธ๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ด ์์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๊ฒฐ์ ํ๋ค ๋ค์ด์ด๊ทธ๋จ์ ๋ ๋ค๋ฅธ "*House"๋ฅผ ์ถ๊ฐํ์ญ์์ค., ์ด๋ ์ฝ๋๊ฐ UDP๋ฅผ ํตํด ๊ธฐ๋กํ๋ ํ์์ผ๋ก ์ ํํ๊ฒ ์ธก์ ํญ๋ชฉ์ ์์ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด *House๋ ์ด๋ฅผ KittenHouse๊ฐ ์ดํดํ๋ ํต๋๋ฌด์ ๊ฐ์ ์ฝ์
๋ฌผ๋ก ๋ณํํฉ๋๋ค. ๊ทธ๋ ์ด๋ฌํ ๋ก๊ทธ๋ฅผ ์ฝ์ ์ ์๋ ClickHouse์ ์๋ฒฝํ๊ฒ ์ ๋ฌํ ์ ์์ต๋๋ค.
Memcache, stats-daemon ๋ฐ ๋ก๊ทธ ์์ง๊ธฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ฑํ๊ฐ ์ด ๊ตฌ์ฑํ๋ก ๋์ฒด๋์์ต๋๋ค.
Memcache, stats-daemon ๋ฐ ๋ก๊ทธ ์์ง๊ธฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ฑํ๊ฐ ์ด ๊ตฌ์ฑํ๋ก ๋์ฒด๋์์ต๋๋ค.
- ์ฌ๊ธฐ์๋ StatsHouse์ ๋ก์ปฌ๋ก ์์ฑ๋ ์ฝ๋์ ๋์คํจ์น๊ฐ ์์ต๋๋ค.
- StatsHouse๋ ์ด๋ฏธ SQL ์ฝ์ ์ผ๋ก ๋ณํ๋ UDP ์ธก์ ํญ๋ชฉ์ KittenHouse์ ์ผ๊ด์ ์ผ๋ก ๊ธฐ๋กํฉ๋๋ค.
- KittenHouse๋ ์ด๋ฅผ ClickHouse๋ก ๋ณด๋ ๋๋ค.
- ์ฝ๊ณ ์ถ๋ค๋ฉด StatsHouse๋ฅผ ์ฐํํ๊ณ ์ผ๋ฐ SQL์ ์ฌ์ฉํ์ฌ ClickHouse์์ ์ง์ ์ฝ์ต๋๋ค.
์์ง์ธ๊ฐ ์คํ, ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๋ง์์ ๋ญ๋๋ค. ๊ณํ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉด ์๋ง๋ ์์ ํ ์ ํํ๊ฒ ๋ ๊ฒ์ ๋๋ค. ๊ฐ์ธ์ ์ผ๋ก๋ ๊ทธ๋ฌ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ณํ ์ฒ ๋ถ์ ์๋ผ์ง ์๋๋ค. ๋ ์ ์ ์์ ์๋ฒ๊ฐ ํ์ํ๊ณ ๋ก์ปฌ ํต๊ณ ๋ฐ๋ชฌ ๋ฐ ๋ก๊ทธ ์์ง๊ธฐ๊ฐ ํ์ํ์ง ์์ง๋ง ClickHouse์๋ ํ์ฌ ๊ตฌ์ฑํ๋ณด๋ค ๋ ํฐ ์๋ฒ๊ฐ ํ์ํฉ๋๋ค. ๋ ์ ์ ์์ ์๋ฒ๊ฐ ํ์ํ์ง๋ง ๋ ๋น์ธ๊ณ ๋ ๊ฐ๋ ฅํด์ผ ํฉ๋๋ค..
๋ฐฐํฌ
๋จผ์ PHP ๋ฐฐํฌ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ฐ๋ฐ ์ค์ ๋๋ค ์์: ์ฌ์ฉ GitLab ะธ TeamCity ๋ฐฐํฌ์ฉ. ๊ฐ๋ฐ ๋ธ๋์น๋ ๋ง์คํฐ ๋ธ๋์น๋ก ๋ณํฉ๋๊ณ , ํ ์คํธ์ฉ ๋ง์คํฐ ๋ธ๋์น๋ ์คํ ์ด์ง์ผ๋ก ๋ณํฉ๋๊ณ , ์คํ ์ด์ง์์ ํ๋ก๋์ ์ผ๋ก ๋ณํฉ๋ฉ๋๋ค.
๋ฐฐํฌํ๊ธฐ ์ ์ ํ์ฌ ํ๋ก๋์ ๋ธ๋์น์ ์ด์ ๋ธ๋์น๋ฅผ ๊ฐ์ ธ์ diff ํ์ผ์ ๊ณ ๋ คํฉ๋๋ค. ๋ณ๊ฒฝ ์ฌํญ: ์์ฑ, ์ญ์ , ๋ณ๊ฒฝ. ์ด ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฒด ์๋ฒ ์ ํ๊ตฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ํ๊ฒ ๋ณต์ ํ ์ ์๋ ํน์ Copyfast ์์ง์ binlog์ ๊ธฐ๋ก๋ฉ๋๋ค. ์ฌ๊ธฐ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ง์ ๋ณต์ฌํ๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ์ญ ๋ณต์ , ํ ์๋ฒ๊ฐ ๊ฐ์ฅ ๊ฐ๊น์ด ์ด์, ์ด์ ๋ฑ์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๋ณด๋ผ ๋. ์ด๋ฅผ ํตํด ์ ์ฒด ์ฐจ๋์์ ์์ญ ๋ฐ ์ด ๋จ์๋ก ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ด ๋ก์ปฌ ๋ณต์ ๋ณธ์ ๋๋ฌํ๋ฉด ์ด๋ฌํ ํจ์น๋ฅผ ํด๋น ๋ณต์ ๋ณธ์ ์ ์ฉํฉ๋๋ค. ๋ก์ปฌ ํ์ผ ์์คํ . ๋กค๋ฐฑ๋ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ํ๋ฉ๋๋ค.
์ฐ๋ฆฌ๋ ๋ํ kPHP๋ฅผ ๋ง์ด ๋ฐฐํฌํ๊ณ ์์ผ๋ฉฐ ์์ฒด ๊ฐ๋ฐ๋ ์งํํ๊ณ ์์ต๋๋ค. ์์ ์์ ๋ค์ด์ด๊ทธ๋จ์ ๋ฐ๋ฅด๋ฉด. ์ด ์ดํ๋ก HTTP ์๋ฒ ๋ฐ์ด๋๋ฆฌ, ๊ทธ๋ฌ๋ฉด diff๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋ฆด๋ฆฌ์ค ๋ฐ์ด๋๋ฆฌ์ ๋ฌด๊ฒ๋ ์๋ฐฑ MB์ ๋๋ค. ๋ฐ๋ผ์ ์ฌ๊ธฐ์๋ ๋ ๋ค๋ฅธ ์ต์ ์ด ์์ต๋๋ค. ๋ฒ์ ์ ๋ค์์ ๊ธฐ๋ก๋ฉ๋๋ค. binlog ์นดํผํจ์คํธ. ๋น๋ํ ๋๋ง๋ค ์ฆ๊ฐํ๊ณ ๋กค๋ฐฑ ์ค์๋ ์ฆ๊ฐํฉ๋๋ค. ๋ฒ์ ์๋ฒ์ ๋ณต์ ๋จ. ๋ก์ปฌ copyfast๋ ์ ๋ฒ์ ์ด binlog์ ์ ๋ ฅ๋์์์ ํ์ธํ๊ณ ๋์ผํ ๊ฐ์ญ ๋ณต์ ๋ฅผ ํตํด ๋ง์คํฐ ์๋ฒ๋ฅผ ์ง์น์ง ์๊ณ ์กฐ์ฌ์ค๋ฝ๊ฒ ๋คํธ์ํฌ ์ ์ฒด์ ๋ก๋๋ฅผ ๋ถ์ฐ์ํค๋ฉด์ ์ต์ ๋ฒ์ ์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ๋ค์ ๋ด์ฉ ์ฐ์ํ ์ฌ๊ฐ ์ ๋ฒ์ ์ ๊ฒฝ์ฐ.
๋ณธ์ง์ ์ผ๋ก ๋ฐ์ด๋๋ฆฌ์ธ ์ฐ๋ฆฌ ์์ง์ ๊ฒฝ์ฐ ๊ตฌ์ฑํ๋ ๋งค์ฐ ์ ์ฌํฉ๋๋ค.
- git ๋ง์คํฐ ๋ธ๋์น;
- ๋ฐ์ด๋๋ฆฌ ์ ๋ ฅ ๋;
- ๋ฒ์ ์ binlog copyfast์ ๊ธฐ๋ก๋ฉ๋๋ค.
- ์๋ฒ์ ๋ณต์ ๋ฉ๋๋ค.
- ์๋ฒ๋ ์๋ก์ด .dep์ ๊ฐ์ ธ์ต๋๋ค.
- dpkg -i;
- ์ ๋ฒ์ ์ผ๋ก ์ ์์ ์ผ๋ก ๋ค์ ์์๋ฉ๋๋ค.
์ฐจ์ด์ ์ ๋ฐ์ด๋๋ฆฌ๊ฐ ์์นด์ด๋ธ์ ํจํค์ง๋์ด ์๋ค๋ ๊ฒ์ ๋๋ค. ๋, ๊ทธ๋ฆฌ๊ณ ํํํ ๋ ๊ทธ๋ค์ dpkg -i ์์คํ ์ ๋ฐฐ์น๋ฉ๋๋ค. kPHP๋ ๋ฐ์ด๋๋ฆฌ๋ก ๋ฐฐํฌ๋๊ณ ์์ง์ dpkg๋ก ๋ฐฐํฌ๋๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๊ทธ๋ฐ ์ผ์ด ์ผ์ด๋ฌ์ต๋๋ค. ์๋ํฉ๋๋ค. ๋ง์ง์ง ๋ง์ธ์.
์ ์ฉํ ๋งํฌ :
- Anton Kiryushkin์ ๋ณด๊ณ ์
โVkontakte ์์คํ ๊ด๋ฆฌ์. ์ด๋ป๊ฒ?" copyfast ๋ฐ gossip์ ๋ํ ์ธ๋ถ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. - Yuri Nasretdinov์ ๋ณด๊ณ ์
โVK๊ฐ ์๋ง ๋์ ์๋ฒ์์ ClickHouse์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ ๋ฐฉ๋ฒโ . - ๋ด ๋ณด๊ณ ์
"VKontakte์ ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ์ฅํ๋ ํ๋ก์ ํธ์ ์ํคํ ์ฒ" , ํ์ง๋ง ๊ฐ๋ฐ ๊ด์ ์์๋ ํ๋์จ์ด๊ฐ ์๋๋๋ค.
Alexey Akulovich๋ ํ๋ก๊ทธ๋จ ์์ํ์ ์ผ์์ผ๋ก์ ๋ค์์ ๋๋ ์ฌ๋๋ค ์ค ํ ๋ช ์ ๋๋ค.
PHP ๋ฌ์์ 17์ XNUMX์ผ์ ์ต๊ทผ PHP ๊ฐ๋ฐ์๋ค์๊ฒ ๊ฐ์ฅ ํฐ ํ์ฌ๊ฐ ๋ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง ๋ฉ์ง PC๋ฅผ ๋ณด์ธ์.์คํผ์ปค (๊ทธ ์ค XNUMX๋ช ์ PHP ์ฝ์ด๋ฅผ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค!) - PHP๋ฅผ ์์ฑํ๋ค๋ฉด ๋นผ๋์ ์ ์๋ ๋ถ๋ถ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ถ์ฒ : habr.com