Slide 1

Slide 1 text

Hatena Engineer Seminar #14 ຐ๏ͷiΒΜͲ σʔλҠߦฤ ʙ৽چγεςϜؒͷσʔλϚΠάϨʔ γϣϯ࣌ʹզʑ͕ߟ͑Δ͜ͱʙ id:tkzwtksʢ୍ᖒ ਸʣ

Slide 2

Slide 2 text

ࣗݾ঺հ • id:tkzwtks ୍ᖒ ਸ • 2015೥11݄ೖࣾ • ۀ຿ྺ • ΧΫϤϜʢKADOKAWA༷ʣ • GigaViewer • ͸ͯͳμΠΞϦʔऴྃ(͸ͯͳμΠ ΞϦʔ͔Βϒϩά΁ͷҠߦ࡞ۀ) • Ҿӽ͠Ҋ݅͸3݅໨͘Β͍

Slide 3

Slide 3 text

վΊͯຐ๏ͷiΒΜͲ֓ཁ • KADOKAWA༷͕ӡӦ͢Δʮ೔ຊ࠷େڃͷΨʔϧζΤϯλς ΠϝϯταΠτʯ • 1999೥ʹແྉϗʔϜϖʔδ࡞੒αʔϏεͱͯ͠ελʔτ • খઆ౤ߘػೳͰ͸ʮ࿀ۭʕ੾φΠ࿀෺ޠʯ౳ͷਓؾ࡞඼͕ੜ ·Ε͍ͯΔ • ໿20೥෼ͷখઆ΍ؔ࿈σʔλ͕ཷ·͍ͬͯΔ

Slide 4

Slide 4 text

ࠓ೔࿩͢͜ͱ • σʔλҠߦͷͱ͖ʹ཈͑ΔϙΠϯτ • ৽چຐ๏ͷiΒΜͲؒͰσʔλҾӽ͢͠Δࡍʹզʑ͕ߟ͑ͨ͜ ͱ • ͲͷΑ͏ʹҠߦ४උΛਐΊ͔ͨ • Ҡߦ࣌ͷ՝୊ͱͦͷղܾํ๏

Slide 5

Slide 5 text

ࠓ೔࿩͢͜ͱ • σʔλҠߦͱ͸ʁ • ຐ๏ͷiΒΜͲʹ͓͚ΔσʔλҠߦ • σʔλ೺Ѳ • Ҡߦॲཧ࣮૷/ࣄલ࣮ߦ/վળ • ฒྻ࣮ߦઃܭ/࣮૷ • ·ͱΊ

Slide 6

Slide 6 text

σʔλҠߦͱ͸ʁ

Slide 7

Slide 7 text

σʔλҠߦͱ͸ʁ چγεςϜ͔Β৽γεςϜʹσʔλΛҠ͢͜ͱ • DBͳΒ • εΩʔϚఆٛมߋແ͠ / มߋͭͭ͠Ҡߦ • ϑΝΠϧͳΒ • چετϨʔδ͔Β৽ετϨʔδ΁ͷҾӽ͠

Slide 8

Slide 8 text

σʔλҠߦ·ͰͷಓͷΓ • ೺Ѳɾ࡞ઓཱҊ • ԿΛͲ͜ʹҠ͢ͷ͔ / ͲΕ͘Β͍Ҡ͢ͷ͔ • ͲΕ͘Β͍͕͔͔࣌ؒΔ͔ • ४උɾ࣮૷ • ࣮ߦ

Slide 9

Slide 9 text

ຐ๏ͷiΒΜͲͷ Ҿӽ֓͠ཁ

Slide 10

Slide 10 text

ԿΛͲΕ͘Β͍Ҡ͢ͷ͔ʁ • Ϣʔβʔσʔλʢ470ສਓʣ • ࡞඼ʢ132ສ࡞඼ʣ • Τϐιʔυʢ3000ສΤϐιʔυʣ

Slide 11

Slide 11 text

ԿΛͲΕ͘Β͍Ҡ͢ͷ͔ʁ • ͓͠Γʢ640ສʣ • ϨϏϡʔʢ219ສʣ • ࡞඼΁ͷ൓Ԡʢ144ສʣ • খઆૠֆ/ϓϩϑΟʔϧը૾ʢ500ສϑΝΠϧʣ

Slide 12

Slide 12 text

