Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPアプリケーションのスケーラビリティと 信頼性を革新する nginx+ngx_mrubyと...

PHPアプリケーションのスケーラビリティと 信頼性を革新する nginx+ngx_mrubyとGoの融合

PHPerKaigi2024でお話しました。

Avatar for Kazuhiko Yamashita

Kazuhiko Yamashita

March 07, 2024
Tweet

More Decks by Kazuhiko Yamashita

Other Decks in Programming

Transcript

  1. PHPΞϓϦέʔγϣϯͷεέʔϥϏϦςΟ LAMPελοΫ(Linux, Apache, MySQL, PHP) LEMPελοΫ(Linux, nginx (Engine-X), MySQL/MariaDB, PHP)

    ϚΠΫϩαʔϏεΞʔΩςΫνϟ αʔόʔϨεΞʔΩςΫνϟ ݱ୅Ͱ࠾༻͞ΕΔΑ͏ͳΞʔΩςΫνϟ͸PHPͰ࣮ݱͰ͖Δ
  2. ଴߹ࣨΞʔΩςΫνϟͷ֓ཁ Waiting Room ngx_mruby Client Origin 1.ϦΫΤετ 2.ىಈ͞Ε͍ͯΔ͔ʁ 3.ະىಈ͔
 ڐՄࡁΈΫϥΠΞϯτ

    4.ϦΫΤετ 5.Ϩεϙϯε 6.Ϩεϙϯε OHY@NSVCZ͔Β଴߹ࣨ"1*ʹ )551ϦΫΤετͯ͠ঢ়ଶ֬ೝ
  3. ଴߹ࣨىಈܖػ location / { limit_req zone=example nodelay; limit_req_status 512; error_page

    512 =200 @waitingroom; } ϨʔτϦϛοτʹ֘౰ͨ͠Β
 εςʔλε512ͰΤϥʔѻ͍ʹ͔ͯ͠Βɺ εςʔλεΛ200ʹॻ͖׵͑ͯ
 ϦμΠϨΫτ OHJOYͷSBUFMJNJUNPEVMFΛར༻͠ɺ ա৒ΞΫηεΛݕ஌
  4. ଴߹ࣨىಈܖػ location @waitingroom { mruby_rewrite_handler enable_waitingroom.rb; proxy_pass origin_backend/$request_uri; internal; }

    location ~ ^/queues { proxy_pass waitingroom; internal; } ଴߹ࣨAPI͸mrubyͰ
 HTTPܦ༝Ͱίʔϧͯ͠ɺ
 ଴߹ࣨΛىಈ͢Δ
  5. ngx_http_subrequest location / { subrequest /subrequest } location /subreqest {

    puts "hello" } # http://localhost/ => hello ͋ΔϩέʔγϣϯʹདྷͨϦΫΤετΛ ଞͷϩέʔγϣϯʹϊϯϒϩοΩϯάʹ ϦΫΤετͯ͠ར༻͢Δ
  6. nginxͷupstream keepalive͸σϑΥϧτແޮ LFFQBMJWFσΟϨΫςΟϒͷઃఆͱ $POOFDUJPOϔομʔɺ )551όʔδϣϯͷࢦఆ͕ඞཁ VQTUSFBNIUUQ@CBDLFOE\ TFSWFS LFFQBMJWF ^ TFSWFS\

    MPDBUJPOIUUQ\ QSPYZ@QBTTIUUQIUUQ@CBDLFOE QSPYZ@IUUQ@WFSTJPO QSPYZ@TFU@IFBEFS$POOFDUJPO  ^ ^