$30 off During Our Annual Pro Sale. View Details »

入出金ドメインの苦労話と解決へのアプローチ/funds in/out difficulties and solutions

convto
April 18, 2022

入出金ドメインの苦労話と解決へのアプローチ/funds in/out difficulties and solutions

Kyash TechTalk #2 - Serversideのシステム構成とアーキテクチャ にて発表した資料です。
https://kyash.connpass.com/event/244819/

Kyashでは入出金にまつわる様々な困難なポイントがあり、それをどのようなアプローチで対策したか紹介します。

以下スライド内リンクです

P38:
- https://github.com/golang/go/issues/5597

convto

April 18, 2022
Tweet

More Decks by convto

Other Decks in Technology

Transcript

  1. ೖग़ۚυϝΠϯͷۤ࿑࿩ͱɹ
    ղܾ΁ͷΞϓϩʔν
    Kyash TechTalk #2 ServersideͷγεςϜߏ੒ͱΞʔΩςΫνϟ
    2022-04-18
    @convto

    View Slide

  2. Ԟଜ ༏࠸ (@convto)
    KyashͰ͸ओʹೖग़ۚʹ·ͭΘΔۀ
    ຿Λ୲౰ͯ͠·ͨ͠
    ϨΠϠ௿Ίͷٕज़΍҉߸ٕज़ʹڵຯ
    ͋Γ·͢

    View Slide

  3. ͸͡Ίʹ
    • Kyash͸͍Ζ͍Ζͳ֎෦ఏܞઌͱ઀ଓͯ͠·͢ʂ
    • ೖۚʹߜͬͯ΋ΫϨΧ/ۜߦ/ίϯϏχATM/payeasy/etc…
    • ໘ന࿩͕ͨ͘͞Μ͋Δ
    • ఏܞઌͱKyashͰͷ੔߹ੑͷ୲อͷߟྀͱ͔
    • ϕϯμ͕࢖ͬͯΔݴޠ/FWʹΑͬͯ͸҉߸पΓͷॲཧͰGoͱ৯͍߹Θ͕ͤѱ͍
    έʔε͕͋ͬͨΓͱ͔
    • ఏܞઌͷ࢓༷ʹΊͪΌΊͪΌڧ੍͍໿͕͋Δͱ͔

    View Slide

  4. ͸͡Ίʹ
    • Kyash͸͍Ζ͍Ζͳ֎෦ఏܞઌͱ઀ଓͯ͠·͢ʂ
    • ೖۚʹߜͬͯ΋ΫϨΧ/ۜߦ/ίϯϏχATM/payeasy/etc…
    • ໘ന࿩͕ͨ͘͞Μ͋Δ
    • ఏܞઌͱKyashͰͷ੔߹ੑͷ୲อͷߟྀͱ͔
    • ϕϯμ͕࢖ͬͯΔݴޠ/FWʹΑͬͯ͸҉߸पΓͷॲཧͰGoͱ৯͍߹Θ͕ͤѱ͍
    έʔε͕͋ͬͨΓͱ͔
    • ఏܞઌͷ࢓༷ʹΊͪΌΊͪΌڧ੍͍໿͕͋Δͱ͔

    View Slide

  5. ಥવͰ͕͢͜͜Ͱ໰୊Ͱ͢

    View Slide

  6. ΄͛΄͛ۜߦͱ
    ৽ن઀ଓ
    • ೖۚιʔεͱͯ͠৽͍ۜ͠ߦ
    ͱ઀ଓ͠·͢
    • ۜߦͱܖ໿ͯ͠࢓༷ॻΛ΋Β
    ͬͨΒҎԼͷهࡌ͕
    • ʮ౰ߦ΁ͷHTTPϦΫΤετͷ
    ಉ࣌઀ଓ਺্ݶ͸1ʯ

    View Slide

  7. ΄͛΄͛ۜߦͱ
    ৽ن઀ଓ
    • ೖۚιʔεͱͯ͠৽͍ۜ͠ߦ
    ͱ઀ଓ͠·͢
    • ۜߦͱܖ໿ͯ͠࢓༷ॻΛ΋Β
    ͬͨΒҎԼͷهࡌ͕
    • ʮ౰ߦ΁ͷHTTPϦΫΤετͷ
    ಉ࣌઀ଓ਺্ݶ͸1ʯ
    γʔέϯγϟϧʹϦΫΤετʁ

    View Slide

  8. ΄͛΄͛ۜߦͱ
    ৽ن઀ଓ
    • ೖۚιʔεͱͯ͠৽͍ۜ͠ߦ
    ͱ઀ଓ͠·͢
    • ۜߦͱܖ໿ͯ͠࢓༷ॻΛ΋Β
    ͬͨΒҎԼͷهࡌ͕
    • ʮ౰ߦ΁ͷHTTPϦΫΤετͷ
    ಉ࣌઀ଓ਺্ݶ͸1ʯ
    ૉ๿ʹ΍Δͱ෩଎௓Ͷͨ
    ͱ͖ʹ଺ཹ͠ͳ͍͔
    γʔέϯγϟϧʹϦΫΤετʁ

    View Slide

  9. ΄͛΄͛ۜߦͱ
    ৽ن઀ଓ
    • ೖۚιʔεͱͯ͠৽͍ۜ͠ߦ
    ͱ઀ଓ͠·͢
    • ۜߦͱܖ໿ͯ͠࢓༷ॻΛ΋Β
    ͬͨΒҎԼͷهࡌ͕
    • ʮ౰ߦ΁ͷHTTPϦΫΤετͷ
    ಉ࣌઀ଓ਺্ݶ͸1ʯ
    ૉ๿ʹ΍Δͱ෩଎௓Ͷͨ
    ͱ͖ʹ଺ཹ͠ͳ͍͔
    γʔέϯγϟϧʹϦΫΤετʁ
    Ͳ͏͍͏࢓૊ΈͰ࣮ݱ͢Δʁ
    Ωϡʔʁlock֫ಘʁPros/Cons͸ʁ

    View Slide

  10. ͜Μͳͱ͖KyashͳΒͲ͏͢Δʁ

    View Slide

  11. ͱ͍͏ͷ͕ؾʹͳΔํ͸
    ͥͻ࠷ޙ·Ͱฉ͍ͯͶ

    View Slide

  12. ͱ͍͏ͷ͕ؾʹͳΔํ͸
    ͥͻ࠷ޙ·Ͱฉ͍ͯͶ
    ͱΓ͋͑ͣ͏͓ʙʙͱ͸ͳΔ

    View Slide

  13. Contents
    1. ֎෦ϕϯμͱͷ੔߹ੑͷ୲อʹ͍ͭͯ
    • ੔߹ੑ͕ζϨΔύλʔϯͷ঺հ
    • ੔߹ੑΛ߹ΘͤΔͨΊͷ౒ྗ
    2. ҉߸·ΘΓͷ͋Ε͜Ε
    • ϨΨγʔͳ҉߸ํ͕ࣜGoͰར༻Ͱ͖ͳ͍৔߹
    • ҉߸पΓͷ࢓༷ͰؾΛ͚ͭΔ఺
    3. ࢓༷ʹڧ੍͍໿͕͋Δ৔߹
    • ಉ࣌઀ଓ਺1
    4.Kyashͷಛҟੑͱ໘ന͞

    View Slide

  14. ֎෦ͱͷ੔߹ੑͷ୲อʹ͍ͭͯ

    View Slide

  15. ͦ΋ͦ΋֎෦ͱͷ੔߹ੑͬͯζϨΔΜͰ͔͢ʁ
    • ඇৗʹ࢒೦ͳ͜ͱʹζϨ·͢
    • ͍͔ͭ͘ζϨΔύλʔϯΛ঺հ͠·͢
    • ͦͷ্ͰͲͷΑ͏ʹରԠͯ͠Δ͔঺հ͠·͢

    View Slide

  16. ϕϯμ͕timeout
    ͢Δύλʔϯ
    • ωοτϫʔΫ͕ෆ҆ఆͩ
    ͬͨΓ͢Δͱൃੜ͠͏Δ

    View Slide

  17. ϕϯμ͕timeout
    ͢Δύλʔϯ
    • ωοτϫʔΫ͕ෆ҆ఆͩ
    ͬͨΓ͢Δͱൃੜ͠͏Δ
    νϟʔδґཔ

    View Slide

  18. ϕϯμ͕timeout
    ͢Δύλʔϯ
    • ωοτϫʔΫ͕ෆ҆ఆͩ
    ͬͨΓ͢Δͱൃੜ͠͏Δ
    νϟʔδґཔ
    νϟʔδֹۚΛ
    Ϣʔβʔޱ࠲͔Βݮࢉ

    View Slide

  19. ϕϯμ͕timeout
    ͢Δύλʔϯ
    • ωοτϫʔΫ͕ෆ҆ఆͩ
    ͬͨΓ͢Δͱൃੜ͠͏Δ
    νϟʔδґཔ
    νϟʔδֹۚΛ
    Ϣʔβʔޱ࠲͔Βݮࢉ
    ௨ৗ͸Ϩεϙϯε͕ฦͬͯ͘Δ͕…

    View Slide

  20. ϕϯμ͕timeout
    ͢Δύλʔϯ
    • ωοτϫʔΫ͕ෆ҆ఆͩ
    ͬͨΓ͢Δͱൃੜ͠͏Δ
    νϟʔδґཔ
    νϟʔδֹۚΛ
    Ϣʔβʔޱ࠲͔Βݮࢉ
    Ϩεϙϯε͕timeoutͨ͠ΒͲ͏ͳΔʁ

    View Slide

  21. ϕϯμ͕timeout
    ͢Δύλʔϯ
    • ωοτϫʔΫ͕ෆ҆ఆͩ
    ͬͨΓ͢Δͱൃੜ͠͏Δ
    νϟʔδґཔ
    νϟʔδֹۚΛ
    Ϣʔβʔޱ࠲͔Βݮࢉ
    ͳΜ͔݁Ռؼͬͯ͜ͳ͔ͬͨͳ…
    ੒ޭͯ͠Δ͔Θ͔ΒΜͷͰ
    ͔ͬͯʹ࢒ߴ૿΍ͤͳ͍ͳ...
    Ϩεϙϯε͕timeoutͨ͠ΒͲ͏ͳΔʁ

    View Slide

  22. ϕϯμ͕timeout
    ͢Δύλʔϯ
    • ωοτϫʔΫ͕ෆ҆ఆͩ
    ͬͨΓ͢Δͱൃੜ͠͏Δ
    • Ҿ͖མͱ͞ΕͨͷʹKyash
    ʹνϟʔδ͞Εͯͳ͍Μ
    ͚ͩͲʂ͕͋Γ͑Δ
    νϟʔδґཔ
    νϟʔδֹۚΛ
    Ϣʔβʔޱ࠲͔Βݮࢉ
    Ϩεϙϯε͕timeoutͨ͠ΒͲ͏ͳΔʁ
    ͳΜ͔݁Ռؼͬͯ͜ͳ͔ͬͨͳ…
    ੒ޭͯ͠Δ͔Θ͔ΒΜͷͰ
    ͔ͬͯʹ࢒ߴ૿΍ͤͳ͍ͳ...

    View Slide

  23. ίϯϙʔωϯτ
    ͕ଟ͍ͱ͞Βʹ
    ΍΍͍͜͠
    • ͨͱ͑͹ATMͰͷೖۚͩͱϢʔ
    βͷૢ࡞୺຤ͱͯ͠ͷATMͱɺ
    ΋͏ͻͱͭॲཧηϯλΈ͍ͨͳ
    ֓೦͕͋Δ
    • ΋ͷ͕૿͑Δͱ۠ؒͷ਺͚ͩյ
    ΕͨΒͲ͏ͳΔ͔ߟྀ͕ඞཁ
    ※؆ུԽͨ͠Πϝʔδ

    View Slide

  24. Α͏͸͜Εͬͯ෼ࢄtransaction͡ΌΜ
    • ͳΔ΄ͲͦΕ͸೉͍͠
    • ͔͠΋΋ͱ΋ͱผͷαʔϏεͳͷͰ෼ࢄΛආ͚Δ͜ͱ͕Ͱ͖ͳ͍
    • Ͱ΋ɺٯʹݴ͏ͱ෼ࢄtransactionจ຺ͷΞϓϩʔν͕࢖͑ΔͷͰ͸ʁ
    • ͱ͓΋͍ͬͯͨ࣌୅͕΅͘ʹ΋͋Γ·ͨ͠
    • 2PCͱ͔͸جຊతʹϕϯμ͕αϙʔτͯ͠ͳ͍(͍Ζ͍Ζͳߟྀ͕͋Γ2PCࣗମ৻ॏͳݕ౼
    ͕ඞཁ͚ͩͲɺͦ΋ͦ΋બ୒ࢶʹͳ͍)
    • sagaύλʔϯΈ͍ͨͳ໰୊͋ͬͨΒิঈtransactionͰ݁Ռ੔߹ΛͱΔΞϓϩʔν΋ɺۜߦ
    ͸͍͍ͩͨ transactionͷଧফAPI͕ͳ͍ ͷͰબ΂ͳ͍

    View Slide

  25. ͲΜͳͱ͖Ͱ΋ۚ༥ػؔͷঢ়ଶΛਖ਼ͱͯ͠ѻ͏
    • ۚ༥ػؔͷAPI͸੔߹ੑΛ୲อ͢ΔͨΊͷओಋݖΛͪ͜ΒͰ࣋ͭ͜ͱ
    ͕೉͍͠(৔߹͕ଟ͍)
    • ͞·͟·ͳखஈͰऔҾ৘ใΛরձ͠ɺऔಘͰ͖ͨऔҾ৘ใʹঢ়ଶΛ߹
    ΘͤΔ͜ͱͰ݁Ռ੔߹ੑΛ୲อ

    View Slide

  26. ύλʔϯͦͷ1
    timeoutͨ͠Β
    ඇಉظʹরձ
    • timeoutൃੜ࣌ʹඇಉظͰ͢Έ΍͔ʹऔ
    ҾরձΛґཔ͢Δ
    • ۚ༥ػؔʹΑͬͯऔҾরձ·ͰʹNඵ·
    ͬͯͶʂͳͲࡉ͔͍৚͕݅ҟͳΔ
    νϟʔδґཔ
    timeout
    ඇಉظΩϡʔ

    View Slide

  27. ύλʔϯͦͷ1
    timeoutͨ͠Β
    ඇಉظʹরձ
    • timeoutൃੜ࣌ʹඇಉظͰ͢Έ΍͔ʹऔ
    ҾরձΛґཔ͢Δ
    • ۚ༥ػؔʹΑͬͯऔҾরձ·ͰʹNඵ·
    ͬͯͶʂͳͲࡉ͔͍৚͕݅ҟͳΔ
    νϟʔδґཔ
    timeout
    ඇಉظΩϡʔ
    রձϝοηʔδΛenqueue

    View Slide

  28. ύλʔϯͦͷ1
    timeoutͨ͠Β
    ඇಉظʹরձ
    • timeoutൃੜ࣌ʹඇಉظͰ͢Έ΍͔ʹऔ
    ҾরձΛґཔ͢Δ
    • ۚ༥ػؔʹΑͬͯऔҾরձ·ͰʹNඵ·
    ͬͯͶʂͳͲࡉ͔͍৚͕݅ҟͳΔ
    νϟʔδґཔ
    timeout
    ඇಉظΩϡʔ
    রձϝοηʔδΛenqueue
    dequeueͯ͠ඇಉظʹরձ

    View Slide

  29. ύλʔϯͦͷ1
    timeoutͨ͠Β
    ඇಉظʹরձ
    • timeoutൃੜ࣌ʹඇಉظͰ͢Έ΍͔ʹऔ
    ҾরձΛґཔ͢Δ
    • ۚ༥ػؔʹΑͬͯऔҾরձ·ͰʹNඵ·
    ͬͯͶʂͳͲࡉ͔͍৚͕݅ҟͳΔ
    νϟʔδґཔ
    timeout
    ඇಉظΩϡʔ
    রձϝοηʔδΛenqueue
    औҾরձ
    (ႈ౳ੑ͕͋Δ৔߹͸࠶νϟʔδ)
    To be continued …
    dequeueͯ͠ඇಉظʹরձ

    View Slide

  30. ύλʔϯͦͷ1
    timeoutͨ͠Β
    ඇಉظʹরձ
    • timeoutൃੜ࣌ʹඇಉظͰ͢Έ΍͔ʹऔҾ
    রձΛґཔ͢Δ
    • ۚ༥ػؔʹΑͬͯऔҾরձ·ͰʹNඵ·ͬ
    ͯͶʂͳͲࡉ͔͍৚͕݅ҟͳΔ
    • ͜ͷऔҾরձͰtimeout͢Δ͜ͱ΋͋Δ
    • ͳΜͲ͔ϦτϥΠ͢Δ͕ɺۚ༥ػ͕ؔ௕࣌
    ؒαʔϏεμ΢ϯͳͲͷ৔߹͸෮چෆՄ
    νϟʔδґཔ
    timeout
    ඇಉظΩϡʔ
    রձϝοηʔδΛenqueue
    औҾরձ
    (ႈ౳ੑ͕͋Δ৔߹͸࠶νϟʔδ)
    timeout
    dequeueͯ͠ඇಉظʹরձ

    View Slide

  31. ύλʔϯ2
    ޙ೔·ͱΊͯ
    ಥ߹
    • औҾࢀরͰղܾ͠ͳ͍ෆ
    ੔߹͕͋ͬͨͱͯ͠΋ຖ೔
    ಥ߹ͯ͠Ε͹ݕ஌Ͱ͖Δ
    • ͜ͷ͜ͱΛϦίϯαΠϧͱ
    ͍ͬͨΓ͠·͢
    νϟʔδґཔ
    timeout

    View Slide

  32. ύλʔϯ2
    ޙ೔·ͱΊͯ
    ಥ߹
    • औҾࢀরͰղܾ͠ͳ͍ෆ
    ੔߹͕͋ͬͨͱͯ͠΋ຖ೔
    ಥ߹ͯ͠Ε͹ݕ஌Ͱ͖Δ
    • ͜ͷ͜ͱΛϦίϯαΠϧͱ
    ͍ͬͨΓ͠·͢
    νϟʔδґཔ
    timeout
    ɾɾɾ
    YYYY/MM/DDͷऔҾશ෦ڭ͑ͯ

    View Slide

  33. ύλʔϯ2
    ޙ೔·ͱΊͯ
    ಥ߹
    • औҾࢀরͰղܾ͠ͳ͍ෆ
    ੔߹͕͋ͬͨͱͯ͠΋ຖ೔
    ಥ߹ͯ͠Ε͹ݕ஌Ͱ͖Δ
    • ͜ͷ͜ͱΛϦίϯαΠϧͱ
    ͍ͬͨΓ͠·͢
    νϟʔδґཔ
    timeout
    ɾɾɾ
    YYYY/MM/DDͷऔҾશ෦ڭ͑ͯ
    ͜Ε΍Ͱ

    View Slide

  34. ύλʔϯ2
    ޙ೔·ͱΊͯ
    ಥ߹
    • औҾࢀরͰղܾ͠ͳ͍ෆ
    ੔߹͕͋ͬͨͱͯ͠΋ຖ೔
    ಥ߹ͯ͠Ε͹ݕ஌Ͱ͖Δ
    • ͜ͷ͜ͱΛϦίϯαΠϧͱ
    ͍ͬͨΓ͠·͢
    νϟʔδґཔ
    timeout
    ɾɾɾ
    YYYY/MM/DDͷऔҾશ෦ڭ͑ͯ
    ͜Ε΍Ͱ
    ,ZBTI͕೺Ѳͯ͠ΔऔҾ
    ৘ใͱಥ߹Ͱ͖Δ

    View Slide

  35. ֎෦ͱͷ੔߹ੑͷ୲อ·ͱΊ
    • ੔߹ੑ͕ζϨΔύλʔϯ͸ී௨ʹ͋Δ
    • ֎෦APIͷ੍໿্ɺڧ͍Ұ؏ੑΛ୲อ͢Δͷ͸೉͍͠
    • ۚ༥ػؔͷऔҾ৘ใΛਖ਼ͱͯ͠ঢ়ଶΛ߹Θͤͯ݁Ռ੔߹ੑΛอূ͢Δ
    • ݁Ռෆఆ࣌ʹ͢Έ΍͔ʹऔҾࢀর
    • औҾࢀরͰ෮چͰ͖ͳ͚Ε͹ϦίϯαΠϧͰݕ஌

    View Slide

  36. ҉߸ͷ͋Ε͜Ε

    View Slide

  37. લఏ: GoͰ͸جຊతʹ҆શͳ҉߸ͷΈαϙʔτ
    • GoͷඇৗʹΑ͍ੑ࣭ͱͯ͠ɺ҆શͰͳ͔ͬͨΓRFC্ඇਪ঑ͳ҉߸/
    ϋογϡͷ૊Έ߹Θͤ͸ඪ४/४ඪ४ͷػೳͱͯ͠جຊతʹఏڙ͞Ε
    ·ͤΜ
    • ҉߸ͷઐ໳ՈͰͳͯ͘΋બ୒ࢶʹ͸Ұఆ҆શͳ҉߸͔͠ͳ͍ͷͰ͋Δ
    ఔ౓҆৺Ͱ͖Δ

    View Slide

  38. ͦ͏͍͏ํ਑͕
    Α͘Έ͑Δissue
    https://github.com/golang/go/issues/5597
    • ECBαϙʔτΛஅ͍ͬͯΔ
    issue
    • ҙਤతʹআ֎ͯ͠ΔͰɺ҆
    શ͡Όͳ͍͠ɺඞཁͳΒࣗ
    ෼Ͱॻ͚Δ΍Ζͱͷճ౴

    View Slide

  39. ϕϯμ͕GoͰ࢖͑ͳ͍҉߸Λཁٻ͖ͯͨ͠ͱ͖
    • ੝Γ͕͖͋ͬͯ·ͨ͠Ͷ
    • ΄΅΄΅ͳ͍͚Ͳɺͨ·ʙʙʙʙʹ໰୊ʹͳΔ
    • ͜͏͍͏ࣄ͕ى͖Δഎܠ
    • ͦ΋ͦ΋ۚ༥ػؔͱ͔͸ྺ࢙͋ΔαʔϏεͳ৔߹͕ଟ͍(ੲ͸҆શͩͬͨ
    ܥ)
    • ϕϯμଆ͕৽ن։ൃͰ΋ɺར༻ͯ͠Δݴޠ/FW͕ྺ࢙͕ਂͯ͘ޙํޓ׵͕
    खް͍΋ͷͩͬͨΓ͢Δͱ;ͭ͏ʹબ΂ͪΌͬͨΓ͢Δ

    View Slide

  40. • ੝Γ͕͖͋ͬͯ·ͨ͠Ͷ
    • ΄΅΄΅ͳ͍͚Ͳɺͨ·ʙʙʙʙʹ໰୊ʹͳΔ
    • ͜͏͍͏ࣄ͕ى͖Δഎܠ
    • ͦ΋ͦ΋ۚ༥ػؔͱ͔͸ྺ࢙͋ΔαʔϏεͳ৔߹͕ଟ͍(ੲ͸҆શͩͬͨ
    ܥ)
    • ϕϯμଆ͕৽ن։ൃͰ΋ɺར༻ͯ͠Δݴޠ/FW͕ྺ࢙͕ਂͯ͘ޙํޓ׵͕
    खް͍΋ͷͩͬͨΓ͢Δͱ;ͭ͏ʹબ΂ͪΌͬͨΓ͢Δ
    ϕϯμ͕GoͰ࢖͑ͳ͍҉߸Λཁٻ͖ͯͨ͠ͱ͖

    View Slide

  41. جຊ͸ͪΌΜͱ
    ճආ͠·͢
    • ୅ସͷ҉߸͕ఏڙ͞ΕͯͨΒͦͬͪΛબ
    Ϳʂ(͓͓Αͦෳ਺ఏڙͯ͠Δ)
    • ୅ସͷબ୒ࢶ΋ͳ͚Ε͹ඇਪ঑Ͱ͋Δι
    ʔε(RFCͱ͔)Λ఻͑ͯίϛϡχέʔγϣ
    ϯ͢Δ
    • աڈʹGoͰαϙʔτ͞Εͳ͍҉߸ͱϋο
    γϡͷ૊Έ߹Θͤʹ͍ͭͯɺϋογϡΞ
    ϧΰϦζϜΛม͑ͯ΋Βͬͨ͜ͱ΋͋Δ
    Πϝʔδը૾

    View Slide

  42. ͓·͚: PKCS#5 Padding Θ͔ΒΜ͋Δ͋Δ
    • ϒϩοΫ҉߸͸(҉߸ར༻ϞʔυʹΑΔ͕)ೖྗͷbyte਺͕block௕ͷഒ਺ʹͳͬͯΔඞཁ͕͋Γ·͢
    • ͕͔ͪͬͨΒpaddingऔΔඞཁ͋Δ(ྫ: 8byte block Ͱ 20byte ͷೖྗ͖ͨΒpaddingͭΊͯ 24byte ʹ)
    • PKCS#5 Padding ͸DESͷͨΊʹఆٛ͞Εͨ 8byte block ͷpadding (rfc1423#section-1.1)
    • PKCS#7 Padding ͸ͦΕΛ֦ுͯ͠1~255byteͷՄม௕ͳ block size ʹରԠͨ͠΋ͷ (rfc2315#section-10.3)
    • ྺ࢙తͳܦҢͰ͍͔ͭ͘ͷݴޠͰ͸ PKCS5Padding() ͷ࣮૷͕ PKCS#7 Padding ʹͳ͍ͬͯΔΑ͏
    • PKCS#7 ͕ PKCS#5 ͷ࢓༷Λ׬શʹ಺แͯ͠Δ͔Β͜Μͳ͔Μ͡ʹͳͬͨͷ͔ͳʁ΍΍͗͜͢͠Δ
    • ͦͷӨڹͰ࢓༷ॻͰʮAESͰPKCS#5 Paddingͯ͠ͶʯΈ͍ͨͳཁٻ͕͞ΕΔ͜ͱ͕͋Γ·͢
    • ҉߸ΞϧΰϦζϜͷϒϩοΫαΠζͳͲ͔Β൑அ͠Α͏

    View Slide

  43. ࢓༷ʹڧ੍͍໿͕͋Δ৔߹

    View Slide

  44. ΄͛΄͛ۜߦͱ
    ৽ن઀ଓ
    • ೖۚιʔεͱͯ͠৽͍ۜ͠ߦ
    ͱ઀ଓ͠·͢
    • ۜߦͱܖ໿ͯ͠࢓༷ॻΛ΋Β
    ͬͨΒҎԼͷهࡌ͕
    • ʮ౰ߦ΁ͷHTTPϦΫΤετͷ
    ಉ࣌઀ଓ਺্ݶ͸1ʯ

    View Slide

  45. ಉ࣌઀ଓ਺1ΛͲ͏࣮ݱ͢Δ͔
    • ʮ͜ͷ੍໿͕ଥ౰͔ʯʹ͍ͭͯ͸৮Ε·ͤΜɻॆ෼ର࿩ࡁΈͳલఏ
    • ͍͔࣮ͭ͘ݱͷͨΊͷҊ͕͋ΓɺϝϦοτσϝϦοτ͕ҟͳΔ
    • ͦΕͧΕͷҊΛઆ໌͠ɺͲͷΑ͏ͳ͜ͱΛߟ͑ͯબఆ͔ͨ͠঺հ

    View Slide

  46. Ҋ1:
    FIFOΩϡʔΛ
    ࢖࣮ͬͯݱ
    • FIFOΩϡʔΛ࢖ͬͯಉ࣌
    ઀ଓ਺1Λ࣮ݱ͢ΔҊ
    νϟʔδΛλοϓ
    '*'0Ωϡʔ
    DMJFOU

    View Slide

  47. Ҋ1:
    FIFOΩϡʔΛ
    ࢖࣮ͬͯݱ
    • FIFOΩϡʔΛ࢖ͬͯಉ࣌
    ઀ଓ਺1Λ࣮ݱ͢ΔҊ
    νϟʔδΛλοϓ
    '*'0Ωϡʔ
    FIFOΩϡʔʹ٧ΊΔ
    DMJFOU

    View Slide

  48. Ҋ1:
    FIFOΩϡʔΛ
    ࢖࣮ͬͯݱ
    • FIFOΩϡʔΛ࢖ͬͯಉ࣌
    ઀ଓ਺1Λ࣮ݱ͢ΔҊ
    νϟʔδΛλοϓ
    '*'0Ωϡʔ
    FIFOΩϡʔʹ٧ΊΔ
    ݁Ռ໰͍߹ΘͤͷͨΊͷ
    request_idΛฦ٫
    DMJFOU

    View Slide

  49. Ҋ1:
    FIFOΩϡʔΛ
    ࢖࣮ͬͯݱ
    • FIFOΩϡʔΛ࢖ͬͯಉ࣌
    ઀ଓ਺1Λ࣮ݱ͢ΔҊ
    νϟʔδΛλοϓ
    '*'0Ωϡʔ
    FIFOΩϡʔʹ٧ΊΔ
    ݁Ռ໰͍߹ΘͤͷͨΊͷ
    request_idΛฦ٫
    DMJFOU
    ಉ࣌઀ଓ1Λ·΋Γͳ͕Β
    ϦΫΤετ

    View Slide

  50. Ҋ1:
    FIFOΩϡʔΛ
    ࢖࣮ͬͯݱ
    • FIFOΩϡʔΛ࢖ͬͯಉ࣌
    ઀ଓ਺1Λ࣮ݱ͢ΔҊ
    νϟʔδΛλοϓ
    '*'0Ωϡʔ
    FIFOΩϡʔʹ٧ΊΔ
    ݁Ռ໰͍߹ΘͤͷͨΊͷ
    request_idΛฦ٫
    DMJFOU
    ಉ࣌઀ଓ1Λ·΋Γͳ͕Β
    ϦΫΤετ
    ੒ޭ or ࣦഊ
    ݁ՌʹԠͯ͡
    ࢒ߴมಈ

    View Slide

  51. Ҋ1:
    FIFOΩϡʔΛ
    ࢖࣮ͬͯݱ
    • FIFOΩϡʔΛ࢖ͬͯಉ࣌
    ઀ଓ਺1Λ࣮ݱ͢ΔҊ
    νϟʔδΛλοϓ
    '*'0Ωϡʔ
    FIFOΩϡʔʹ٧ΊΔ
    ݁Ռ໰͍߹ΘͤͷͨΊͷ
    request_idΛฦ٫
    DMJFOU
    ɾɾɾ
    ݁Ռ໰͍߹Θͤ
    ੒ޭ or ࣦഊ
    ಉ࣌઀ଓ1Λ·΋Γͳ͕Β
    ϦΫΤετ
    ੒ޭ or ࣦഊ
    ݁ՌʹԠͯ͡
    ࢒ߴมಈ

    View Slide

  52. Ҋ1:
    FIFOΩϡʔΛ
    ࢖࣮ͬͯݱ
    • Pros
    • औҾরձͷΞϓϩʔνʹۙ
    ͘ͳ͡Έ͕͋Δ
    • ϦΫΤετ͕଺ཹͯ͠΋٧
    ·Δͷ͸ΩϡʔͳͷͰserver
    ͷϓϩηε͕ٸ૿͠ͳ͍
    νϟʔδΛλοϓ
    '*'0Ωϡʔ
    FIFOΩϡʔʹ٧ΊΔ
    ݁Ռ໰͍߹ΘͤͷͨΊͷ
    request_idΛฦ٫
    DMJFOU
    ɾɾɾ
    ݁Ռ໰͍߹Θͤ
    ੒ޭ or ࣦഊ
    ಉ࣌઀ଓ1Λ·΋Γͳ͕Β
    ϦΫΤετ
    ੒ޭ or ࣦഊ
    ݁ՌʹԠͯ͡
    ࢒ߴมಈ

    View Slide

  53. Ҋ1:
    FIFOΩϡʔΛ
    ࢖࣮ͬͯݱ
    • Cons
    • ਖ਼ৗܥͷνϟʔδ͕ඇಉظʹͳΔͷ͸ෳࡶ
    • ݱ࣮ʹ͸͔͜͜Βߋʹtimeoutͷߟྀ͕ඞཁ
    • timeout༻ͷऔҾরձͷܦ࿏΋ඇಉظͰ͋ͬ
    ͯɺ͚ͩͲͦΕ΋ϦΫΤετલʹ͸FIFOΩ
    ϡʔʹ٧Ίͳ͍ͱ…ͱͳΔͱ໰୊ൃੜ࣌ʹ
    Ͳ͜ʹ৘ใ͕͋Δ͔௥͍ͮΒ͍
    • ো֐࣌ͷௐࠪ΍ӡ༻͕େมͦ͏
    νϟʔδΛλοϓ
    '*'0Ωϡʔ
    FIFOΩϡʔʹ٧ΊΔ
    ݁Ռ໰͍߹ΘͤͷͨΊͷ
    request_idΛฦ٫
    DMJFOU
    ɾɾɾ
    ݁Ռ໰͍߹Θͤ
    ੒ޭ or ࣦഊ
    ಉ࣌઀ଓ1Λ·΋Γͳ͕Β
    ϦΫΤετ
    timeout
    ݁ՌʹԠͯ͡
    ࢒ߴมಈ

    View Slide

  54. Ҋ2:
    globalͳlockΛ
    ࢖࣮ͬͯݱ
    • ϦΫΤετલʹglobalͳ
    lockΛͱΔ
    • ͦ͏͢ΔͱৗʹͩΕ͔Ұ
    ਓͷΈۚ༥ػؔ΁ϦΫΤ
    ετͰ͖Δ
    νϟʔδґཔ
    DMJFOU
    MPDL֫ಘ
    MPDL։์
    ੒ޭ or ࣦഊ
    νϟʔδґཔ
    ੒ޭ or ࣦഊ

    View Slide

  55. Ҋ2:
    globalͳlockΛ
    ࢖࣮ͬͯݱ
    • Pros
    • ࢓૊Έ͕γϯϓϧ
    • ྲྀΕ͕΄΅ଞͷۚ༥ػؔͱ
    ಉ౳ͳͷͰɺtimeoutͳͲ
    ൃੜͯ͠΋ॲཧ͕௥͍΍͢
    ͍
    νϟʔδґཔ
    DMJFOU
    MPDL֫ಘ
    MPDL։์
    ੒ޭ or ࣦഊ
    νϟʔδґཔ
    ੒ޭ or ࣦഊ

    View Slide

  56. Ҋ2:
    globalͳlockΛ
    ࢖࣮ͬͯݱ
    • Cons
    • lock֫ಘ·ͪͷϓϩηε͕଺ཹ
    ͢ΔڪΕ
    • ଺ཹͨ͠ͱ͖lock֫ಘ͕ฏ౳͡
    Όͳ͍ͱӡѱͣͬ͘ͱॲཧ͞Ε
    ͳ͍Ϣʔβʔ͕ͰΔ͔΋ʁ
    νϟʔδґཔ
    DMJFOU
    MPDL֫ಘ
    MPDL։์
    ੒ޭ or ࣦഊ
    νϟʔδґཔ
    ੒ޭ or ࣦഊ

    View Slide

  57. ҊΛൺֱ͢Δ؍఺
    • FIFOΩϡʔҊ͸ӡ༻ෛՙ͕ߴ͍
    • ͦΕʹରͯ͠global lock͸ӡ༻ෛՙ͸௿͍
    • ͍ͬΆ͏Ͱglobal lockΛબ୒͢ΔͱϦΫΤετ଺ཹ࣌ʹlock֫ಘ·ͪϓϩηε͕૿͑ϝϞϦ
    ࢖༻ྔͳͲ͕ٸ૿͢Δ͔΋
    • ͱ͸͍͑࢒ߴ؅ཧͱ͍͏ੑ্࣭ɺͰ͖Ε͹FIFOΩϡʔͰͳ͘ɺlock֫ಘͷҊͰਖ਼ৗܥ͸ಉظ
    తͳॲཧʹ౗͍ͨ͠
    • global lockͷݒ೦Λ·ͱΊͯɺͦΕΛղܾͰ͖Δ͔ߟ͑ͯΈΔ
    • (ͳ͓੔ཧʹ͸AWSͷ୲౰SAͷํʹ΋͝ڠྗ͍͖ͯͨͩ͠·ͨ͠ʂ͜ͷ৔ͰվΊͯײँΛ)

    View Slide

  58. lock΁ͷݒ೦ͦͷ1: ϨΠςϯγ͕Θ͔Βͳ͍
    • ։ൃஈ֊Ͱ͸ۚ༥ػؔͷҾ͖མͱ࣮͠ߦϨΠςϯγ͕Θ͔Βͳ͍ -> ࣮ࡍʹ଺ཹ͕
    ى͖Δ͔೺Ѳͮ͠Β͍
    • ֘౰ۚ༥ػؔͷνϟʔδ෩଎͸ར༻཰ͳͲ͍Ζ͍ΖؑΈ͓͓ͯΑͦ30req/min ͘
    Β͍ʹͳΓͦ͏
    • ϨΠςϯγ͸Θ͔Βͳ͍͕ɺlockͱΔΞϓϩʔνͰ΋1req 2sec͘Β͍͔͔ͬͯ΋
    ύϯΫ͢Δ͜ͱ͸ͳ͍
    • ௨ৗ΄͔ͷۚ༥ػؔ͸95ύʔηϯλΠϧͰ਺ඦms͔ͩΒɺر๬త؍ଌͩͱ2~4ഒ
    ͘Β͍ʹάϩʔεͯ͠΋͓ͦΒ͘໰୊ͳ͍

    View Slide

  59. lock΁ͷݒ೦ͦͷ2: ϓϩηεͷ଺ཹ
    • ͖ͬ͞ͷࢼࢉͰͬ͘͟Γ଺ཹ͠ͳͦ͞͏ͳ͜ͱ͕Θ͔ͬͨ
    • ͱ͸͍͑༧ظͤ͵spike͸͋Γ͏Δɻͦ͏͍͏ͱ͖͸Ͳ͏͢Δʁ
    • མͪண͍ͯߟ͑Δͱɺlock֫ಘ଴ͪͰҰఆ࣌ؒͨͯ͹ΤϥʔΛฦͯ͠
    Ϣʔβʔʹ࠶ࢼߦΛ͏ͳ͕ͤ͹௕ظؒ଺ཹ͸͠ͳ͍
    • lock֫ಘͰ͖ͯͳ͍ͷͰۚ༥ػؔʹ΋ϦΫΤετͰ͖ͯͳ͍ɻͷͰ҆
    શʹࣦഊʹͰ͖Δ

    View Slide

  60. Ҋ2:
    globalͳlockΛ
    ࢖࣮ͬͯݱ
    • Cons
    • lock֫ಘ·ͪͷϓϩηε͕଺ཹ͢ΔڪΕ
    • ଺ཹͨ͠ͱ͖lock֫ಘ͕ฏ౳͡Όͳ͍ͱ
    ӡѱͣͬ͘ͱॲཧ͞Εͳ͍Ϣʔβʔ͕Ͱ
    Δ͔΋ʁ
    • -> ͓͓Αͦ଺ཹ͠ͳ͍ͩΖ͏ɺ͞Βʹ
    lock֫ಘʹtimeoutΛઃ͚Ε͹ΑΓ҆શʂ
    νϟʔδґཔ
    DMJFOU
    MPDL֫ಘ
    MPDL։์
    ੒ޭ or ࣦഊ
    νϟʔδґཔ
    ੒ޭ or ࣦഊ

    View Slide

  61. ੍໿͕ڧ͍ͱ͖ͷ·ͱΊ
    • Ͳ͏੍໿Λຬ͔ͨ͢ߟ͑Δ
    • ੍໿Λຬͨ͢खஈͷͳ͔ͰPros/ConsΛ·ͱΊΔ
    • Ͳ͏͍͏ॲཧ͕๬·͍͔͠ɺͦΕΛબͿͨΊʹͲ͏͍͏՝୊఺͕͋Δ
    ͔ʹண໨͠ɺͦΕ͕ղফͰ͖Δ͔ߟ͑ͯΈΔ
    • ͱ͖ʹ͸֎෦ͷํͷҙݟ΋ฉ͍ͯΈΔͱ৽͍͠؍఺͕ग़ͯٞ࿦͕ਐల
    ͢Δ͔΋

    View Slide

  62. Kyashͷಛҟੑͱ໘ന͞

    View Slide

  63. ֎෦ఏܞઌͱͷ࿈ܞ͕ଟͯ͘ߟྀ͕ଟ͍ʂ
    • ֎෦ϕϯμͱͷ෼ࢄtransactionͰ੔߹ੑ͕ٻΊΒΕΔ
    • ෼ࢄtransactionࣗମͷ೉͠͞
    • Ξϯίϯτϩʔϥϒϧͳ࢓༷
    • ͲͷΑ͏ͳΞϓϩʔν͕࢖͑Δ͔͸֎෦ϕϯμʹΑͬͯҟͳΔ
    • ਺ଟ͘ͷ੍໿ͱ޲͖߹͏
    • ڧ੍͍໿ͱग़͘Θ͢͜ͱ΋গͳ͘ͳ͍

    View Slide

  64. Ͱ΋໘ന͍ʂ
    • ۚ༥ͱ͍͏฻Β͠ʹ͔ܽͤͳ͍αʔϏεʹܞΘΕΔ
    • ੍໿΍ࠔ೉͞ʹ޲͖߹ͬͯղܾࡦΛݟग़͢ͷ͸໘ന͍
    • ੍໿ͷͳ͔ͰͲͷΑ͏ʹཁ݅Λຬ͔ͨ͢
    • ͦͷͳ͔Ͱ࠷େݶ৴པͰ͖Διϑτ΢ΣΞ࡞ΔͨΊʹ͸Ͳ͏͢Δ͔
    • ͠ΜͲ͍ͱ͖΋͋Δ͚Ͳɺ͋·ΓܦݧͰ͖ͳ͍࢓ࣄ͕ͨ͘͞ΜͰ͖Δ

    View Slide

  65. ͱ͸͍͑՝୊͸ࢁੵΈͩΑ
    • ࠷େݶ౒ྗ͍ͯ͠Δ͚Ͳɺਖ਼௚ख͕଍Γͯͳ͍Ͱ͢
    • ΠέΠέͰυοΧϯυοΧϯΈ͍ͨͳײ͡Ͱ΋ͳ͍Ͱ͢
    • લड़ͷ௨Γ֎෦͔Βͷ੍໿͕ଟ͍ͷͰɺͦͷ࿪Έ͕͋Δ෦෼΋ଟ͍
    • λΠτͳεέδϡʔϧͰճͨ͠ϓϩδΣΫτͷෛ࠴ճऩ΋ͥΜͥΜͰ
    ͖ͯͳ͍
    • Ϧιʔε͕଍Γͳͯ͘ࢢ৔ͷཁٻʹ౴͖͑Εͳ͍

    View Slide

  66. ΈΜͳͰKyashΛΑ͍ͨ͘͠
    • ޷͖ͳαʔϏεͳͷͰ
    • ͋ͱ޷͖ͳϝϯόʔ͕ଟ͍ͷͰ
    • ࠓ͍ΔϝϯόʔͱؤுΔͷ͸΋ͪΖΜͰ͕͢ɺ΋ͬͱଟ͘ͷਓΛר͖
    ࠐΜͰ੝Γ্͍͛ͨͱ΋ߟ͍͑ͯ·͢
    • KyashΛ͍͍ձࣾɺαʔϏεʹ͢ΔͨΊʹ͕Μ͹͍ͬͯ·͢ʂ
    • Ұॹʹ੝Γ্͍͛ͨʂͱ͍͏ํ͍ͨΒͥͻ͓࿩͠·͠ΐ͏ʙ

    View Slide

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

    View Slide