PHP ์ํ๊ณ์๋ ํ์ฌ Tarantool ์๋ฒ์ ์์
ํ๊ธฐ ์ํ ๋ ๊ฐ์ ์ปค๋ฅํฐ๊ฐ ์์ต๋๋ค. ์ด๋ ๊ณต์ PECL ํ์ฅ์
๋๋ค.
์ด ๊ธฐ์ฌ์์๋ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฑ๋ฅ ํ
์คํธ ๊ฒฐ๊ณผ๋ฅผ ๊ณต์ ํ๊ณ ์ฝ๋๋ฅผ ์ต์ํ์ผ๋ก ๋ณ๊ฒฝํ์ฌ 3-5 ์ฑ๋ฅ ํฅ์์ ๋ฌ์ฑํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ต๋๋ค(ํฉ์ฑ ํ
์คํธ์!).
์ฐ๋ฆฌ๋ ๋ฌด์์ ํ ์คํธํ ๊ฒ์ธ๊ฐ?
์์์ ์ธ๊ธํ ๊ฒ๋ค์ ํ ์คํธํด ๋ณด๊ฒ ์ต๋๋ค. ๋๊ธฐ ๋น๋๊ธฐ์, ๋ณ๋ ฌ ๋ฐ ๋น๋๊ธฐ์ ๋ณ๋ ฌ๋ก ์คํ๋๋ ์ปค๋ฅํฐ์ ๋๋ค. ๐ ๋ํ ์ปค๋ฅํฐ ์์ฒด์ ์ฝ๋๋ฅผ ๊ฑด๋๋ฆฌ๊ณ ์ถ์ง ์์ต๋๋ค. ํ์ฌ ์ํ๋ ๊ฒ์ ๋ฌ์ฑํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ํ์ฅ์ด ์์ต๋๋ค.
์ค์ธ โ PHP์ฉ ๊ณ ์ฑ๋ฅ ๋น๋๊ธฐ ํ๋ ์์ํฌ์ ๋๋ค. Alibaba ๋ฐ Baidu์ ๊ฐ์ ๊ฑฐ๋ ์ธํฐ๋ท ๊ธฐ์ ์ด ์ฌ์ฉํฉ๋๋ค. ๋ฒ์ 4.1.0๋ถํฐ ๋งค์ง ๋ฉ์๋๊ฐ ๋ฑ์ฅํ์ต๋๋ค. SwooleRuntime::enableCoroutine(), ์ด๋ฅผ ํตํด "ํ ์ค์ ์ฝ๋๋ก ๋๊ธฐ์ PHP ๋คํธ์ํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋น๋๊ธฐ์์ผ๋ก ๋ณํ"ํ ์ ์์ต๋๋ค.- Async๋ ์ต๊ทผ๊น์ง PHP์ ๋น๋๊ธฐ ์์
์ ์ํ ๋งค์ฐ ์ ๋งํ ํ์ฅ ๊ธฐ๋ฅ์ด์์ต๋๋ค. ์ต๊ทผ๊น์ง ์? ์ํ๊น๊ฒ๋ ์ ๊ฐ ์ ์ ์๋ ์ด์ ๋ก ์์ฑ์๊ฐ ์ ์ฅ์๋ฅผ ์ญ์ ํ์ผ๋ฉฐ ํ๋ก์ ํธ์ ํฅํ ์ด๋ช
์ ๋ถ๋ถ๋ช
ํฉ๋๋ค. ๊ผญ ์จ๋ด์ผ๊ฒ ์ด์
ํ ํฌํฌ์์. Swoole๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด ํ์ฅ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด TCP ๋ฐ TLS ์คํธ๋ฆผ์ ํ์ค ๊ตฌํ์ ๋น๋๊ธฐ ๋ฒ์ ์ผ๋ก ๋์ฒดํ์ฌ ์๋ชฉ์ ๊ฐ๋ณ๊ฒ ์์ง์ฌ ๋ฐ์ง๋ฅผ ์ฝ๊ฒ ์ผค ์ ์์ต๋๋ค. ์ด๋ '์ต์ ์ ํตํด ์ํ๋ฉ๋๋ค.๋น๋๊ธฐ.tcp = 1". ํํ โ phpdbg, apcu, pthreads, pcov, uopz์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์์ด์ ์ ์๋ ค์ง Joe Watkins์ ์๋นํ ์๋ก์ด ํ์ฅ์ ๋๋ค. ์ด ํ์ฅ์ PHP์ ๋ฉํฐ์ค๋ ๋ฉ์ ์ํ API๋ฅผ ์ ๊ณตํ๋ฉฐ pthread๋ฅผ ๋์ฒดํ๋ ์ญํ ์ ํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ค์ํ ์ ํ์ PHP์ ZTS(Zend Thread Safe) ๋ฒ์ ์์๋ง ์๋ํ๋ค๋ ๊ฒ์ ๋๋ค.
์ด๋ป๊ฒ ํ ์คํธํ ๊น์?
๋ฏธ๋ฆฌ ์ฐ๊ธฐ ๋ก๊น ์ด ๋นํ์ฑํ๋ Tarantool ์ธ์คํด์ค๋ฅผ ์์ํ๊ฒ ์ต๋๋ค(wal_mode = ์์) ๋ฐ ์ฆ๊ฐ๋ ๋คํธ์ํฌ ๋ฒํผ(๋ฏธ๋ฆฌ ์ฝ๊ธฐ = 1 * 1024 * 1024). ์ฒซ ๋ฒ์งธ ์ต์ ์ ๋์คํฌ ์์ ์ ์ ๊ฑฐํ๊ณ , ๋ ๋ฒ์งธ ์ต์ ์ ์ด์ ์ฒด์ ๋ฒํผ์์ ๋ ๋ง์ ์์ฒญ์ ์ฝ์ ์ ์๊ฒ ํ์ฌ ์์คํ ํธ์ถ ์๋ฅผ ์ต์ํํฉ๋๋ค.
๋ฐ์ดํฐ(์ฝ์
, ์ญ์ , ์ฝ๊ธฐ ๋ฑ)๋ก ์์
ํ๋ ๋ฒค์น๋งํฌ์ ๊ฒฝ์ฐ ๋ฒค์น๋งํฌ๋ฅผ ์์ํ๊ธฐ ์ ์ memtx ๊ณต๊ฐ์ด (์ฌ)์์ฑ๋๋ฉฐ, ์ฌ๊ธฐ์ ๊ธฐ๋ณธ ์ธ๋ฑ์ค ๊ฐ์ ์ ๋ ฌ๋ ์ ์ ๊ฐ ์์ฑ๊ธฐ์ ์ํด ์์ฑ๋ฉ๋๋ค. โ(์์).
๊ณต๊ฐ DDL์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
space = box.schema.space.create(config.space_name, {id = config.space_id, temporary = true})
space:create_index('primary', {type = 'tree', parts = {1, 'unsigned'}, sequence = true})
space:format({{name = 'id', type = 'unsigned'}, {name = 'name', type = 'string', is_nullable = false}})
ํ์ํ ๊ฒฝ์ฐ ๋ฒค์น๋งํฌ๋ฅผ ์คํํ๊ธฐ ์ ์ ๊ณต๊ฐ์ด ๋ค์ ํ์์ 10,000๊ฐ ํํ๋ก ์ฑ์์ง๋๋ค.
{id, "tuplะต_<id>"}
ํํ์ ์์์ ํค ๊ฐ์ ์ฌ์ฉํ์ฌ ์ก์ธ์ค๋ฉ๋๋ค.
๋ฒค์น๋งํฌ ์์ฒด๋ ์๋ฒ์ ๋ํ ๋จ์ผ ์์ฒญ์ผ๋ก, 10,000ํ(ํ์ ) ์คํ๋์ด ๋ฐ๋ณต์ ์ผ๋ก ์คํ๋ฉ๋๋ค. 5ํ ๋ฐ๋ณต ์ฌ์ด์ ๋ชจ๋ ์๊ฐ ํธ์ฐจ๊ฐ ํ์ฉ ๊ฐ๋ฅํ ์ค๋ฅ 3%* ๋ด์ ํฌํจ๋ ๋๊น์ง ๋ฐ๋ณต์ด ๋ฐ๋ณต๋ฉ๋๋ค. ๊ทธ ํ ํ๊ท ๊ฒฐ๊ณผ๊ฐ ์ทจํด์ง๋๋ค. ํ๋ก์ธ์๊ฐ ์กฐ์ ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฐ๋ณต ์ฌ์ด์ 1์ด์ ์ผ์ ์ค์ง๊ฐ ์์ต๋๋ค. Lua์ ๊ฐ๋น์ง ์์ง๊ธฐ๋ ๊ฐ ๋ฐ๋ณต ์ ์ ๋นํ์ฑํ๋๊ณ ์๋ฃ๋๋ฉด ๊ฐ์ ๋ก ์์๋ฉ๋๋ค. PHP ํ๋ก์ธ์ค๋ ์ถ๋ ฅ ๋ฒํผ๋ง์ด ํ์ฑํ๋๊ณ ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ๋นํ์ฑํ๋ ์ํ์์ ๋ฒค์น๋งํฌ์ ํ์ํ ํ์ฅ์ผ๋ก๋ง ์์๋ฉ๋๋ค.
* ํ์ ์, ๋ฐ๋ณต ๋ฐ ์ค๋ฅ ์๊ณ๊ฐ์ ๋ฒค์น๋งํฌ ์ค์ ์์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
ํ ์คํธ ํ๊ฒฝ
์๋ ๊ฒ์๋ ๊ฒฐ๊ณผ๋ MacBookPro(2015), ์ด์ ์ฒด์ ์ธ Fedora 30(์ปค๋ ๋ฒ์ 5.3.8-200.fc30.x86_64)์์ ์ํ๋์์ต๋๋ค. Tarantool์ " ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ docker์์ ์์๋์์ต๋๋ค.--network host"
.
ํจํค์ง ๋ฒ์ :
Tarantool: 2.3.0-115-g5ba5ed37e
๋์ปค: 19.03.3, a872fc2f86 ๋น๋
PHP: 7.3.11 (cli) (๋น๋ ๋ ์ง: 22๋
2019์ 08์ผ 11:04:XNUMX)
ํ๋ํด/ํด๋ผ์ด์ธํธ: 0.6.0
๋ฆฌ๋ฐํท/msgpack: 0.6.1
ext-tarantool: 0.3.2(7.3์ฉ + ํจ์น)*
ext-msgpack: 2.0.3
ํ์ฅ ๋น๋๊ธฐ: 0.3.0-8c1da46
์ธ๋ถ ์ค์ธ: 4.4.12
์ธ๋ถ ๋ณ๋ ฌ: 1.1.3
* ์ํ๊น๊ฒ๋ ๊ณต์ ์ปค๋ฅํฐ๋ PHP ๋ฒ์ > 7.2์์๋ ์๋ํ์ง ์์ต๋๋ค. PHP 7.3์์ ํ์ฅ ๊ธฐ๋ฅ์ ์ปดํ์ผํ๊ณ ์คํํ๋ ค๋ฉด ๋ค์์ ์ฌ์ฉํด์ผ ํ์ต๋๋ค.
์กฐ์ฌ ๊ฒฐ๊ณผ
๋๊ธฐ ๋ชจ๋
Tarantool ํ๋กํ ์ฝ์ ๋ฐ์ด๋๋ฆฌ ํ์์ ์ฌ์ฉํฉ๋๋ค.
์ปค๋ฅํฐ๋ฅผ ๋น๊ตํ๊ธฐ ์ ์ PHP ์ปค๋ฅํฐ์ ๋ํ MessagePack ์ธ์ฝ๋์ ์ฑ๋ฅ์ ์ธก์ ํ๊ณ ์ถ๊ฐ ํ ์คํธ์์๋ ์ต์์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ธ์ฝ๋๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
PHP ๋ฒ์ (Pure)์ PECL ํ์ฅ๋ณด๋ค ์๋๊ฐ ๋จ์ด์ง์ง๋ง ์ค์ ํ๋ก์ ํธ์์๋ ์ฌ์ ํ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด์ ๋๊ธฐ ๋ชจ๋์์ ์ปค๋ฅํฐ์ ์ฑ๋ฅ์ ์ธก์ ํด ๋ณด๊ฒ ์ต๋๋ค.
๊ทธ๋ํ์์ ๋ณผ ์ ์๋ฏ์ด PECL ์ปค๋ฅํฐ(Tarantool)๋ PHP ์ปค๋ฅํฐ(ํด๋ผ์ด์ธํธ)์ ๋นํด ๋ ๋์ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋๋ค. ๊ทธ๋ฌ๋ ํ์๊ฐ ๋๋ฆฐ ์ธ์ด๋ก ๊ตฌํ๋๋ ๊ฒ ์ธ์๋ ์ค์ ๋ก ๋ ๋ง์ ์์
์ ์ํํ๋ค๋ ์ ์ ๊ณ ๋ คํ๋ฉด ์ด๋ ๋๋ผ์ด ์ผ์ด ์๋๋๋ค. ํธ์ถํ ๋๋ง๋ค ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋ฉ๋๋ค. ์๋ขฐ ะธ ์๋ต (Select์ ๊ฒฝ์ฐ - ๋ํ ๊ธฐ์ค, ๊ทธ๋ฆฌ๊ณ ์
๋ฐ์ดํธ/์
์ํธ์ ๊ฒฝ์ฐ โ ํ์ ๋ถ), ๊ฐ๋ณ ์ํฐํฐ ์ฐ๊ฒฐ, ํฌ์ฅ ๊ธฐ๊ณ ะธ ์ฒ๋ฆฌ๊ธฐ ๊ทธ๋ค์ ๋ํ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๋ถ๋ช
ํ ์ ์ฐ์ฑ์๋ ๋๊ฐ๊ฐ ๋ฐ๋ฆ
๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก PHP ์ธํฐํ๋ฆฌํฐ๋ ์ข์ ์ฑ๋ฅ์ ๋ณด์ฌ ์ฃผ์ง๋ง ์ฐจ์ด๋ ์์ง๋ง ๋ฏธ๋ฏธํ๋ฉฐ PHP 7.4์ JIT๋ ๋งํ ๊ฒ๋ ์๊ณ PHP 8์์ ์ฌ์ ๋ก๋๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์ฌ ๋ ๋ฎ์์ง ์๋ ์์ต๋๋ค.
๊ณ์ ์งํํฉ์๋ค. Tarantool 2.0์์๋ SQL ์ง์์ด ๋์ ๋์์ต๋๋ค. SQL ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์ ํ, ์ฝ์ , ์ ๋ฐ์ดํธ ๋ฐ ์ญ์ ์์ ์ ์ํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ noSQL(๋ฐ์ด๋๋ฆฌ)๊ณผ ๋น๊ตํด ๋ณด๊ฒ ์ต๋๋ค.
SQL ๊ฒฐ๊ณผ๋ ๊ทธ๋ฆฌ ์ธ์์ ์ด์ง ์์ต๋๋ค(์์ง ๋๊ธฐ ๋ชจ๋๋ฅผ ํ
์คํธํ๊ณ ์์์ ์๊ธฐ์์ผ ๋๋ฆฌ๊ฒ ์ต๋๋ค). ๊ทธ๋ฌ๋ ๋ฏธ๋ฆฌ ์ด์ ๋ํด ํ๋ฅผ ๋ด์ง๋ ์์ ๊ฒ์
๋๋ค. SQL ์ง์์ ์์ง ํ๋ฐํ๊ฒ ๊ฐ๋ฐ ์ค์
๋๋ค(๋น๊ต์ ์ต๊ทผ์๋ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค).
๋น๋๊ธฐ
์, ์ด์ Async ํ์ฅ์ด ์์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ํ๋ ๋ฐ ์ด๋ป๊ฒ ๋์์ด ๋๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋น๋๊ธฐ ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ธฐ ์ํด ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์ฝ๋ฃจํด ๊ธฐ๋ฐ API๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฐ๋ฆฌ ํ๊ฒฝ์ ๋ํ ์ต์ ์ ์ฝ๋ฃจํด ์๋ 25๊ฐ๋ผ๋ ๊ฒ์ ๊ฒฝํ์ ์ผ๋ก ์์๋์ต๋๋ค.
10,000๊ฐ์ ์ฝ๋ฃจํด์ 25๊ฐ์ ์์
์ "๋ถ์ฐ"ํ๊ณ ์ด๋ค ์ผ์ด ์ผ์ด๋๋์ง ํ์ธํ์ธ์.
์ด๋น ์์
ํ์๊ฐ 3๋ฐฐ ์ด์ ์ฆ๊ฐํ์ต๋๋ค.
์ํ๊น๊ฒ๋ PECL ์ปค๋ฅํฐ๋ ext-async๋ก ์์๋์ง ์์์ต๋๋ค.
SQL์ ์ด๋ป์ต๋๊น?
๋ณด์๋ค์ํผ ๋น๋๊ธฐ ๋ชจ๋์์๋ ๋ฐ์ด๋๋ฆฌ ํ๋กํ ์ฝ๊ณผ SQL์ ์ฐจ์ด๊ฐ ์ค๋ฅ ๋ฒ์ ๋ด์ ์๊ฒ ๋์์ต๋๋ค.
์ค์ธ
์ด๋ฒ์๋ Swoole์ ๋ํ ์ต์ ์ ์ฝ๋ฃจํด ์๋ฅผ ์์๋
๋๋ค.
25์์ ๋ฉ์ถ๊ฒ ์ต๋๋ค. Async ํ์ฅ๊ณผ ๋์ผํ ํธ๋ฆญ์ ๋ฐ๋ณตํด ๋ณด๊ฒ ์ต๋๋ค. 10,000๊ฐ์ ์ฝ๋ฃจํด ๊ฐ์ 25๊ฐ์ ์์
์ ๋ฐฐํฌํฉ๋๋ค. ๋ํ ๋ชจ๋ ์์
์ 2๊ฐ์ ํ๋ก์ธ์ค๋ก ๋๋๋ ๋ ๋ค๋ฅธ ํ
์คํธ๋ฅผ ์ถ๊ฐํ ๊ฒ์
๋๋ค(์ฆ, ๊ฐ ํ๋ก์ธ์ค๋ 5,000๊ฐ์ ์ฝ๋ฃจํด์์ 25๊ฐ์ ์์
์ ์ํํฉ๋๋ค). ํ๋ก์ธ์ค๋ ๋ค์์ ์ฌ์ฉํ์ฌ ์์ฑ๋ฉ๋๋ค. ์ค์ธํ๋ก์ธ์ค.
๊ฒฐ๊ณผ :
Swole์ ํ๋์ ํ๋ก์ธ์ค์์ ์คํ๋ ๋ Async์ ๋นํด ์ฝ๊ฐ ๋ฎ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ ์ฃผ์ง๋ง, 2๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ๋ฆผ์ด ํฌ๊ฒ ๋ฌ๋ผ์ง๋๋ค(์ซ์ 2๋ ์ฐ์ฐํ ์ ํ๋ ๊ฒ์ด ์๋๋๋ค. ์ ์ปดํจํฐ์์๋ 2๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๊ฐ์ฅ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ์์ต๋๋ค).
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , Async ํ์ฅ์๋ ํ๋ก์ธ์ค ์์ ์ ์ํ API๋ ์์ง๋ง ํ๋ ์ด์์ ํ๋ก์ธ์ค์์ ๋ฒค์น๋งํฌ๋ฅผ ์คํํ๋ ๊ฒ๊ณผ ์ด๋ค ์ฐจ์ด๋ ๋ฐ๊ฒฌํ์ง ๋ชปํ์ต๋๋ค(์ด๋๊ฐ์์ ์ค์๋ฅผ ํ์ ์๋ ์์ต๋๋ค).
SQL ๋ ๋ฐ์ด๋๋ฆฌ ํ๋กํ ์ฝ:
๋น๋๊ธฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋น๋๊ธฐ ๋ชจ๋์์๋ ๋ฐ์ด๋๋ฆฌ ์์
๊ณผ SQL ์์
๊ฐ์ ์ฐจ์ด๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค.
ํํ
๋ณ๋ ฌ ํ์ฅ์ ์ฝ๋ฃจํด์ด ์๋๋ผ ์ค๋ ๋์ ๊ดํ ๊ฒ์ด๋ฏ๋ก ์ต์ ์ ๋ณ๋ ฌ ์ค๋ ๋ ์๋ฅผ ์ธก์ ํด ๋ณด๊ฒ ์ต๋๋ค.
๋ด ์ปดํจํฐ์์๋ 16๊ณผ ๊ฐ์ต๋๋ค. 16๊ฐ์ ๋ณ๋ ฌ ์ค๋ ๋์์ ์ปค๋ฅํฐ ๋ฒค์น๋งํฌ๋ฅผ ์คํํด ๋ณด๊ฒ ์ต๋๋ค.
๋ณด์๋ค์ํผ ๊ฒฐ๊ณผ๋ ๋น๋๊ธฐ์ ํ์ฅ๋ณด๋ค ํจ์ฌ ์ข์ต๋๋ค(2๊ฐ ํ๋ก์ธ์ค์์ ์คํ๋๋ Swoole์ ์ ์ธ). PECL ์ปค๋ฅํฐ์ ๊ฒฝ์ฐ ์
๋ฐ์ดํธ ๋ฐ Upsert ์์
์ด ๋น์ด ์์ต๋๋ค. ์ด๋ ์ด๋ฌํ ์์
์ด ์ค๋ฅ๋ก ์ธํด ์คํจํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๊ฒ์ด ext-parallel, ext-tarantool ๋๋ ๋ ๋ค์ ์๋ชป์ธ์ง๋ ์ ์ ์์ต๋๋ค.
์ด์ SQL ์ฑ๋ฅ์ ๋น๊ตํด ๋ณด๊ฒ ์ต๋๋ค.
๋๊ธฐ์์ผ๋ก ์คํ๋๋ ์ปค๋ฅํฐ์ ๊ทธ๋ํ์ ์ ์ฌ์ ์ ํ์ธํ์ญ๋๊น?
ํจ๊ป
๋ง์ง๋ง์ผ๋ก ๋ชจ๋ ๊ฒฐ๊ณผ๋ฅผ ํ๋์ ๊ทธ๋ํ๋ก ์์ฝํ์ฌ ํ
์คํธํ ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ ์ฒด ๊ทธ๋ฆผ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์์ง ์ํํ์ง ์์ ์๋ก์ด ํ
์คํธ๋ฅผ ์ฐจํธ์ ํ๋๋ง ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. Parallel*์ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ์ฝ๋ฃจํด์ ๋ณ๋ ฌ๋ก ์คํํด ๋ณด๊ฒ ์ต๋๋ค. ์์ ํ์ฅ ๊ธฐ๋ฅ์ ํตํฉํ๋ ค๋ ์์ด๋์ด๋ ์ด๋ฏธ
* Swoole ์ฝ๋ฃจํด์ Parallel๋ก ์คํํ ์ ์์์ต๋๋ค. ์ด๋ฌํ ํ์ฅ ํ๋ก๊ทธ๋จ์ ํธํ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ต์ข ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋์ ๊ฒฐ๋ก
์ ์๊ฐ์๋ ๊ฒฐ๊ณผ๊ฐ ์๋นํ ๊ฐ์น ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ผ๋ฉฐ ์ด๋ค ์ด์ ์์์ธ์ง ์ด๊ฒ์ด ํ๊ณ๊ฐ ์๋๋ผ๊ณ ํ์ ํฉ๋๋ค! ์ค์ ํ๋ก์ ํธ์์ ์ด๊ฒ์ ์ค์ค๋ก ๊ฒฐ์ ํด์ผ ํ๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ์ต์ํ์ ๋
ธ๋ ฅ์ผ๋ก ๋๊ธฐ์ TCP ์ปค๋ฅํฐ์์ ์ผ๋ง๋ ๋ง์ ๊ฒ์ "์์ฐฉ"ํ ์ ์๋์ง ํ๊ฐํ ์ ์๋ ํฅ๋ฏธ๋ก์ด ์คํ์ด์๋ค๊ณ ๋ง ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค. ๋ฒค์น๋งํฌ ๊ฐ์ ์ ์ํ ์์ด๋์ด๊ฐ ์์ผ์๋ฉด ๊ทํ์ ํ ์์ฒญ์ ๊ธฐ๊บผ์ด ๊ณ ๋ คํด ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์คํ ์ง์นจ ๋ฐ ๊ฒฐ๊ณผ๊ฐ ํฌํจ๋ ๋ชจ๋ ์ฝ๋๋ ๋ณ๋์ ๋ฌธ์๋ก ๊ฒ์๋ฉ๋๋ค.
์ถ์ฒ : habr.com