Ҿӽ͠ʹ͓͚Δ՝୊ • γεςϜͷ׬શϦχϡʔΞϧ • ΧΫϤϜͱίʔυϕʔε͕ಉ͡ • ৽چγεςϜؒͰεΩʔϚఆٛ΋ҧ͏ • ه๏΋ҧ͏ͷͰશΤϐιʔυॻ͖׵͑ͳͯ͘͸ͳΒͳ͍ • σʔλؒͷґଘؔ܎Λղܾ͠ͳ͕ΒҠߦ͢Δඞཁ͕͋Δ • ྫ) ࡞඼ͱͦͷ࡞ऀ / ը૾ͱͦͷΦʔφʔ

Slide 13

Slide 13 text

಺༰Λ೺Ѳ͢Δ

Slide 14

Slide 14 text

σʔλϚοϐϯά • چεΩʔϚ͔Β৽εΩʔϚʹରԠ͢Δςʔϒϧ/ΧϥϜΛݟͭ ͚Δ • ৽εΩʔϚͰඞཁͳσʔλΛ͢΂ͯચ͍ग़͠ɺچεΩʔϚ ͔ΒରԠ͢ΔΧϥϜΛݟ͚ͭΔ • چγεςϜ͔ΒҠߦ͢Δඞཁ͕͋ΔσʔλͷҠߦઌͷςʔϒ ϧ/ΧϥϜ͕ଘࡏ͢Δ͔ચ͍ग़͢

Slide 15

Slide 15 text

Ҡߦର৅ͷચ͍ग़͠ • Ҡߦ͢Δ΋ͷ / ͠ͳ͍΋ͷΛܾΊͯ਺Λग़͢ • ྫʣୀձࡁΈϢʔβʔͱͦͷ࡞඼͸Ҡߦ͠ͳ͍ • ਺Λग़ͯ͠ɺҠߦظؒͷݟੵ΋Γʹར༻͢Δ

Slide 16

Slide 16 text

ྫ ࡞඼/ຊจͷҠߦ • ࡞඼λΠτϧ΍ຊจ͸৽γεςϜͷରԠ͢ΔΧϥϜʹϚοϐ ϯά͢Δ • ݪଇͱͯ͠͸ҠߦલޙͰʮมߋ͠ͳ͍ʯ • چεΩʔϚͷෳ਺ͷσʔλΛࢀর͠ͳ͍ͱܾఆͰ͖ͳ͍΋ͷ ΋͋Δ • ެ։ϑϥάʢ࡞඼ɾখઆຊจʣ΍ ষɾઅͷઃఆ • ϚοϐϯάҎ֎ʹ΋ม׵ϩδοΫ͕ඞཁ

Slide 17

Slide 17 text

Ҡߦॲཧͷ࣮૷

Slide 18

Slide 18 text

Ҡߦॲཧͷ࣮૷ํ਑ • Ҡߦର৅σʔλͷछྨ͕ଟ͍ͷͰɺ֤ॲཧΛผʑͷόονॲ ཧͱ࣮ͯ͠૷͢Δ • ෳ਺ͷछྨͷσʔλҠߦΛฒߦ࣮ͯ͠ߦͰ͖ΔΑ͏ʹ • ෳ਺ਓͰ࣮૷͠΍͍͢Α͏ʹ • ֤ॲཧΛγϯϓϧʹอͭΑ͏ʹ • ֤ॲཧ͸ผͷ࢓૊ΈͰ࿈݁͢Δ

Slide 19

Slide 19 text

Ҡߦॲཧͷ࣮૷ํ਑ • ͍͖ͳΓ࡞Γࠐ·ͳ͍ • ࠷ॳ͸ͱʹ͔͘ಈ͔͢͜ͱΛ໨ඪʹ • ૝ఆ͍ͯ͠ͳ͍σʔλ͸ଘࡏ͢Δલఏʹཱͪଓ͚Δ • ͋Δఔ౓ಈ͘Α͏ʹͳͬͨΒɺ࣮ࡍʹશ݅ʢ͋Δ͍͸ݱ࣮త ʹऴΘΔ͘Β͍ͷྔʣͰ࣮ࡍҠߦΛࢼ͍ͯ͘͠ • ૝ఆ͠ͳ͍σʔλ͕͖ͨΒΤϥʔͰམͪΔΑ͏͢Δ

Slide 20

Slide 20 text

