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

Hatena Engineer Seminar #14 魔法のiらんど データ移行編 〜新旧システム間のデータマイグレーション時に我々が考えること〜 / hatena-engineer-seminer-number-14-data-migration

tkzwtks
July 15, 2020
1.4k

Hatena Engineer Seminar #14 魔法のiらんど データ移行編 〜新旧システム間のデータマイグレーション時に我々が考えること〜 / hatena-engineer-seminer-number-14-data-migration

tkzwtks

July 15, 2020
Tweet

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  6. σʔλҠߦͱ͸ʁ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  13. ಺༰Λ೺Ѳ͢Δ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  17. Ҡߦॲཧͷ࣮૷

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  22. ࣄલ࣮ߦ/վળ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. ฒྻ࣮ߦ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  32. σʔλҠߦਐḿ؅ཧ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  38. ׬੒ͨ͠εςʔτϚγϯ

    View Slide

  39. ͦͷଞ

    View Slide

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

    View Slide

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

    View Slide

  42. ݁Ռͱ·ͱΊ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide