๋๋ http_request๋ฅผ ์ฌ์ฉํ์ฌ WordPress์์ ์บ์๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๋ mruby ํธ๋ค๋ฌ๋ฅผ ์์ฑํ์ง๋ง ํธ๋ค๋ฌ๋ฅผ ์ ์๊ธฐ ์ํ๋ก ์ ์งํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ณ ๋๋ฌด ๋ง์ ์์ฒญ์ ์ํํ๊ธฐ ๋๋ฌธ์ PHP๊ฐ ๋ฐ๋ผ๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ ์์ฒญ์ ์คํจํฉ๋๋ค.
mruby๋ฅผ ์ฌ์ฉํ์ฌ h2o์์ ๋ช ์ด ๋์ ์ ์ ์ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์ค๋ฅ:
[lib/handler/fastcgi.c] in request:/index.php/tag/science:connection failed:failed to connect to host
์ฝ๋:
if request_is_from_self and links_file_exist and req_is_get
links = `php #{links_filepath}`
for link in links.split(' ') do
req = http_request(link)
_, _, _ = req.join
end
end
์๋
@taosx
๋๋ ๊ทธ๊ฒ์ด ๋ฐ๋ผ๊ฐ ์์๋ ์ ๋ง๋ก php์ธ์ง ๋ค์ ์์ฌ ์ค๋ฝ์ต๋๋ค.
๊ทธ ๋ค์ fastcgi๋ฅผ ์คํํ๋ h2o์ ๊ณ ์ ํ ์ธ์คํด์ค์ http ์์ฒญ์ ๋ณด๋ด๊ณ ์์ต๋๊น?
์ผ์ ์ค์ง๋ฅผ ์๋ฎฌ๋ ์ดํธํ๊ธฐ ์ํด ์๋์ ์ผ๋ก ์ด ์์ ์ ์ํํ๋์ง ํ์คํ์ง ์์ง๋ง ๋ด๊ฐ ์ฝ์ ๋ฐ์ ๋ฐ๋ฅด๋ฉด ๋ชจ๋ ์์ฒญ์ โโ๋ํด ์์ฐจ์ ์ผ๋ก ์ฐธ์ฌํ๊ณ ์์ต๋๋ค. ์์ด๋์ด๋ ์์ฒญ์ด ๋ณ๋ ฌ๋ก ์งํ๋๋ฏ๋ก ๋ชจ๋ ์์ฒญ์ด ๋ฐ์ํ ํ์๋ง ๊ฐ์ ์ ์์ํ๋ค๋ ๊ฒ์ ๋๋ค.
๋น์ ์ ๊ฐ์ ๊ฒ์ ์๋ ํ ์ ์์ต๋๋ค
links.split(' ').map{|l| http_request }.to_a.map{|r| r.join}
๋ ์์ธํ ์ค๋ฅ ์ค๋ช ์ ๊ฒ์ํ์๊ฒ ์ต๋๊น?
๋ํ ํญ์ ๋์ผํ ๋ช ๊ฐ์ ๋งํฌ๊ฐ ์๊ณ ๋ค์ ์ ์ ์ด๋ฉด ๋ฉ๋ชจ๋ฆฌ ์บ์์์ ์ ๋ ดํ ๋น์ฉ์ผ๋ก ์ ์ํ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
๊ทํ์ ์ฝ๋๊ฐ http_request์ ๋ํ ์ธ์๋ฅผ ์ ๊ณตํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์์ ํ์ต๋๋ค.
links.split(' ').map{|l| http_request(l) }.map{|r| r.join}
๊ทธ๋ฌ๋ ์ฌ์ ํ ์์ ๊ฒ์ํ ์ฝ๋๋ณด๋ค ์ฑ๋ฅ์ด ๋ ๋จ์ด์ง๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ opcache๋ฅผ PHP์ ์ค์นํ๊ณ ํ์ฑํํ์ฌ ์๋ฃจ์
์ ํด๊ฒฐํ์ผ๋ฉฐ ์ด์ ๋ชจ๋ ์์ฒญ์ ์ํํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ์ค๋ฅ ์์ด 27์ด์์ 3.1์ด๋ก ๋จ์ถ๋์์ต๋๋ค. ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด 4์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค.
๋ช ๊ฐ์ง ์ถ๊ฐ ํ ์คํธ๋ฅผ ์ํํ ํ 2๋ถ๋ง๋ค ํ์ด์ง๋ฅผ ์บ์ํ๊ณ ์ต๋ ์ค์ ์์ gzip๊ณผ brottli๋ก ์ฌ์ ์์ถํ๊ณ ์บ์์์ ์ ๊ณตํ๋ h2o๋ฅผ ์ฌ์ฉํ์ฌ WordPress ์ฌ์ดํธ์ ์ ์ฒด ์ฝ๋๋ฅผ ๊ณต๊ฐํ๊ณ ์ถ์ต๋๋ค. ์ง๊ธ๊น์ง h2o๋ฅผ ์ฌ๋ํ์ต๋๋ค. h2o์ ๊ธฐ์ฌํ ๋ชจ๋ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค!!
์์ผ๋ก ๋๋ openresty์ ๊ฐ์ด h2o๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง๋ง h2o์ ๋ํ ๋ ๋ง์ ์คํฌ๋ฆฝํ ๊ธฐ๋ฅ์ ๋ณด๊ณ ์ถ์ต๋๋ค.:D
@taosx ์ ์ฃ์กํฉ๋๋ค. ์ค์ํ ๋ถ๋ถ์ ์์ด๋ฒ๋ ธ์ต๋๋ค: .to_a
links.split(' ').map{|l| http_request }.to_a.map{|r| r.join}
๊ทธ๋ฅ ํธ๊ธฐ์ฌ์, ๋ค์ ์๋ํ ์ ์์ต๋๋ค. ์ผ๋ง๋ ๋ง์ ์์ฒญ์ ํฉ๋๊น / ๋งํฌ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ ์ผ๋ง์ ๋๊น?
@yannick ๋ค์ ์๋ํ๋๋ฐ ์ธ์(l)๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด http_request๋ฅผ ์์ ํด์ผ ํ์ต๋๋ค.
์๋๋ 3.06์ด๋ก ๋จ์ด์ก์ต๋๋ค:D, ์บ์๋ฅผ ์์
ํ ๋ ๋๋๋ก 2.9+.
๋งํฌ ๋ฐฐ์ด์๋ 41๊ฐ์ ์์(aws ec2 t2.micro)๊ฐ ์์ต๋๋ค.
๋ค๋ฅธ ๊ฒ์๋ฌผ์ ์ถ๊ฐํ ๋๋ง๋ค ๊ฒ์๋ฌผ ์์ฒด์์ 1๊ฐ์ ๋งํฌ + ์ถ๊ฐ๋ ํ๊ทธ์์ ~5๊ฐ์ ๋งํฌ๋ฅผ ์ป์ต๋๋ค...
๋๋ ๊ฐ๊น์ด ์ฅ๋์ ์์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ์ง๊ธ mruby๋ฅผ ํฌ๊ธฐํ๊ณ ๋ฏธ๋์๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ทจํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
wp์ ๋ํ ์ญ ํ๋ก์ ์บ์๋ก mruby์ ํจ๊ป h2o๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํ์ญ๋๊น? ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
Links = php #{links_filepath}
ํตํด PHP๋ก ์ ์์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๊ฒ์ ์๋ง๋ ๋งค์ฐ ๋๋ฆด ๊ฒ์
๋๋ค. ๋น์ ์ ๊ทธ ์๊ฐ์ ์ ๊ฑฐ ํ์ต๋๊น?
h2o์ ๊ฒฝ์ฐ t2.micro๋ ๊ด์ฐฎ์ง๋ง ํด๋น ์์คํ
์์ php ํญ๋ชฉ๋ ์คํํ๋ฉด ๋จ์ผ CPU๋ฅผ ๋๊ณ ๊ฒฝ์ํ๊ณ ์ฑ๋ฅ์ ๋์ฑ ๋จ์ด์ง๋๋ค. ๊ทธ๋์ ์ ์ด๋ ํ
์คํธ๋ฅผ ์ํด c4.large ๋๋ c4.xlarge์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํฉ๋๋ค.
์ mruby๋ฅผ ํตํ ์บ์ฑ์ ๋ฉ๋ชจ๋ฆฌ์์ ์ํํ๊ฑฐ๋ redis๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ผ ํฉ๋๋ค(ํ์ฌ ์ฌ์ ํ ํจ์น๊ฐ ํ์ํ์ง๋ง ๊ณง ๋ณํฉ๋์ด์ผ ํจ, https://github.com/h2o/h2o/pull/1152 ์ฐธ์กฐ).
ํฅ๋ฏธ๋ก์ด ํ ๋ก ์ ๋๋ค!
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ(์: mruby๋ฅผ ์ฌ์ฉํ์ฌ ์บ์ ๊ตฌํ)์ ์ ์ธํ๊ณ ๋ mruby ํธ๋ค๋ฌ์์ ์ ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ๋ง์์ผ ํ ์ด์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.