Ҡߦॲཧͷ࣮૷ํ਑ • Ͱ͖Δ͚ͩಛผͳ͜ͱΛ͠ͳ͍ • Ϣʔβʔ͕࣮ࡍʹૢ࡞͢Δ৔߹ͱಉ͡Α͏ͳσʔλ͕࡞Β ΕΔΑ͏ʹ͢Δ • কདྷʹʮ໌Β͔ʹ͓͔͠ͳσʔλʹݟ͑ΔΜ͚ͩͲ͜Ε͍ ͭͲ͏΍ͬͯ࡞ΒΕͨΜͩΖ͏ʯͱͳΔͷΛආ͚͍ͨ • DB্ͷσʔλͷมߋཤྺ͸௥͍ʹ͍͘

Slide 21

Slide 21 text

࣮૷ • ࠷ॳ͸ҠߦઌͷίʔυΛྲྀ༻͢ΔܗͰ֤ҠߦॲཧΛ࣮૷ • Ҡߦ࣌ʹ͓͔͠ͳσʔλ͕࡞ΒΕΔͷΛ๷͙ͷ͕ૂ͍ • WebଆͱͰ͖Δ͚ͩಉ͡ϩδοΫΛ࢖͏͜ͱͰɺෆ׬શͳ σʔλ͕࡞ΒΕͳ͍Α͏ʹ

Slide 22

Slide 22 text

ࣄલ࣮ߦ/վળ

Slide 23

Slide 23 text

࣌ؒΛݟੵ΋Δ • ࣮σʔλͰࢼ̐͢ • શମͷྔ/Ұ݅͋ͨΓͷҠߦʹ͔͔Δ࣌ؒΛग़͢ • ϝϯςφϯεظؒͷݟੵ΋Γ • શͯͷύλʔϯΛ໢ཏ͢Δඞཁ͸ͳ͍ • ݟੵ΋ΓͳͷͰશ݅ࢼ͞ͳͯ͘΋Α͍ • ࣮૷ → ࣮ߦ → मਖ਼ͷαΠΫϧΛճ͍ͯ͘͠

Slide 24

Slide 24 text

ຐ๏ͷiΒΜͲͰͷ࣌ؒݟੵ΋Γ • ಈ͘Α͏ʹͳͬͨ͘Β͍Ͱ͓ࢼ࣮͠ߦ • ૉ๿ʹ࣮ߦͯ͠ΈΔͱɺҰϲ݄Λͪΐͬͱ௒͑ͦ͏ͱ͍͏͜ ͱ͕Θ͔Δ • ͜ΕͩͱҰൃউෛʹͳͬͯ͠·͏ • λΠϜϦϛοτ͕2݄ޙ൒ʹͳΔ/ϝϯςφϯεظ͕ؒ௕͘ ͳΓ͗͢Δ • ॲཧࣗମͷվળͱฒྻ࣮ߦ͢Δ࢓૊ΈͷಋೖͰରԠ͢Δ

Slide 25

Slide 25 text

Ҡߦॲཧͦͷ΋ͷͷվળ • ҠߦॲཧࣗମΛ࠷దԽ͢Δ • ࠷ॳ͸webଆͱಉ͡ίʔυΛར༻͓ͯ͠ΓɺҰ݅ͣͭ INSERT͢ΔϩδοΫʹͳ͍ͬͯͨʢ͍ΘΏΔn+1໰୊ʣ • webଆͱಉ͡ίʔυΛͦͷ··ར༻͢ΔͷΛఘΊͯɺෳ਺ ϨίʔυΛbulk insert͢Δίʔυʹม͍͑ͯ͘ • INSERT͕ϝΠϯͳͷͰେ෯վળ • UPDATEʹ͍ͭͯ͸ఘΊΔ

Slide 26

Slide 26 text

ฒྻ࣮ߦ

Slide 27

Slide 27 text

Ҡߦͷ࡞ઓݕ౼ Ͳ͏΍ͬͯૉૣ͘Ҡߦ͢Δʁ • ฒྻΠϯϙʔτ & ฒྻ਺ΛͰ͖Δ͚ͩ૿΍͢ • ௚ྻʹ΍ͬͯ100೔͔͔ΔͳΒɺ୯७ܭࢉͰ͸100ฒྻͳ Β1೔ͰऴΘΔ • ฒྻ਺͸উखʹ্ݶ·Ͱ૿͑ͯཉ͍͠

Slide 28

Slide 28 text

