Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

҉߸ͷ͋Ε͜Ε

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

͓·͚: 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ͯ͠ͶʯΈ͍ͨͳཁٻ͕͞ΕΔ͜ͱ͕͋Γ·͢ • ҉߸ΞϧΰϦζϜͷϒϩοΫαΠζͳͲ͔Β൑அ͠Α͏

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

Kyashͷಛҟੑͱ໘ന͞

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

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