๋ฐํ
๋๋ฃ ์ฌ๋ฌ๋ถ, ์ ๋ ํ์ฌ๋ฆ์ ๋๊ธฐ์ด ์์คํ
์ค๊ณ์ ๊ดํ ๋ ๋ค๋ฅธ ๊ธฐ์ฌ ์๋ฆฌ์ฆ์ธ "VTrade ์คํ"์ ๋ฐํํ ๊ณํ์
๋๋ค. ์ด๋ ๊ฑฐ๋ ์์คํ
์ ์ํ ํ๋ ์์ํฌ๋ฅผ ์์ฑํ๋ ค๋ ์๋์
๋๋ค. ์ด ์๋ฆฌ์ฆ์์๋ ๊ฑฐ๋์, ๊ฒฝ๋งค ๋ฐ ์์ ๊ตฌ์ถ์ ๋ํ ์ด๋ก ๊ณผ ์ค์ ๋ฅผ ๊ฒํ ํฉ๋๋ค. ๊ธฐ์ฌ ๋๋ถ๋ถ์์ ๊ฐ์ฅ ๊ด์ฌ ์๋ ์ฃผ์ ์ ํฌํํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
์ด๊ฒ์ Erlang/Elixir์ ๋ถ์ฐ ๋ฐ์ํ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ดํ ์๋ฆฌ์ฆ์ ๋ง์ง๋ง ๊ธฐ์ฌ์
๋๋ค. ์์
์ค๋ ์ฐ๋ฆฌ๋ ์ฝ๋ ๋ฒ ์ด์ค์ ํ๋ก์ ํธ ์ ๋ฐ์ ๊ฐ๋ฐ ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ ๊ฒ์ ๋๋ค.
์๋น์ค ์กฐ์ง
์ค์ ์ํ์์ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ ๋ ํ๋์ ์ปจํธ๋กค๋ฌ์ ์ฌ๋ฌ ์ํธ ์์ฉ ํจํด์ ๊ฒฐํฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ๋ก์ ํธ ์ฌ์ฉ์ ํ๋กํ ๊ด๋ฆฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ฌ์ฉ์ ์๋น์ค๋ req-resp ์์ฒญ์ ์๋ตํ๊ณ pub-sub๋ฅผ ํตํด ํ๋กํ ์ ๋ฐ์ดํธ๋ฅผ ๋ณด๊ณ ํด์ผ ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ๋ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ๋ฉ์์ง ๋ค์๋ ์๋น์ค ๋ ผ๋ฆฌ๋ฅผ ๊ตฌํํ๊ณ ์ ๋ฐ์ดํธ๋ฅผ ๊ฒ์ํ๋ ํ๋์ ์ปจํธ๋กค๋ฌ๊ฐ ์์ต๋๋ค.
๋ด๊ฒฐํจ์ฑ ๋ถ์ฐ ์๋น์ค๋ฅผ ๊ตฌํํด์ผ ํ ๋ ์ํฉ์ ๋์ฑ ๋ณต์กํด์ง๋๋ค. ์ฌ์ฉ์ ์๊ตฌ ์ฌํญ์ด ๋ณ๊ฒฝ๋์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
- ์ด์ ์๋น์ค๋ 5๊ฐ์ ํด๋ฌ์คํฐ ๋ ธ๋์์ ์์ฒญ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
- ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฒ๋ฆฌ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
- ๋ํ ํ๋กํ ์ ๋ฐ์ดํธ์ ๋ํ ๊ตฌ๋ ๋ชฉ๋ก์ ๋์ ์ผ๋ก ๊ด๋ฆฌํ ์๋ ์์ต๋๋ค.
์ฐธ๊ณ : ์ฐ๋ฆฌ๋ ์ผ๊ด๋ ์ ์ฅ ๋ฐ ๋ฐ์ดํฐ ๋ณต์ ๋ฌธ์ ๋ฅผ ๊ณ ๋ คํ์ง ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๊ฐ ์ด์ ์ ํด๊ฒฐ๋์๊ณ ์์คํ ์ ์ด๋ฏธ ์์ ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์คํ ๋ฆฌ์ง ๊ณ์ธต์ด ์๊ณ ํธ๋ค๋ฌ์ ์ด์ ์ํธ ์์ฉํ๋ ๋ฉ์ปค๋์ฆ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
์ฌ์ฉ์ ์๋น์ค์ ๋ํ ๊ณต์์ ์ธ ์ค๋ช ์ด ๋์ฑ ๋ณต์กํด์ก์ต๋๋ค. ํ๋ก๊ทธ๋๋จธ์ ๊ด์ ์์ ๋ณด๋ฉด ๋ฉ์์ง ์ฌ์ฉ์ผ๋ก ์ธํด ๋ณ๊ฒฝ ์ฌํญ์ด ์ต์ํ๋ฉ๋๋ค. ์ฒซ ๋ฒ์งธ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ ค๋ฉด req-resp ๊ตํ ์ง์ ์์ ๊ท ํ ์กฐ์ ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ์ฒ๋ฆฌํด์ผ ํ๋ ์๊ตฌ ์ฌํญ์ด ์์ฃผ ๋ฐ์ํฉ๋๋ค. ์ฌ์ฉ์์ ๊ฒฝ์ฐ ์ด๋ ์ฌ์ฉ์ ๋ฌธ์ ํ์ธ, ๋ค์ด๋ก๋ํ ๋ฉํฐ๋ฏธ๋์ด ์ฒ๋ฆฌ, ์์ ๋ฏธ๋์ด์ ๋ฐ์ดํฐ ๋๊ธฐํ ๋ฑ์ด ๋ ์ ์์ต๋๋ค. ๋คํธ์ํฌ. ์ด๋ฌํ ์์ ์ ํด๋ฌ์คํฐ ๋ด์์ ์ด๋ป๊ฒ๋ ๋ถ์ฐ๋์ด์ผ ํ๋ฉฐ ์คํ ์งํ ์ํฉ์ ๋ชจ๋ํฐ๋งํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ ๊ฐ์ง ์๋ฃจ์ ์ต์ ์ด ์์ต๋๋ค. ์ด์ ๊ธฐ์ฌ์ ์์ ๋ถ๋ฐฐ ํ ํ๋ฆฟ์ ์ฌ์ฉํ๊ฑฐ๋, ์ ํฉํ์ง ์์ ๊ฒฝ์ฐ ํ์ํ ๋ฐฉ์์ผ๋ก ํ๋ก์ธ์ ํ์ ๊ด๋ฆฌํ ์ฌ์ฉ์ ์ ์ ์์ ์ค์ผ์ค๋ฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋๋ค.
ํฌ์ธํธ 3์๋ pub-sub ํ ํ๋ฆฟ ํ์ฅ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ตฌํ์ ์ํด์๋ pub-sub ๊ตํ ํฌ์ธํธ๋ฅผ ์์ฑํ ํ ์๋น์ค ๋ด์์ ์ด ํฌ์ธํธ์ ์ปจํธ๋กค๋ฌ๋ฅผ ์ถ๊ฐ๋ก ์คํํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋ ๊ตฌ๋ ๋ฐ ๊ตฌ๋ ์ทจ์ ์ฒ๋ฆฌ ๋ ผ๋ฆฌ๋ฅผ ๋ฉ์์ง ๊ณ์ธต์์ ์ฌ์ฉ์ ๊ตฌํ์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ๋ถํดํ ๊ฒฐ๊ณผ, ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ ค๋ฉด ์๋ก ๋ค๋ฅธ ๋
ธ๋์์ 5๊ฐ์ ์๋น์ค ์ธ์คํด์ค๋ฅผ ์์ํ๊ณ ๊ตฌ๋
์ ๋ด๋นํ๋ ๊ฒ์-๊ตฌ๋
์ปจํธ๋กค๋ฌ๋ผ๋ ์ถ๊ฐ ์ํฐํฐ๋ฅผ ์์ฑํด์ผ ํ๋ค๋ ์ฌ์ค์ด ๋ํ๋ฌ์ต๋๋ค.
5๊ฐ์ ํธ๋ค๋ฌ๋ฅผ ์คํํ๊ธฐ ์ํด ์๋น์ค ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ํ์๋ ์์ต๋๋ค. ์ ์ผํ ์ถ๊ฐ ์์
์ ๊ตํ ์ง์ ์์ ๊ท ํ ์กฐ์ ๊ท์น์ ์ค์ ํ๋ ๊ฒ์ธ๋ฐ, ์ด์ ๋ํด์๋ ์ ์ ํ์ ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
๋ํ ์ถ๊ฐ์ ์ธ ๋ณต์ก์ฑ๋ ์์ต๋๋ค. pub-sub ์ปจํธ๋กค๋ฌ์ ์ฌ์ฉ์ ์ง์ ์์
์ค์ผ์ค๋ฌ๋ ๋จ์ผ ๋ณต์ฌ๋ณธ์์ ์๋ํด์ผ ํฉ๋๋ค. ๋ค์ ๋งํ์ง๋ง, ๋ฉ์์ง ์๋น์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฆฌ๋๋ฅผ ์ ํํ๊ธฐ ์ํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
๋ฆฌ๋ ์ ์
๋ถ์ฐ ์์คํ ์์ ๋ฆฌ๋ ์ ํ์ ์ผ๋ถ ๋ก๋์ ๋ถ์ฐ ์ฒ๋ฆฌ ์ผ์ ์ ๋ด๋นํ๋ ๋จ์ผ ํ๋ก์ธ์ค๋ฅผ ์ง์ ํ๋ ์ ์ฐจ์ ๋๋ค.
์ค์ ์ง์คํ ๊ฒฝํฅ์ด ์๋ ์์คํ
์์๋ paxos ๋๋ raft์ ๊ฐ์ ๋ณดํธ์ ์ด๊ณ ํฉ์ ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋ฉ๋๋ค.
๋ฉ์์ง์ ๋ธ๋ก์ปค์ด์ ํต์ฌ ์์์ด๋ฏ๋ก ๋ชจ๋ ์๋น์ค ์ปจํธ๋กค๋ฌ, ์ฆ ํ๋ณด ๋ฆฌ๋์ ๋ํด ์๊ณ ์์ต๋๋ค. ๋ฉ์์ง์ ์ฌ์ฉํ๋ฉด ํฌํ ์์ด ๋ฆฌ๋๋ฅผ ์๋ช
ํ ์ ์์ต๋๋ค.
๊ตํ ์ง์ ์ ์์ํ๊ณ ์ฐ๊ฒฐํ ํ ๋ชจ๋ ์๋น์ค๋ ์์คํ
๋ฉ์์ง๋ฅผ ๋ฐ์ต๋๋ค. #'$leader'{exchange = ?EXCHANGE, pid = LeaderPid, servers = Servers}
. ๋ง์ฝ์ LeaderPid
์ผ์นํ๋ค pid
ํ์ฌ ํ๋ก์ธ์ค์์๋ ๋ฆฌ๋๋ก ์ง์ ๋๋ฉฐ ๋ชฉ๋ก์ Servers
๋ชจ๋ ๋
ธ๋์ ํด๋น ๋งค๊ฐ๋ณ์๋ฅผ ํฌํจํฉ๋๋ค.
์๋ก์ด ํด๋ฌ์คํฐ ๋
ธ๋๊ฐ ๋ํ๋๊ณ ์๋ ์ค์ธ ํด๋ฌ์คํฐ ๋
ธ๋์ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ ์๊ฐ ๋ชจ๋ ์๋น์ค ์ปจํธ๋กค๋ฌ๋ #'$slave_up'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts}
ะธ #'$slave_down'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts}
๊ฐ๊ฐ.
์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋ ๊ตฌ์ฑ ์์๊ฐ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ธ์ํ๊ณ ํด๋ฌ์คํฐ๋ ์ธ์ ๋ ์ง ํ๋์ ๋ฆฌ๋๋ฅผ ๊ฐ๊ฒ ๋ฉ๋๋ค.
์ค์ฌ์
๋ณต์กํ ๋ถ์ฐ ์ฒ๋ฆฌ ํ๋ก์ธ์ค๋ฅผ ๊ตฌํํ๊ณ ๊ธฐ์กด ์ํคํ
์ฒ๋ฅผ ์ต์ ํํ๋ ๋ฌธ์ ์์๋ ์ค๊ฐ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค.
์๋น์ค ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์ถ๊ฐ ์ฒ๋ฆฌ, ๋ฉ์์ง ๋ผ์ฐํ
๋๋ ๋ก๊น
๋ฌธ์ ๋ฑ์ ํด๊ฒฐํ๋ ค๋ฉด ์๋น์ค ์ ์ ํ๋ก์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ํ์ฑํํ์ฌ ๋ชจ๋ ์ถ๊ฐ ์์
์ ์ํํ ์ ์์ต๋๋ค.
๊ฒ์-๊ตฌ๋
์ต์ ํ์ ์ ํ์ ์ธ ์๋ ์์ฅ์ ๊ฐ๊ฒฉ ๋ณ๋๊ณผ ๊ฐ์ ์
๋ฐ์ดํธ ์ด๋ฒคํธ๋ฅผ ์์ฑํ๋ ๋น์ฆ๋์ค ์ฝ์ด์ ์ก์ธ์ค ๊ณ์ธต(์น ํด๋ผ์ด์ธํธ์ ์น์์ผ API๋ฅผ ์ ๊ณตํ๋ N ์๋ฒ)์ ๊ฐ์ถ ๋ถ์ฐ ์ ํ๋ฆฌ์ผ์ด์
์
๋๋ค.
์ ๋ฉด์ผ๋ก ๊ฒฐ์ ํ๋ฉด ๊ณ ๊ฐ ์๋น์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ํ๋ซํผ๊ณผ์ ์ฐ๊ฒฐ์ ์ค์ ํฉ๋๋ค. ํธ๋ํฝ์ ์ข ๋ฃํ๋ ์๋ฒ ์ธก์์๋ ์ด ์ฐ๊ฒฐ์ ์๋น์คํ๊ธฐ ์ํ ํ๋ก์ธ์ค๊ฐ ์์๋ฉ๋๋ค.
- ์๋น์ค ํ๋ก์ธ์ค์ ๋งฅ๋ฝ์์ ์ ๋ฐ์ดํธ ์น์ธ ๋ฐ ๊ตฌ๋ ์ด ๋ฐ์ํฉ๋๋ค. ํ๋ก์ธ์ค๋ ์ฃผ์ ์ ๋ํ ๊ตฌ๋ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
- ์ปค๋์์ ์ด๋ฒคํธ๊ฐ ์์ฑ๋๋ฉด ์ฐ๊ฒฐ์ ์๋น์คํ๋ ํ๋ก์ธ์ค๋ก ์ ๋ฌ๋ฉ๋๋ค.
"๋ด์ค" ์ฃผ์ ์ ๋ํ ๊ตฌ๋
์๊ฐ 50000๋ช
์ด๋ผ๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ตฌ๋
์๋ 5๊ฐ์ ์๋ฒ์ ๊ท ๋ฑํ๊ฒ ๋ถ์ฐ๋ฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ตํ ์ง์ ์ ๋๋ฌํ๋ ๊ฐ ์
๋ฐ์ดํธ๋ ๊ตฌ๋
์ ์์ ๋ฐ๋ผ ๊ฐ ์๋ฒ์์ 50000๋ฒ, ์ฆ 10000๋ฒ ๋ณต์ ๋ฉ๋๋ค. ๊ทธ๋ค์ง ํจ๊ณผ์ ์ธ ๊ณํ์ ์๋์ฃ ?
์ํฉ์ ๊ฐ์ ํ๊ธฐ ์ํด ๊ตํ ์ง์ ๊ณผ ์ด๋ฆ์ด ๊ฐ์ ํ๋ก์๋ฅผ ๋์
ํด ๋ณด๊ฒ ์ต๋๋ค. ์ ์ญ ์ด๋ฆ ๋ฑ๋ก์๋ ๊ฐ์ฅ ๊ฐ๊น์ด ํ๋ก์ธ์ค๋ฅผ ์ด๋ฆ์ผ๋ก ๋ฐํํ ์ ์์ด์ผ ํ๋ฉฐ ์ด๊ฒ์ด ์ค์ํฉ๋๋ค.
์ก์ธ์ค ๊ณ์ธต ์๋ฒ์์ ์ด ํ๋ก์๋ฅผ ์์ํ๋ฉด websocket API๋ฅผ ์ ๊ณตํ๋ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์ปค๋์ ์๋ ๊ฒ์-๊ตฌ๋
๊ตํ ์ง์ ์ด ์๋ ์ด๋ฅผ ๊ตฌ๋
ํ๊ฒ ๋ฉ๋๋ค. ํ๋ก์๋ ๊ณ ์ ํ ๊ตฌ๋
์ ๊ฒฝ์ฐ์๋ง ์ฝ์ด๋ฅผ ๊ตฌ๋
ํ๊ณ ๋ค์ด์ค๋ ๋ฉ์์ง๋ฅผ ๋ชจ๋ ๊ตฌ๋
์์๊ฒ ๋ณต์ ํฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ปค๋๊ณผ ์ก์ธ์ค ์๋ฒ ๊ฐ์ 5๊ฐ๊ฐ ์๋ 50000๊ฐ์ ๋ฉ์์ง๊ฐ ์ ์ก๋ฉ๋๋ค.
๋ผ์ฐํ ๋ฐ ๋ฐธ๋ฐ์ฑ
์์ฒญ-์๋ต
ํ์ฌ ๋ฉ์์ง ๊ตฌํ์๋ 7๊ฐ์ง ์์ฒญ ๋ฐฐํฌ ์ ๋ต์ด ์์ต๋๋ค.
default
. ์์ฒญ์ ๋ชจ๋ ์ปจํธ๋กค๋ฌ๋ก ์ ์ก๋ฉ๋๋ค.round-robin
. ์์ฒญ์ ์ด๊ฑฐ๋๊ณ ์ปจํธ๋กค๋ฌ ๊ฐ์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐฐํฌ๋ฉ๋๋ค.consensus
. ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ปจํธ๋กค๋ฌ๋ ๋ฆฌ๋์ ์ฌ๋ ์ด๋ธ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค. ์์ฒญ์ ๋ฆฌ๋์๊ฒ๋ง ์ ์ก๋ฉ๋๋ค.consensus & round-robin
. ๊ทธ๋ฃน์๋ ๋ฆฌ๋๊ฐ ์์ง๋ง ์์ฒญ์ ๋ชจ๋ ๊ตฌ์ฑ์์๊ฒ ๋ถ์ฐ๋ฉ๋๋ค.sticky
. ํด์ ํจ์๊ฐ ๊ณ์ฐ๋์ด ํน์ ํธ๋ค๋ฌ์ ํ ๋น๋ฉ๋๋ค. ์ด ์๋ช ์ด ์๋ ํ์ ์์ฒญ์ ๋์ผํ ์ฒ๋ฆฌ๊ธฐ๋ก ์ด๋๋ฉ๋๋ค.sticky-fun
. ๊ตํํฌ์ธํธ ์ด๊ธฐํ ์์ ๋ํ ํด์ ๊ณ์ฐ ๊ธฐ๋ฅsticky
๊ท ํ์ ์ก๋ ๊ฒ.fun
. Sticky-Fun๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ์ฉ์๋ง์ด ์ถ๊ฐ๋ก ๋ฆฌ๋๋ ์ , ๊ฑฐ๋ถ ๋๋ ์ฌ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๋ถ๋ฐฐ ์ ๋ต์ ๊ตํ ์ง์ ์ด ์ด๊ธฐํ๋ ๋ ์ค์ ๋ฉ๋๋ค.
๋ฐธ๋ฐ์ฑ ์ธ์๋ ๋ฉ์์ง์ ์ฌ์ฉํ๋ฉด ์ํฐํฐ์ ํ๊ทธ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์์คํ ์ ํ๊ทธ ์ ํ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- ์ฐ๊ฒฐ ํ๊ทธ. ์ด๋ฒคํธ๊ฐ ์ด๋ค ์ฐ๊ฒฐ์ ํตํด ๋ฐ์ํ๋์ง ์ดํดํ ์ ์์ต๋๋ค. ์ปจํธ๋กค๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์ผํ ๊ตํ ์ง์ ์ ์ฐ๊ฒฐ๋์ง๋ง ๋ผ์ฐํ ํค๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค.
- ์๋น์ค ํ๊ทธ. ํธ๋ค๋ฌ๋ฅผ ํ๋์ ์๋น์ค ๊ทธ๋ฃน์ผ๋ก ๊ฒฐํฉํ๊ณ ๋ผ์ฐํ ๋ฐ ๋ฐธ๋ฐ์ฑ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์์ต๋๋ค. req-resp ํจํด์ ๊ฒฝ์ฐ ๋ผ์ฐํ ์ ์ ํ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๊ตํ ์ง์ ์ ์์ฒญ์ ๋ณด๋ธ ๋ค์ ์ด๋ฅผ ์๋น์ค์ ์ ๋ฌํฉ๋๋ค. ๊ทธ๋ฌ๋ ํธ๋ค๋ฌ๋ฅผ ๋ ผ๋ฆฌ์ ๊ทธ๋ฃน์ผ๋ก ๋ถํ ํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ถํ ์ ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค. ํ๊ทธ๋ฅผ ์ง์ ํ๋ฉด ์์ฒญ์ด ํน์ ์ปจํธ๋กค๋ฌ ๊ทธ๋ฃน์ผ๋ก ์ ์ก๋ฉ๋๋ค.
- ํ๊ทธ๋ฅผ ์์ฒญํฉ๋๋ค. ๋ต๋ณ์ ๊ตฌ๋ณํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ ์์คํ ์ ๋น๋๊ธฐ์์ด๋ฏ๋ก ์๋น์ค ์๋ต์ ์ฒ๋ฆฌํ๋ ค๋ฉด ์์ฒญ์ ๋ณด๋ผ ๋ RequestTag๋ฅผ ์ง์ ํ ์ ์์ด์ผ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฐ๋ฆฌ๋ ์ด๋ค ์์ฒญ์ ๋ํ ๋ต๋ณ์ ์ดํดํ ์ ์์ ๊ฒ์ ๋๋ค.
๊ฒ์-๊ตฌ๋
pub-sub์ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฒ์ด ์กฐ๊ธ ๋ ๊ฐ๋จํฉ๋๋ค. ๋ฉ์์ง๊ฐ ๊ฒ์๋๋ ๊ตํ ์ง์ ์ด ์์ต๋๋ค. ๊ตํ ์ง์ ์ ํ์ํ ๋ผ์ฐํ ํค๋ฅผ ๊ตฌ๋ ํ ๊ตฌ๋ ์์๊ฒ ๋ฉ์์ง๋ฅผ ๋ฐฐํฌํฉ๋๋ค(์ด๊ฒ์ ์ฃผ์ ์ ์ ์ฌํ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค).
ํ์ฅ์ฑ ๋ฐ ๋ด๊ฒฐํจ์ฑ
์์คํ ์ ์ฒด์ ํ์ฅ์ฑ์ ์์คํ ์ ๋ ์ด์ด์ ๊ตฌ์ฑ ์์์ ํ์ฅ์ฑ ์ ๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
- ์๋น์ค๋ ์ด ์๋น์ค์ ๋ํ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ์ ์ถ๊ฐ ๋ ธ๋๋ฅผ ์ถ๊ฐํ์ฌ ํ์ฅ๋ฉ๋๋ค. ์์ด์ ์ ์ต์ ์ ๋ฐธ๋ฐ์ฑ ์ ์ฑ ์ ์ ํํ ์ ์์ต๋๋ค.
- ๋ณ๋์ ํด๋ฌ์คํฐ ๋ด์ ๋ฉ์์ง ์๋น์ค ์์ฒด๋ ์ผ๋ฐ์ ์ผ๋ก ํน๋ณํ ๋ก๋๋ ๊ตํ ์ง์ ์ ๋ณ๋์ ํด๋ฌ์คํฐ ๋ ธ๋๋ก ์ด๋ํ๊ฑฐ๋ ํด๋ฌ์คํฐ์ ํน๋ณํ ๋ก๋๋ ์์ญ์ ํ๋ก์ ํ๋ก์ธ์ค๋ฅผ ์ถ๊ฐํ์ฌ ํ์ฅ๋ฉ๋๋ค.
- ์ ์ฒด ์์คํ ์ ํ์ฅ์ฑ์ ์ํคํ ์ฒ์ ์ ์ฐ์ฑ๊ณผ ๊ฐ๋ณ ํด๋ฌ์คํฐ๋ฅผ ๊ณตํต ๋ ผ๋ฆฌ ์ํฐํฐ๋ก ๊ฒฐํฉํ๋ ๋ฅ๋ ฅ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
ํ๋ก์ ํธ์ ์ฑ๊ณต์ ํ์ฅ์ ๋จ์์ฑ๊ณผ ์๋์ ๋ฌ๋ ค ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ํ์ฌ ๋ฒ์ ์ ๋ฉ์์ง์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํจ๊ป ์ฑ์ฅํฉ๋๋ค. 50~60๋์ ๋จธ์ ์ผ๋ก ๊ตฌ์ฑ๋ ํด๋ฌ์คํฐ๊ฐ ๋ถ์กฑํ๋๋ผ๋ ํ๋๋ ์ด์ ์ ์์งํ ์ ์์ต๋๋ค. ๋ถํํ๊ฒ๋ ์ฐํฉ์ด๋ผ๋ ์ฃผ์ ๋ ์ด ๊ธฐ์ฌ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฉ๋๋ค.
ํ์ด์ง
๋ก๋ ๋ฐธ๋ฐ์ฑ์ ๋ถ์ํ ๋ ์ด๋ฏธ ์๋น์ค ์ปจํธ๋กค๋ฌ์ ์ค๋ณต์ฑ์ ๋ํด ๋ ผ์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฉ์์ง๋ ์์ฝ๋์ด์ผ ํฉ๋๋ค. ๋ ธ๋ ๋๋ ์์คํ ์ถฉ๋์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ ๋ฉ์์ง์ ๊ฐ๋ฅํ ๊ฐ์ฅ ์งง์ ์๊ฐ์ ์๋์ผ๋ก ๋ณต๊ตฌ๋์ด์ผ ํฉ๋๋ค.
๋ด ํ๋ก์ ํธ์์๋ ์ถ๋ฝ ์ ํ์ค์ ๋ฐ๋ ์ถ๊ฐ ๋
ธ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. Erlang์๋ OTP ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ ํ์ค ๋ถ์ฐ ๋ชจ๋ ๊ตฌํ์ด ์์ต๋๋ค. ๋ถ์ฐ ๋ชจ๋๋ ์ฅ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ์ด์ ์ ์คํํ ๋ค๋ฅธ ๋
ธ๋์์ ์ฅ์ ๊ฐ ๋ฐ์ํ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ์ฌ ๋ณต๊ตฌ๋ฅผ ์ํํฉ๋๋ค. ํ๋ก์ธ์ค๋ ํฌ๋ช
ํฉ๋๋ค. ์ค๋ฅ๊ฐ ๋ฐ์ํ ํ ์ ํ๋ฆฌ์ผ์ด์
์ ์๋์ผ๋ก ์ฅ์ ์กฐ์น ๋
ธ๋๋ก ์ด๋ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ๋ํด ์์ธํ ์์๋ณผ ์ ์์ต๋๋ค.
ะัะพะธะทะฒะพะดะธัะตะปัะฝะพััั
์ต์ํ Rabbitmq์ ์ฑ๋ฅ๊ณผ ์ฌ์ฉ์ ์ ์ ๋ฉ์์ง์ ๋๋ต์ ์ผ๋ก ๋น๊ตํด ๋ณด๊ฒ ์ต๋๋ค.
๋๋ ์ฐพ์๋ค
๋จ๋ฝ 6.14.1.2.1.2.2. ์๋ณธ ๋ฌธ์๋ RPC CAST์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
OS ์ปค๋์ด๋ Erlang VM์ ๋ํ ์ถ๊ฐ ์ค์ ์ ๋ฏธ๋ฆฌ ํ์ง ์์ต๋๋ค. ํ ์คํธ ์กฐ๊ฑด:
- erl์ ๋ค์์ ์ ํํฉ๋๋ค: +A1 +sbtu.
- ๋จ์ผ erlang ๋ ธ๋ ๋ด ํ ์คํธ๋ ๋ชจ๋ฐ์ผ ๋ฒ์ ์ ์ด์ i7์ด ์ค์น๋ ๋ฉํฑ์์ ์คํ๋ฉ๋๋ค.
- ํด๋ฌ์คํฐ ํ ์คํธ๋ 10G ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ ์๋ฒ์์ ์ํ๋ฉ๋๋ค.
- ์ฝ๋๋ ๋์ปค ์ปจํ ์ด๋์์ ์คํ๋ฉ๋๋ค. NAT ๋ชจ๋์ ๋คํธ์ํฌ.
ํ ์คํธ ์ฝ๋:
req_resp_bench(_) ->
W = perftest:comprehensive(10000,
fun() ->
messaging:request(?EXCHANGE, default, ping, self()),
receive
#'$msg'{message = pong} -> ok
after 5000 ->
throw(timeout)
end
end
),
true = lists:any(fun(E) -> E >= 30000 end, W),
ok.
1 ์คํฌ๋ฆฝํธ : ํ ์คํธ๋ ์ด์ i7 ๋ชจ๋ฐ์ผ ๋ฒ์ ์ด ์ค์น๋ ๋ ธํธ๋ถ์์ ์คํ๋์์ต๋๋ค. ํ ์คํธ, ๋ฉ์์ง ๋ฐ ์๋น์ค๋ ํ๋์ Docker ์ปจํ ์ด๋์ ์๋ ํ๋์ ๋ ธ๋์์ ์คํ๋ฉ๋๋ค.
Sequential 10000 cycles in ~0 seconds (26987 cycles/s)
Sequential 20000 cycles in ~1 seconds (26915 cycles/s)
Sequential 100000 cycles in ~4 seconds (26957 cycles/s)
Parallel 2 100000 cycles in ~2 seconds (44240 cycles/s)
Parallel 4 100000 cycles in ~2 seconds (53459 cycles/s)
Parallel 10 100000 cycles in ~2 seconds (52283 cycles/s)
Parallel 100 100000 cycles in ~3 seconds (49317 cycles/s)
2 ์คํฌ๋ฆฝํธ: NAT(Docker) ์๋์ ์๋ก ๋ค๋ฅธ ๋จธ์ ์์ ์คํ๋๋ 3๊ฐ์ ๋ ธ๋.
Sequential 10000 cycles in ~1 seconds (8684 cycles/s)
Sequential 20000 cycles in ~2 seconds (8424 cycles/s)
Sequential 100000 cycles in ~12 seconds (8655 cycles/s)
Parallel 2 100000 cycles in ~7 seconds (15160 cycles/s)
Parallel 4 100000 cycles in ~5 seconds (19133 cycles/s)
Parallel 10 100000 cycles in ~4 seconds (24399 cycles/s)
Parallel 100 100000 cycles in ~3 seconds (34517 cycles/s)
๋ชจ๋ ๊ฒฝ์ฐ์ CPU ์ฌ์ฉ๋ฅ ์ 250%๋ฅผ ์ด๊ณผํ์ง ์์์ต๋๋ค.
๊ฒฐ๊ณผ
๋๋ ์ด ์ฌ์ดํด์ด ๋ง์์ ๋คํ์ฒ๋ผ ๋ณด์ด์ง ์๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉฐ ๋ด ๊ฒฝํ์ด ๋ถ์ฐ ์์คํ ์ฐ๊ตฌ์๊ณผ ๋น์ฆ๋์ค ์์คํ ์ ์ํ ๋ถ์ฐ ์ํคํ ์ฒ ๊ตฌ์ถ์ ์์ ๋จ๊ณ์ ์๊ณ Erlang/Elixir์ ๊ด์ฌ์ ๊ฐ๊ณ ์๋ ์ค๋ฌด์ ๋ชจ๋์๊ฒ ์ค์ง์ ์ธ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. , ํ์ง๋ง ๊ทธ๋งํ ๊ฐ์น๊ฐ ์๋์ง ์์ฌ ์ค๋ฝ์ต๋๋ค ...
ะคะพัะพ
๋ฑ๋ก๋ ์ฌ์ฉ์๋ง ์ค๋ฌธ ์กฐ์ฌ์ ์ฐธ์ฌํ ์ ์์ต๋๋ค.
VTrade ์คํ ์๋ฆฌ์ฆ์ ์ผ๋ถ๋ก ์ด๋ค ์ฃผ์ ๋ฅผ ๋ ์์ธํ ๋ค๋ฃจ์ด์ผ ํฉ๋๊น?
-
์ด๋ก : ์์ฅ, ์ฃผ๋ฌธ ๋ฐ ํ์ด๋ฐ: DAY, GTD, GTC, IOC, FOK, MOO, MOC, LOO, LOC
-
์ฃผ๋ฌธ์. ๊ทธ๋ฃนํ๋ฅผ ํตํ ์ฑ ๊ตฌํ์ ์ด๋ก ๊ณผ ์ค์
-
๊ฑฐ๋ ์๊ฐํ: ํฑ, ๋ฐ, ํด์๋. ๋ณด๊ด๋ฐฉ๋ฒ๊ณผ ์ ์ฐฉ๋ฐฉ๋ฒ
-
๋ฐฑ์คํผ์ค. ๊ธฐํ ๋ฐ ๊ฐ๋ฐ. ์ง์ ๋ชจ๋ํฐ๋ง ๋ฐ ์ฌ๊ณ ์กฐ์ฌ
-
API. ์ด๋ค ์ธํฐํ์ด์ค๊ฐ ํ์ํ์ง, ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ์์๋ด ์๋ค.
-
์ ๋ณด ์ ์ฅ: ๊ฑฐ๋ ์์คํ ์ PostgreSQL, Timescale, Tarantool
-
๊ฑฐ๋ ์์คํ ์ ๋ฐ์์ฑ
-
๋ค๋ฅธ. ๋๊ธ์ ์ฐ๊ฒ ์ต๋๋ค
6๋ช
์ ์ฌ์ฉ์๊ฐ ํฌํํ์ต๋๋ค. 4๋ช
์ ์ฌ์ฉ์๊ฐ ๊ธฐ๊ถํ์ต๋๋ค.
์ถ์ฒ : habr.com