Ͳ͏΍ͬͯฒྻ࣮ߦ͢Δʁ ϚωʔδυαʔϏεΛಋೖͰղܾΛਤΔ • AWS Batch + StepFunctions • BatchͰҠߦॲཧࣗମΛ࣮ߦ • ґଘ͢ΔBatchॲཧΛStepFunctionsͰͭͳ͙ • StepFunctionsͰBatchͷδϣϒΛૹ৴ͭͭ͠ɺਐḿ؅ཧΛߦ ͏࢓૊ΈΛͭ͘Δ

Slide 29

Slide 29 text

AWS Batch • ϑϧϚωʔδυͳόονॲཧ࣮ߦ؀ڥ • Ϧιʔεʹ༨༟͕͋ΔݶΓδϣϒΛฒྻ࣮ߦͯ͘͠ΕΔ • DockerΠϝʔδ͕͋Ε͹࢖͑ΔͷͰɺٕज़બ୒ͷ෯͕޿͍ • Lambdaͱͷҧ͍͸͜͜ • ୯ମͰ΋ಈ͘όονॲཧͱͯ͠ಈ͘΋ͷΛࡌ࣮ͤͯߦ

Slide 30

Slide 30 text

AWS StepFunctions • AWSͷෳ਺αʔϏεΛ૊Έ߹ΘͤͯϫʔΫϑϩʔΛ࡞੒ • ϫʔΫϑϩʔ͸εςοϓͷ૊Έ߹ΘͤͰߏ੒͞ΕΔ • ֤εςοϓ͸ࣗಈతʹτϦΨʔ͞ΕɺτϨʔε͞ΕΔ • ෳ਺ͷॲཧΛͭͳ͛ͯҰ࿈ͷॲཧΛͭ͘Δ • ෼ׂ͞Ε֤ͨ޻ఔ͕εςοϓͱͳΔ

Slide 31

Slide 31 text

AWS StepFunctions • 2019/9ʹαϙʔτ͞ΕͨMap͕ڧྗ • ಈతฒྻॲཧΛ؆୯ʹॻ͚Δ • Ҡߦର৅͕ॻ͔ΕͨJSONͷS3Ωʔͷ഑ྻΛ౉ͯ͠ɺ֤ Ωʔ͝ͱʹBatchΛ࣮ߦ͢ΔɺΈ͍ͨͳ͜ͱ͕ॻ͚Δ গ͠ࢼͨ͠ͱ͜Ζɺ͏·͍͖ͦ͘͏ͳࢉஈ͕͍ͭͨͷͰ࠾༻

Slide 32

Slide 32 text

σʔλҠߦਐḿ؅ཧ

Slide 33

Slide 33 text

σʔλҠߦਐḿ؅ཧ • σʔλҠߦͦͷ΋ͷͷਐḿΛ؅ཧ͓ͯ͘͠ • Ҡߦલ/ॲཧ੒ޭ/ࣦഊͷঢ়ଶ؅ཧ • ࣦഊͨ͠σʔλ͸࠶ҠߦͰ͖ΔΑ͏ʹ • Ͳ͏΍ͬͯ؅ཧ͢Δ͔ • ӬଓԽͰ͖Ε͹Ͳ͏͍͏ํ๏Ͱ΋͍͍

Slide 34

Slide 34 text

Savepoint • ࠓճ͸Ҡߦର৅ͷҠߦݩIDҰཡ͕هड़͞ΕͨJSONΛS3ʹஔ ͘΍ΓํΛ࠾༻ • JSONϑΝΠϧҰ͕࣮ͭߦ୯Ґʹͳ͍ͬͯͯɺͦΕͧΕ͕ ฒྻʹ࣮ߦՄೳ • ֤޻ఔͰ΋Ͱ͖Δ͚ͩฒྻ࣮ߦͰ͖ΔΑ͏ʹ • ͍͍ͩͨಉ݅͡਺ʢbatch_sizeʣʹͳΔΑ͏ʹۉ͞Ε͍ͯΔ

Slide 35

Slide 35 text

Savepoint • S3ͷΩʔͰʮҠߦର৅ͷछྨ/Ҡߦݩ/Ҡߦͷ੒൱ʯΛදݱ͢ Δ • ΩʔΛݟΔͱҠߦঢ়ଶ͕Θ͔Δ • ࣮ߦલ/੒ޭ/ࣦഊ • ࣦഊͨ͠άϧʔϓ͸࠶࣮ߦՄೳ

Slide 36

Slide 36 text

