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

Swoole と Laravel でプロダクション導入までの軌跡

Swoole と Laravel でプロダクション導入までの軌跡

Title: How to install laravel with swoole into the production

memory
PRO

March 15, 2023
Tweet

More Decks by memory

Other Decks in Programming

Transcript

  1. Ί΋Γʔ
    Swoole ͱ Laravel Ͱ

    ϓϩμΫγϣϯಋೖ·Ͱͷي੻
    ୈ 150 ճ PHP ษڧձ@౦ژ

    View Slide

  2. Ί΋Γʔ
    1994೥ੜ·Εɻෳ਺ͷελʔτΞοϓ
    اۀ΍্৔اۀͰΤϯδχΞͱͯ͠

    ϑϧελοΫʹ։ൃʹैࣄɻ2020 ೥ʹ
    גࣜձࣾτϥʔφʹࢀըɻ2022 ೥ 1 ݄
    ʹࣥߦ໾һ CTO ʹब೚ɻʮSoftware
    Designʯ΍ʮΈΜͳͷ PHPʯɼ
    ʮSwoole ͰֶͿ PHP ඇಉظॲཧʯͳ
    Ͳͷࣥචྺ͋Γɻ
    @m3m0r7

    View Slide

  3. ຊΛ঺հ͠ʹ஘ͤࢀ͡·ͨ͠

    SwooleͰֶͿPHPඇಉظॲཧ

    ʙฒߦॲཧʗฒྻॲཧͷجૅ͔Β࣮ફతͳ։ൃख๏·ͰҰؾʹΘ͔Δʙ

    ಺༰ʢൈਮʣ
    - ฒߦॲཧɾฒྻॲཧɼϚϧνεϨουɾϚϧνϓϩηεͷҧ
    ͍

    - PHP ͰͦΕͧΕΛ࣮૷͢Δʹ͸Ͳ͏ͨ͠ΒΑ͍͔ͷϊ΢ϋ΢

    View Slide


  4. View Slide

  5. ʢ༨ஊʣࣥචதͷΞΫγσϯτ

    View Slide

  6. 1
    2
    3
    4
    ʢ༨ஊʣࣥචதͷΞΫγσϯτ
    Swoole ͱ OpenSwoole ʹ෼ذͨ͠
    Laravel Octane ͷര஀
    CentOS ͕ஶऀߍਖ਼ͷऴ൫Ͱऴྃ
    Fibers ͕ਖ਼ࣜʹ PHP ʹऔΓࠐ·ΕΔ

    View Slide


  7. View Slide

  8. ༨ஊΛ͓͍͓͍ͯͯ…

    View Slide

  9. ࣮͸ࢴ෯ͷ౎߹ͰࡌͤΒΕͳ͔ͬͨ

    ΋ͷ͕͋Γ·͢

    View Slide

  10. ͦΕ͸ Laravel ͱ Swoole Λަ͑ͨ

    ಺༰Ͱ͢

    View Slide

  11. 1
    2
    3
    4
    Laravel with Swoole
    Կ͕໰୊ͳͷ͔
    ىͬͨ͜໰୊
    Ͳ͏΍ͬͯղܾ͔ͨ͠
    ·ͱΊ

    View Slide

  12. Կ͕໰୊ͳͷ͔

    View Slide

  13. Կ͕໰୊ͳͷ͔
    γϯάϧτϯͷଟ༻
    - Swoole ͰαʔόʔΛݐͯΔ৔߹͸ɼӬଓతʹىಈ͞Εͨঢ়ଶͱͳΔ
    - ΋ͪΖΜɼઃఆͰԿճϦΫΤετ͕དྷͨΒ࠶ىಈͤ͞ΔΑ͏ͳઃఆ΋͋Δ
    ͕…࠶ىಈͤͯͨ͞ΒύϑΥʔϚϯεͷԸܙΛड͚ΒΕͳ͍ɻ
    - Laravel ͸࢓૊Έ্γϯάϧτϯΛଟ༻͍ͯ͠Δ
    - PHP ͷ੩తϑΟʔϧυ͸ɼ࠶ىಈ͞ΕΔ·Ͱ͸஋͕Ӭଓతʹ࢒Δ
    1

    View Slide

  14. ͭ·Γ…

    View Slide


  15. ΫϥΠΞϯτ B
    ΫϥΠΞϯτ A
    Swoole Ͱىಈͨ͠αʔόʔ
    ϦΫΤετ A ͷ app() Λ੩తϑΟʔϧυ΁

    View Slide


  16. ΫϥΠΞϯτ B
    ΫϥΠΞϯτ A
    Swoole Ͱىಈͨ͠αʔόʔ
    ϦΫΤετ B ͷ app() Λ੩తϑΟʔϧυ΁

    View Slide


  17. ΫϥΠΞϯτ B
    ΫϥΠΞϯτ A
    Swoole Ͱىಈͨ͠αʔόʔ
    ϦΫΤετ B ͷ app() Ͱ xxx ͕
    ϦΫΤετ A ͷ࣌ʹݺͼग़͞Εͯ͠·͏ʂ
    ్தͰϦΫΤετ B ΑΓ΋ॲཧʹ

    ͕͔͔࣌ؒΔ΋ͷ͕͋ͬͨ࣌

    View Slide

  18. Կ͕໰୊ͳͷ͔
    ϑΝαʔυͱίϯςφͷ࢓૊Έ
    - Laravel Ͱ͸ϑΝαʔυͳͲΛΠϯελϯεԽͨ͠΋ͷΛ੩తϑΟʔϧυʹೖ
    Ε͍ͯΔ
    - Container::setInstance ͱ͍ͬͨ੩తϑΟʔϧυલఏͷ࣮૷͕ଟ͍
    - ͭ·ΓɼϦΫΤετ͝ͱʹҟͳΔϦΫΤετͷϨεϙϯεΛड͚औΔ͜ͱʹͳ
    Δ
    2

    View Slide


  19. ΫϥΠΞϯτ B
    ΫϥΠΞϯτ A
    Swoole Ͱ࣮૷͞Εͨαʔόʔ
    ΫϥΠΞϯτ C
    ϦΫΤετ A ͱͯ͠ϦΫΤετ
    ϦΫΤετ B ͷϨεϙϯε͕ฦͬͯ͘Δ
    ϦΫΤετ C ͷϨεϙϯε͕ฦͬͯ͘Δ
    ϦΫΤετ A ͷϨεϙϯε͕ฦͬͯ͘Δ
    ϦΫΤετ B ͱͯ͠ϦΫΤετ
    ϦΫΤετ C ͱͯ͠ϦΫΤετ

    View Slide

  20. ͜ΕͰԿ͕ى͔ͬͨ͜…

    View Slide

  21. ىͬͨ͜໰୊
    - ಉ࣌઀ଓ͕ൃੜ͢Δ΄ͲϦΫΤετ͕ͳ͍৔߹͸࠶ݱ͠ͳ͍
    - ͦͷͨΊɼௐࠪʹΊͪΌͪ͘Ό࣌ؒΛཁͨ͠
    - αʔόʔͷεϖοΫʹΑͬͯมΘΔͷͰɼεςʔδϯάͩͱ࠶ݱ͠ͳ͍͚Ͳ

    ຊ൪͚ͩ࠶ݱ͢ΔɼΈ͍ͨͳݱ৅͕زଟͱ͋ͬͨ
    - ࣗ෼Ͱॻ͖ࠐΜͩ͸ͣͷσʔλ͕ଞऀ໊ٛͰσʔλ͕ॻ͖ࠐ·Εͨ
    - ηογϣϯ͕ೖΕସΘΔ໰୊͕͋ͬͨΓɼΫοΩʔ͕ೖΕସΘΔ໰୊͕͋ͬͨΓͨ͠
    - API ͷϨεϙϯε͕ೖΕସΘΔࣄ৅͕͋ͬͨ
    - /api/A Λୟ͍͍ͯΔͷʹ /api/B ͷϨεϙϯε͕ฦͬͯ͘Δ͜ͱ͕كʹ͋ͬͨ

    View Slide

  22. Ͳ͏΍ͬͯղܾ͔ͨ͠

    View Slide

  23. ௨ৗͷ Laravel

    View Slide


  24. ΫϥΠΞϯτ B
    ΫϥΠΞϯτ A
    Application Kernel Middleware Controller
    Service Provider
    Facade
    Model
    MySQL
    Redis

    View Slide

  25. Swoole ʹରԠͤͨ͞ Laravel

    View Slide


  26. ΫϥΠΞϯτ A
    Application Kernel Middleware Controller
    Service Provider
    Facade
    Model
    MySQL
    Redis
    Application Proxy
    ΫϥΠΞϯτ B Application Kernel Middleware Controller
    Service Provider
    Facade
    Model
    MySQL
    Redis

    View Slide


  27. ΫϥΠΞϯτ A
    Application Kernel Middleware Controller
    Service Provider
    Facade
    Model
    MySQL
    Redis
    Application Proxy
    ΫϥΠΞϯτ B Application Kernel Middleware Controller
    Service Provider
    Facade
    Model
    MySQL
    Redis
    ϦΫΤετ͝ͱʹ Application Proxy Ͱ

    Application Container ΛΠϯελϯεԽ

    View Slide


  28. ΫϥΠΞϯτ A
    Application Kernel Middleware Controller
    Service Provider
    Facade
    Model
    MySQL
    Redis
    Application Proxy
    ΫϥΠΞϯτ B Application Kernel Middleware Controller
    Service Provider
    Facade
    Model
    MySQL
    Redis
    Facade::$resolvedInstance Λ Proxy Խͯ͠ɼ

    ϦΫΤετ͝ͱʹ Facade Λ؅ཧ͢ΔΑ͏ʹ

    View Slide


  29. ΫϥΠΞϯτ A
    Application Kernel Middleware Controller
    Service Provider
    Facade
    Model
    MySQL
    Redis
    Application Proxy
    ΫϥΠΞϯτ B Application Kernel Middleware Controller
    Service Provider
    Facade
    Model
    MySQL
    Redis
    ֎෦ϦιʔεͷίωΫλ΋ϦΫΤετ͝ͱʹ
    ΠϯελϯεԽ͢ΔΑ͏ʹ

    View Slide

  30. ղܾࡦ
    - ੩తϑΟʔϧυΛ࢖༻͍ͯ͠Δ΋ͷɼͱ͘ʹ ModelɼContainerɼFacadeɼ
    MySQLConnector, RedisConnector पΓΛॏ఺తʹ Proxy ΛؒʹڬΉΑ͏ʹஔ͖׵
    ͑ɻ
    - ஔ͖׵͑ͨ΋ͷΛϓϦϑΟοΫεͰʮSafetyʯͱ͚ͭͯɼcon
    fi
    g/app.php ͳͲΛ
    ॻ͖׵͑Δɻྫ͑͹ɼContainer Ͱ͋Ε͹ SafetyContainerɼFacade Ͱ͋Ε͹
    SafetyFacade ͷΑ͏ʹϦϓϨΠε͍ͯͬͨ͠ɻ
    - ղܾ͢ΔͨΊʹ Laravel ͷԞ஍·Ͱߦ͖·ͨ͠…ɻ

    View Slide

  31. ࠓ͸ϦΫΤετ͕ೖΕସΘΔ

    ࣄ৅͕ͳ͘ͳΓ·ͨ͠

    View Slide

  32. ͦͷޙ…

    Laravel Octane ͕ൃද͞Ε·ͨ͠

    View Slide


  33. View Slide

  34. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide