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

非同期処理を使った応答性能改善 AWS Lambda

非同期処理を使った応答性能改善 AWS Lambda

AWS Lambda,SQS,Dynamodb を利用し、応答性能をお手軽に改善する一つの案の提示ができればと思っています。

Hyuga-Tsukui

August 03, 2022
Tweet

More Decks by Hyuga-Tsukui

Other Decks in Programming

Transcript

  1. ඇಉظॲཧΛ࢖ͬͨԠ౴ੑೳ
    վળ
    ServerlessLTॳ৺ऀ޲͚ LTେձ #24

    View Slide

  2. ࣗݾ঺հ
    • Hyuga Tsukuiʢ@hy_twenʣ


    • γΣϧϑΟʔʢגʣͰݐઃۀք޲͚SaaSΛ։ൃ͍ͯ͠·͢


    • ࣾ֎LTॳ௅ઓͰ͢👋

    View Slide

  3. ࠓ೔఻͍͑ͨ͜ͱ
    • ೔ৗ͔Βݟ͑Δඇಉظॲཧͱ͸ʁ


    • ඇಉظॲཧͷ࢖͍ॴ


    • ߴίετͳॲཧͷऔΓѻ͍ͱγϯϓϧͳղܾࡦͷ঺հ

    View Slide

  4. ඇಉظॲཧͱ͸
    • ޙͰ݁ՌΛฦ͢͜ͱΛ໿ଋ͠ɺҰ౓ॲཧΛ׬ྃͤ͞Δɻ݁Ռ͕༻ҙͰ
    ͖ͨΒݺͼग़͠ݩʹ͋ΒͨΊͯ݁ՌΛ௨஌͢Δ࢓૊Έͷ͜ͱʢࢀߟ
    https://www.htmlhi
    fi
    ve.com ඇಉظॲཧͱPromiseΛഎܠ͔Βཧղ͠Α͏ʣ

    View Slide

  5. ͋Δ೔ͷ͓ങ͍෺Λߟ͑ͯΈ·͢
    • εʔύʔซઃͷༀہͰɺॲํᝦ͔ΒༀΛ࡞ͬͯ΋Β͏ʢλεΫAʣ


    • ͖ΐ͏ͷ൩͝͸Μͷ৯ࡐΛങ͏ʢλεΫBʣ

    View Slide

  6. ಉظॲཧVer.
    ॲํᝦड෇
    ௐࡎʢNJOʣ
    ଴ػʢNJOʣ
    ௐࡎ׬ྃ
    ങ͍෺ NJO

    View Slide

  7. ඇಉظॲཧVer.
    ॲํᝦड෇
    ௐࡎʢNJOʣ
    ങ͍෺ NJO

    ௐࡎ׬ྃ
    ड෇൪߸ൃߦ

    View Slide

  8. ྆ऀͷҧ͍
    • ಉظVer.͸ௐࡎ͕ऴΘͬͨΒങ͍෺Λ։࢝͢Δ


    • ඇಉظVer.͸ௐࡎதʹങ͍෺Λ։࢝͢Δ

    View Slide

  9. ಉظॲཧVer.
    ॲํᝦड෇
    ௐࡎʢNJOʣ
    ଴ػʢNJOʣ
    ௐࡎ׬ྃ
    ങ͍෺ NJO

    Ұ࿈ͷॲཧ͕׬ྃ͢Δ·ͰNJO͔͔Δ

    View Slide

  10. ඇಉظॲཧVer.
    ॲํᝦड෇
    ௐࡎʢNJOʣ
    ങ͍෺ NJO

    ௐࡎ׬ྃ
    ड෇൪߸ൃߦ
    Ұ࿈ͷॲཧ͕׬ྃ͢Δ·ͰNJO͔͔Δ

    View Slide

  11. ௐࡎΛຊ౰ʹ଴ͭඞཁ͕͋Δ͔ʁ

    View Slide

  12. ड෇൪߸(PromiseʣͳͲͰඇಉظతʹ
    ॲཧͰ͖Δ

    View Slide

  13. ඇಉظॲཧΛݕ౼͢ΔMotivation
    • λεΫͷ׬ྃΛ଴ͭඞཁ͕ແ͍ͱ͖


    • Ұ࿈ͷλεΫͷྲྀΕʢ͋Δ೔ͷ͓ങ͍෺ʣͷதͰɺϘτϧωοΫͱͳ
    ΔΑ͏ͳλεΫ͕͋Δ࣌

    View Slide

  14. γεςϜͷ࿩

    View Slide

  15. ϦΞϧͳͷߟ͑·ͨ͠ʂ

    View Slide

  16. ͋ΔIOTػثͷར༻։࢝αʔϏεΛߟ͑Δ
    • ػث͸ࡏݿ؅ཧDBͰͲͷސ٬͕ར༻͢Δ͔؅ཧ͍ͯ͠Δ


    • ػث͕ωοτϫʔΫΛར༻͢Δʹ͸ɺػثఏڙϕϯμͷAPI΁ϓϩϏ
    δϣχϯάਃ੥Λ͢Δඞཁ͕͋Δ


    • ϓϩϏδϣχϯάਃ੥׬ྃʹ͸਺෼Λཁ͢Δ


    • ࣦഊ͢ΔՄೳੑ΋͋Δ

    View Slide

  17. ུਤ

    View Slide

  18. λεΫΛ෼͚ͯΈΔͱ
    • ػثࡏݿʹؔ͢ΔॲཧͱɺϓϩϏδϣχϯάΛ͢Δॲཧ͸෼͚Εͦ͏


    • ϓϩϏδϣχϯάॲཧ͸͕͔͔࣌ؒΔͷͰɺλεΫΛ෼͚ͳ͍ͱɺԠ
    ౴ੑ͕͜͜ʹӨڹΛड͚ͯѱ͘ͳΔ


    • ࣦഊͨ͠ͱ͖ʹϓϩϏδϣχϯά͔Β͚ͩ΍Γ௚ͤͦ͏

    View Slide

  19. ඇಉظॲཧΛݕ౼͢ΔMotivation
    • λεΫͷ׬ྃΛ଴ͭඞཁ͕ແ͍ͱ͖


    • Ұ࿈ͷλεΫͷྲྀΕʢ͋Δ೔ͷ͓ങ͍෺ʣͷதͰɺϘτϧωοΫͱͳ
    ΔΑ͏ͳλεΫ͕͋Δ࣌

    View Slide

  20. ࠓճखܰʹඇಉظԽ͢Δͷ͸͜͜ʂ

    View Slide

  21. ͍͟ɺServerless΁ʂ

    View Slide

  22. ࠷ऴߏ੒ਤ

    View Slide

  23. ࠷ऴߏ੒ਤ
    ͜͜

    View Slide

  24. AWS SimpleQueueService(SQS)
    • AWS͕ఏڙ͢ΔServerlessͳϝοηʔδΩϡʔΠϯάαʔϏεͰ༷ʑ
    ͳServerlessͰߏ੒͞ΕͨΞϓϦΛ౷߹Ͱ͖Δ


    • Lambdaͱͷ࿈ܞ͕༰қ


    • ϦτϥΠ΍ɺࣦഊͨ͠ϝοηʔδͷอଘ͕Մೳ


    • ඇৗʹߴ଎ʢඪ४ΩϡʔͳΒࣄ্࣮ແ੍ݶ

    View Slide

  25. AWS SimpleQueueService(SQS)
    ͜Μͳײ͡ʹɺൺֱతॊೈͳϝοηʔδΛऔΓѻ͑·͢ɻ(256kb·ͰͷςΩετ)
    ྫͱͯ͠ɺࠓճͷϓϩϏδϣχϯάAPIʹඞཁͦ͏ͳ஋Λઃఆͯ͠Έ·͠ΐ͏ɻ
    {
    “eventId”: “7885ca34-f3ff-4575-b062-da50e9ae746a”,
    “macAddress”: “00-00-5E-10-00-00-00-00“ // document༻ʹ͋Δར༻Մೳͳ஋Ͱ͢
    }

    View Slide

  26. AWS SimpleQueueService(SQS)
    ·ͨࠓճཁ݅ͱͯ͠ɺ֎෦APIͷࣦഊՄೳੑ͕͋ΔͷͰɺDeadLetterQueueͷઃఆ΋ΦεεϝͰ͢ɻ
    Πϝʔδͱͯ͠͸ɺࣦഊͨ͠ϝοηʔδΛࣗಈͰҰ࣌తʹผͷQueue΁֨ೲ͠ɺܾΊΒΕͨϧʔϧͰ࠶PushʢReDriveʣ͠·͢ɻ
    ·ͨࢦఆͷճ਺࣮ߦͯ͠΋ফԽͰ͖ͳ͔ͬͨ৔߹͸ɺDeadLetterQueue΁อଘ͞Εɺࢦఆظؒܦաޙ࡟আ͞Ε·͢ɻ

    View Slide

  27. ࠷ऴߏ੒ਤ
    ͜͜

    View Slide

  28. AWS Lambda
    • AWS͕ఏڙ͢ΔServerlessͷίϯϐϡʔςΟϯάϦιʔε


    • ๛෋ͳରԠݴޠɺϥϯλΠϜΛ࣋ͭͷͰϏδωεϩδοΫͷ࣮૷ίε
    τ͕௿


    • ࣮ߦ࣌ؒͰͷ՝ۚͷͨΊɺॲཧʹΑͬͯ͸௿ίετ


    • ߴεέʔϥϏϦςΟ


    • ࠓճͰ͍͏ͱSQSͱͷ૬ੑ͕ൈ܈ͰɺࣗલͰϙʔϦϯάج൫Λ࣋ͭ

    View Slide

  29. AWS Lambda
    Lambda͸ଟ͘ͷىಈτϦΨʔΠϕϯτΛ͍࣋ͬͯΔͷͰɺSQSʹϝοηʔδ͕PUT͞ΕͨͷΛܖػʹɺىಈ͢ΔͳͲ͕ઃఆҰͭͰߦ͑
    ·͢ɻ

    View Slide

  30. ࠓճߏ੒ͷ஫ҙ఺
    ɾSQSʹඪ४ΩϡʔΛࢦఆͨ͠৔߹ɺat least once ͷ࢓༷ʹΑΓɺಉ͡ϝοηʔδ͕ෳ਺PULL͞ΕΔՄೳੑ͕͋Γ·͢ɻ
    {
    “eventId”: “7885ca34-f3ff-4575-b062-da50e9ae746a”,
    “macAddress”: “00-00-5E-10-00-00-00-00“ // document༻ʹ͋Δར༻Մೳͳ஋Ͱ͢
    }
    👆͜ͷϝοηʔδ͕ೋճPULL͞ΕΔͷͰɺಉ͡macAddressΛॲཧ͢ΔLambda͕ෳ਺ճ࣮ߦ͞ΕΔՄೳੑ͕͋Δɻ

    View Slide

  31. ࠓճߏ੒ͷ஫ҙ఺
    ɾͦͷͨΊɺႈ౳ੑ֬อ·ͨ͸ɺϩοΫػߏΛඞ࣮ͣ૷͢Δඞཁ͕͋Γ·͢ɻ
    EX. DynamoDBΛར༻ָͨ͠؍Lockʢٙࣅίʔυʣ
    status = dynamoDB.GetItem(eventId=1)
    if (status === 0) {
    api.call(macAddress);
    }else {
    return
    }

    View Slide

  32. ͋Δ͔΋͠Εͳ͍ٙ໰఺

    View Slide

  33. ͋Δ͔΋͠Εͳ͍ٙ໰఺
    Q1. Lambda΋ࣗಈϦτϥΠ͋Δ͡ΌΜɺͳΜͰSQS?
    A1. ͦͷͱ͓ΓͰ͕͢ɺ࠷ऴతʹ࣮ߦͰ͖ͳ͔ͬͨevent͕SQSͷ΄͏͕௥͍΍͍ͨ͢ΊͰ͢ɻLambdaͰ΋ࣦഊͨ͠eventΛ
    DeadLetterQueueʹஷΊ͓ͯ͘ߏ੒͸͋ΔΑ͏Ͱ͢ɻ
    Q2. ͳΜͰDynamoDBʁRDSͰ͸ବ໨ͳͷ͔
    A1. LambdaͱRDSͷ૬ੑ͸ྑ͘ͳ͍ͱ͢Δͷ͕ҰൠతͰ͢ɻཧ༝͸ɺRDS͸ࣄ্࣮εέʔϧΞοϓͰͷରԠ͔͠Ͱ͖ͳ͍ͨΊݶք͕ۙ
    ͍Ͱ͕͢ɺLambda͸ແ੍ݶͷεέʔϧΞ΢τͳͷͰɺ͜͜ͰRDS͕ϘτϧωοΫʹͳΔͨΊͰ͢ɻ
    ίωΫγϣϯϓʔϧͷ໰୊౳͸Amazon RDS ProxyͳͲΛར༻͢Δ͜ͱͰଧ։Ͱ͖Δ͔΋͠Ε·ͤΜʢ΍ͬͨ͜ͱͳ͍Ͱ͢ɻ

    View Slide

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

    View Slide