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

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

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

PHPerKaigi2024でお話しました。

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  ^ ^