ॲཧ݅਺ΛۉҰʹ͢Δ ֤ॲཧͷॲཧ݅਺Λ͍͍ͩͨಉ͡ʹۉ͢ • Ϣʔβʔ100ਓ ͷάϧʔϓΛ͍͔ͭ͘࡞ͬͯฒྻ࣮ߦ͢Δͱ ͯ͠ • ͦΕͧΕ͕࣋ͭ࡞඼਺΍খઆຊจͷ߹ܭ͸όϥόϥ • ͦΕͧΕͷ޻ఔΛ௚ྻͰॲཧ͢Δ৔߹ɺ਺ʹΑ࣮ͬͯߦ࣌ ͕ؒมΘΔ • ͕࣌ؒಡΈʹ͘͘ͳΔ

Slide 37

Slide 37 text

ॲཧ݅਺ΛۉҰʹ͢Δ • ॲཧ݅਺ΛۉҰʹ͢Δ͜ͱͰ֤ॲཧ ͷ࣮ߦ࣌ؒΛ֓Ͷಉ͡ʹͰ͖Δ • savepointͷΦϒδΣΫτ਺Λ؂ࢹ͢ Δ͜ͱͰେମͷਐḿΛ؂ࢹՄೳ • ࣮ߦલͷ݅਺/੒ޭ਺/ࣦഊ਺

Slide 38

Slide 38 text

׬੒ͨ͠εςʔτϚγϯ

Slide 39

Slide 39 text

ͦͷଞ

Slide 40

Slide 40 text

ը૾ͷҠߦ ը૾ͷҠߦʹ͸S3 BatchOperationsΛར༻ • Ҡߦݩͷը૾ετϨʔδ͔ΒҰ౓S3ͷҰ࣌ஔ͖৔ʹू໿͢Δ • Ұ࣌ஔ͖৔͔Β഑৴༻όέοτ΁ͷҠಈʹ͸S3 BatchOperationsΛར༻ • LambdaΛڬΜͰը૾ΛϦωʔϜ • େମ2࣌ؒఔ౓

Slide 41

Slide 41 text

Ҡߦ݁Ռͷݕূ • ࣄલʹ݅਺Λग़͓͍ͯͯ͠ɺҠߦ݅਺ͱൺֱ • ݕূର৅Λࣄલʹ͍͔ͭ͘ग़͓͍ͯͯ͠ɺҠߦલޙͰҧ͍͕ ͳ͍͔Λൺֱ • ݟͨ໨ʹؔ͢Δ෦෼͸࣮ࡍʹݟͯ֬ೝ • ͜͜͸վળͷ༨஍͕͋ͬͨ

Slide 42

Slide 42 text

݁Ռͱ·ͱΊ

Slide 43

Slide 43 text

݁Ռ • શ݅Ҡߦ͕εϜʔζʹऴΘΔͱ͍͍ͩͨ10~14h͘Β͍ • ۚમతίετ͸ͦΜͳʹ͔͔Βͳ͍ • Batch͸ࣗಈͰඞཁͳαΠζͷEC2ΠϯελϯεΛཱͯΔ ͕ɺཱ͍ͬͯΔ࣌ؒ͸୹͍ • খ͍͞ΠϯελϯεͰ࣌ؒΛ͔͚ΔΑΓ͸ଟগ͓͕͔ۚ ͔ͬͯ΋ߴ଎ʹऴΘΔํ͕ϦΧόϦ͠΍͍͢

Slide 44

Slide 44 text

·ͱΊ • ҠߦॲཧΛ෼ׂ͢Δ࡞ઓ͕Α͔ͬͨ • ίʔυ͕ѻ͍΍͍͢ɺಈ࡞֬ೝͷείʔϓΛݶఆͰ͖Δ • ϚωʔδυαʔϏεͷಋೖ • ࣮ߦ؀ڥͷ४උίετΛԼ͛ΒΕͨ • ࣗಈͰεέʔϧΞ΢τͯ͘͠ΕΔͷ͸ָ

Slide 45

Slide 45 text

·ͱΊ • ݴޠબఆ • ݁ՌతʹΫΤϦΛେ෯ʹॻ͖׵͑ͨͷͰWebଆͱಉ͡ݴޠ Λ࠾༻͢ΔࢫΈ͸ݮͬͨ • ҰํطଘͷॲཧΛਖ਼͘͠࠶࣮૷͢Δͷ͸೉͘͠ɺDBʹೖ ΕΔ௚લ·Ͱ͸ಉ͡ॲཧ͕࢖͑ͨͷ͸ྑ͔ͬͨ • ແࣄʹҠߦͰ͖ͨ • ԿΑΓ͜Ε͕Ұ൪