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

LINEポイントクラブにおける PerlからKotlinへの移行を振り返る / The migration from Perl to Kotlin at LINE Point Club

LINEポイントクラブにおける PerlからKotlinへの移行を振り返る / The migration from Perl to Kotlin at LINE Point Club

「LINEポイントクラブ」は、LINE Payでの支払いやLINEの各種サービスで使える共通ポイント「LINEポイント」を貯められる様々なミッションの提供や、連携サービスでの利用の案内を行うポータルサービスです。LINEポイントクラブは、2013年6月に前身のサービスが提供開始され、その後日本では2020年からLINEポイントクラブと改称して運営されてきましたが、システム開発を始めた2013年から2021年までの8年間、Perlで開発され続けてきました。
2021年1月から1年間をかけて一気にKotlinへ書き換えるプロジェクトを進行し、2022年4月に私が担当するプロジェクトとしては一旦終わりました。本イベントでは、LINE DEVELOPER DAY 2021では語れなかった、Perlプロダクトを現代的なアーキテクチャと技術セットで再実装するプロジェクトの全貌と、プロジェクトの担当を終えた今の気持ちを赤裸々にお話しします。

LINE DEVELOPER DAY 2021での発表とアフターインタビューも併せてご覧ください。
https://linedevday.linecorp.com/2021/ja/sessions/157/
https://engineering.linecorp.com/ja/interview/story-of-rewriting-8-year-old-perl-product-with-kotlin/

大原 康平 / LINE株式会社 開発4センター OA Dev 5チーム
2018年入社の新卒4年目。LINEポイントクラブのサーバサイドの開発を担当。問題が発生した時の原因を探したり、パフォーマンスのボトルネックを調べて改善するのが好きです。夏の夜のモワッとした空気が好きです。

※この資料は以下イベントで発表しました
https://line.connpass.com/event/246551/

LINE Developers
PRO

May 25, 2022
Tweet

More Decks by LINE Developers

Other Decks in Technology

Transcript

  1. -*/&ϙΠϯτΫϥϒʹ͓͚Δ
    1FSM͔Β,PUMJO΁ͷҠߦΛৼΓฦΔ
    0"%FWνʔϜେݪ߁ฏ

    View Slide

  2. ొஃऀ঺հ
    l ։ൃηϯλʔ 0GGJDJBM"DDPVOU։ൃࣨ
    l αʔόαΠυ։ൃऀ
    l ͜Ε·Ͱͷ࢓ࣄ
    l ೥݄ d೥݄ɿ-*/&ϙΠϯτΫϥϒ։ൃ
    l ೥݄ dɿ-*/&ެࣜΞΧ΢ϯτ։ൃ
    l ,PUMJOྺ
    l ೥݄͔Β
    l ͦͷલ͸ 1FSMϝΠϯ +BWBͪΐͬͱ
    େݪ ߁ฏ

    View Slide

  3. ʮ-*/&ϙΠϯτΫϥϒʯͱ͸ʁ
    ͳͥ ,PUMJOʹॻ͖׵͑ͨͷ͔ʁ
    1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͷશ๴
    1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͰى͖ͨ໰୊ɾվળ
    ϓϩδΣΫτΛৼΓฦͬͯΈͯ
    01
    02
    03
    04
    05
    ࠓ೔͓࿩͢͠Δ಺༰

    View Slide

  4. ʮ-*/&ϙΠϯτΫϥϒʯͱ͸ʁ
    ͳͥ ,PUMJOʹॻ͖׵͑ͨͷ͔ʁ
    1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͷશ๴
    1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͰى͖ͨ໰୊ɾվળ
    ϓϩδΣΫτΛৼΓฦͬͯΈͯ
    01
    02
    03
    04
    05
    ࠓ೔͓࿩͢͠Δ಺༰

    View Slide

  5. -*/&ϙΠϯτΫϥϒͱ͸ʁ

    View Slide

  6. ஷΊΔλϒ
    ϙΠϯτΛஷΊΔ͜ͱ͕Ͱ͖Δ
    ೥͔ΒαʔϏε։࢝ͨ͠
    1FSMͰॻ͔Ε͍ͯͨ
    ೥͔Β೥ʹ͔͚ͯ ,PUMJOʹॻ͖׵͑ͨ
    ʢࠓճͷൃදʣ

    View Slide

  7. ࢖͏λϒ
    ϙΠϯτΛ༷ʑͳ΋ͷʹަ׵͢Δ͜ͱ͕Ͱ͖Δ
    ೥ʹαʔϏε։࢝ͨ͠
    ,PUMJOͰॻ͔Ε͍ͯΔ

    View Slide

  8. l QNϑΝΠϧͷ਺
    l ௒͑ʢςετ͸আ͘ʣ
    l QNϑΝΠϧɿ$POUSPMMFS .PEFM ػೳͷϏδωεϩδοΫͷཻ౓
    l ίϛοτ਺
    l ໿ ίϛοτ
    ։ൃͷن໛ײɿϦϓϨʔεલͷ 1FSMϓϩδΣΫτͰ͸

    View Slide

  9. l LUϑΝΠϧͷ਺
    l ௒͑ʢςετ͸আ͘ʣ
    l 1FSMϓϩδΣΫτͷ ௒ͷ QNϑΝΠϧΑΓ΋૿͍͑ͯΔओͳཧ༝
    l %BUBDMBTT͕૿͑ͨҝ
    l ϩδοΫΛϨΠϠ͝ͱʹ෼͚ͨҝ
    l ίϛοτ਺
    l ໿ ίϛοτ
    l ͬ͘͟Γܭࢉ͢Δͱฏ೔ຖ೔໿ ίϛοτҎ্ͷࠩ෼͕औΓࠐ·Ε͍ͯΔΠϝʔδ
    ։ൃͷن໛ײɿϦϓϨʔεޙͷ ,PUMJOϓϩδΣΫτͰ͸

    View Slide

  10. ʮ-*/&ϙΠϯτΫϥϒʯͱ͸ʁ
    ͳͥ ,PUMJOʹॻ͖׵͑ͨͷ͔ʁ
    1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͷશ๴
    1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͰى͖ͨ໰୊ɾվળ
    ϓϩδΣΫτΛৼΓฦͬͯΈͯ
    01
    02
    03
    04
    05
    ࠓ೔͓࿩͢͠Δ಺༰

    View Slide

  11. l ͳͥ (P΍ଞͷݴޠ͡Όͳ͍ͷ͔ʁ
    l +BWB,PUMJO͕ࣾ಺Ͱ࠷΋࢖ΘΕΔݴޠ͔ͩΒ
    l ผͷνʔϜͱ஌ݟ͕ڞ༗͠΍͍͢J
    l ΤϯδχΞ͕ผͷνʔϜʹҟಈ͠΍͍͢ʢΩϟονΞοϓ͠΍͍͢ʣJ
    l ࣾ಺ͷΤίγεςϜ͕ར༻Ͱ͖ΔJ
    l ͳͥ +BWBͰͳ͍ͷ͔ʁ
    l νʔϜͰ։ൃͯ͠ΔଞͷϓϩμΫτͱٕज़ηοτΛ߹Θ͔͔ͤͨͬͨΒ
    l ,PUMJO͕ॻ͖΍͍͢ͱฉ͍͍ͯͨ
    ͳͥ ,PUMJOʹॻ͖׵͑ͨͷ͔ʁ

    View Slide

  12. l ՝୊ղܾͷҝ
    l γεςϜͷߏ੒͕ෳࡶԽ͍ͯͨ͠
    l ஷΊΔλϒ͕ 1FSMͰ࢖͏λϒ͕ ,PUMJO
    l ౰࣌ 1FSM͔Β௚઀ )#BTF͕࢖͑ͳ͔ͬͨҝ +BWB,PUMJOͰॻ͔Εͨ
    )#BTFHBUFXBZBQQΛ࣮૷ɾ؅ཧ͍ͯͨ͠
    l ػೳࣗମͷෳࡶԽɻෆཁͳػೳ΋ଟ͔ͬͨ
    l ݴޠͷ໰୊Ͱ͸ͳ͍͕ɺॻ͖׵͑ϓϩδΣΫτʹΑͬͯղܾͰ͖ͦ͏ͳϙΠϯτ
    l ஷΊΔλϒΛ։ൃ͢ΔͨΊͷ 1FSMΤϯδχΞͷ࠾༻͕೉͍͠
    l 1FSMͷ࠷ۙͷϛυϧ΢ΣΞʹର͢ΔΫϥΠΞϯτϥΠϒϥϦ͕
    ๛෋ͱ͸ݴ͑ͳ͘ͳ͖ͬͯͨ
    1FSM͔Β͜ͷλΠϛϯάͰॻ͖׵͑Δ͜ͱʹܾΊͨཧ༝ʢʣ

    View Slide

  13. l ॻ͖׵͑ϓϩδΣΫτʹऔΓ૊ΊΔ࣌ظͩͬͨҝ
    l ௚ۙ൒೥͸େ͖ͳγεςϜվम͕ͳͦ͞͏ͱ͍͏ݟ௨ཱ͕͍ͬͯͨ͠
    1FSM͔Β͜ͷλΠϛϯάͰॻ͖׵͑Δ͜ͱʹܾΊͨཧ༝ʢʣ

    View Slide

  14. l ݴޠɿ,PUMJO
    l ϑϨʔϜϫʔΫɿ4QSJOH#PPU "SNFSJB
    l ϛυϧ΢ΣΞɿ.Z42- )#BTF 3FEJT ,BGLB
    l "1*ɿ3&45 H31$
    ٕज़ελοΫ

    View Slide

  15. ʮ-*/&ϙΠϯτΫϥϒʯͱ͸ʁ
    ͳͥ ,PUMJOʹॻ͖׵͑ͨͷ͔ʁ
    1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͷશ๴
    1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͰى͖ͨ໰୊ɾվળ
    ϓϩδΣΫτΛৼΓฦͬͯΈͯ
    01
    02
    03
    04
    05
    ࠓ೔͓࿩͢͠Δ಺༰

    View Slide

  16. Kafka
    ,PUMJO ͰͷγεςϜΞʔΩςΫνϟ
    media core
    admin
    cv-worker
    Redis
    Clusters
    Redis
    gRPC
    gRPC
    media DB DB for Earn Tab
    MySQL
    REST
    DB for Use Tab
    MySQL MySQL HBase

    View Slide

  17. Kafka
    ,PUMJO ͰͷγεςϜΞʔΩςΫνϟ
    media core
    admin
    cv-worker
    Redis
    Clusters
    Redis
    gRPC
    gRPC
    media DB DB for Earn Tab
    MySQL
    REST
    DB for Use Tab
    MySQL MySQL HBase
    Ϣʔβ͕ϙΠϯτΫϥϒ΁ΞΫηεͨ͠ࡍʹ֤छίϯςϯπΛฦ͢ BQQ

    View Slide

  18. Kafka
    ,PUMJO ͰͷγεςϜΞʔΩςΫνϟ
    media core
    admin
    cv-worker
    Redis
    Clusters
    Redis
    gRPC
    gRPC
    media DB DB for Earn Tab
    MySQL
    REST
    DB for Use Tab
    MySQL MySQL HBase
    ؅ཧը໘༻ͷ BQQ

    View Slide

  19. Kafka
    ,PUMJO ͰͷγεςϜΞʔΩςΫνϟ
    media core
    admin
    cv-worker
    Redis
    Clusters
    Redis
    gRPC
    gRPC
    media DB DB for Earn Tab
    MySQL
    REST
    DB for Use Tab
    MySQL MySQL HBase
    ϙΠϯτ෇༩ॲཧΛߦ͏ BQQ

    View Slide

  20. Kafka
    ,PUMJO ͰͷγεςϜΞʔΩςΫνϟ
    media core
    admin
    cv-worker
    Redis
    Clusters
    Redis
    gRPC
    gRPC
    media DB DB for Earn Tab
    MySQL
    REST
    DB for Use Tab
    MySQL MySQL HBase
    ஷΊΔλϒͷओͳػೳΛ H31$ Ͱఏڙ͢Δ BQQ

    View Slide


  21. DPSFBQQ։ൃ׬ྃɾ
    ଞͷ BQQͷઃܭ

    ΠϯςάϨʔγϣϯɾ
    2"
    1FSM,PUMJOҠߦϓϩδΣΫτͷશ๴ɿεέδϡʔϧ
    1FSMʹ࢒͍ͯͨ͠
    ػೳͷ։ൃ

    શମ։ൃ׬ྃ

    ϝΠϯػೳͷϦϦʔε

    શମઃܭɾDPSFBQQઃܭɾ
    ։ൃ؀ڥ੔උ

    View Slide


  22. DPSFBQQ։ൃ׬ྃɾ
    ଞͷ BQQͷઃܭ

    ΠϯςάϨʔγϣϯɾ
    2"
    1FSMʹ࢒͍ͯͨ͠
    ػೳͷ։ൃ

    શମ։ൃ׬ྃ

    ϝΠϯػೳͷϦϦʔε

    શମઃܭɾDPSFBQQઃܭɾ
    ։ൃ؀ڥ੔උ
    1FSM,PUMJOҠߦϓϩδΣΫτͷશ๴ɿεέδϡʔϧ

    View Slide

  23. l ߹ܭ໊ߏ੒
    l ໊ͷ +BWB,PUMJOΤϯδχΞ
    l 1FSMϓϩδΣΫτͷ࢓༷ʹ͍ͭͯ͸શવ෼͔Βͳ͍ঢ়ଶ͔Βͷελʔτ
    l ݩʑͷΞαΠϯɿ࢖͏λϒɾͦͷଞͷϓϩδΣΫτͷ։ൃ
    l ໊ͷ 1FSMΤϯδχΞ
    l +BWB,PUMJOʹ͍ͭͯࢲ͸গ͚ͩ͠෼͔Δɺଞͷ໊͸શવ෼͔Βͳ͍ঢ়ଶ
    ͔Βͷελʔτ
    l ݩʑͷΞαΠϯɿஷΊΔλϒͷ։ൃ
    ϓϩδΣΫτͷશ๴ɿ։ൃऀߏ੒

    View Slide

  24. l ՝୊
    l λεΫͷׂΓৼΓ΍޻਺ݟੵ΋Γͷ೉͕͋ͬͨ͠͞
    l ղܾࡦ
    l ҠߦϓϩδΣΫτॳظ͸؇͍෼ۀମ੍Λෑ͍ͨ
    l 1FSMϝϯόʔ͕࢓༷Λॻ͘
    l +BWB,PUMJOϝϯόʔ͸։ൃΛ؆୯ʹਐΊΒΕΔΑ͏ͳࣄલ४උΛ͢Δ
    ՝୊ɿνʔϜ಺ͷۀ຿஌ࣝɾ։ൃεΩϧͷෆۉߧ

    View Slide

  25. l ݁Ռ
    l ฒߦͯ͠࢓༷ࡦఆͱ։ൃͷ४උΛਐΊΒΕͨ
    l 1FSMϝϯόʔ͕ٕज़ελοΫ͕෼͔Βͳ͍ؒ͸࢓༷͕ᐆດͳ෦෼͕࢒ͬͯ
    ͠·ͬͨ
    l ։ൃ͠ͳ͕Β࢓༷Λ੔͍͑ͯ͘͜ͱʹͳ͍ͬͯͬͨ
    l +BWB,PUMJOϝϯόʔʹ͸։ൃɾίʔυϨϏϡʔͷෛՙ͕دͬͯ͠·ͬͨ
    l ίʔυϨϏϡʔίετ΋େ͖Ίʹͳͬͨ
    l ࢓༷ͷશ๴ ٕज़ͷશ๴͕ݟ͑ͯͳ͍ͷͰ࡞ۀྔͷݟੵ΋Γ͕೉͔ͬͨ͠
    ՝୊ɿνʔϜ಺ͷۀ຿஌ࣝɾ։ൃεΩϧͷෆۉߧ

    View Slide

  26. l ΑΓεϜʔζͳελʔτΛ੾ΔͨΊʹ͸Ͳ͏ͨ͠ΒΑ͔͔ͬͨʁ
    l ࢓༷ࡦఆͷ࣌ؒΛ΋ͬͱ௕͘औΔ
    l ࢓༷ϨϏϡʔɾٕज़शಘͷલ४උΛΑΓஸೡʹ΍Δ
    l ཧ૝Λݴ͑͹ɿ্هͭͰϓϥεϲ݄͘Β͍ͱΕΔͱεϜʔζͩͬͨΑ͏ʹײ͡Δ
    l ޻਺Λݟੵ΋Δࡍʹɺ +BWB,PUMJOϝϯόʔͷίʔυϨϏϡʔෛՙΛ
    ΑΓେ͖Ίʹߟྀ͢Δ
    ՝୊ɿνʔϜ಺ͷۀ຿஌ࣝɾ։ൃεΩϧͷෆۉߧ

    View Slide

  27. l ࠷΋େ੾ʹͨ͜͠ͱ
    l ʮ-*/&ϙΠϯτΫϥϒʯӡӦʹܞΘΔਓ͕ࢪࡦΛԁ׈ʹ਱ߦͰ͖ΔΑ͏ʹ͢Δ͜ͱ
    l ʮஷΊΔʯλϒͱʮ࢖͏ʯλϒͷΞϓϦέʔγϣϯͷ౷߹
    l ϝϯςφϯείετ࡟ݮͱଐਓԽͷղফΛૂ͏
    l ઃܭͷݟ௚͠
    l ࣗ෼ͨͪͰϝϯςφϯε͍ͯͨ͠ಠࣗͷδϣϒΩϡʔΛഇࢭ͠ɺ ,BGLBΛಋೖͨ͜͠ͱͳͲ
    ઃܭͰେ੾ʹͨ͜͠ͱɾલఏͱͳͬͨػೳཁ݅

    View Slide

  28. l σʔλϕʔεʹେ͖͘खΛೖΕΔ͜ͱ
    l ຊ౰͸εΩʔϚߏ੒͕ෳࡶԽ͍ͯͨ͠ͷͰखΛೖΕ͔ͨͬͨ
    l ޻਺͕๲େʹͳΓ࠷ॳͷϦϦʔε·Ͱ͕͔͔࣌ؒΓ͗͢Δ͜ͱ͕൑໌ͨ͠
    l ୅ΘΓʹɺΞϓϦέʔγϣϯͷίΞ෦෼ͰෳࡶੑΛӅณ͢Δํ਑ʹͨ͠
    ઃܭͰબ͹ͳ͔ͬͨҊ

    View Slide

  29. Kafka
    ,PUMJO ͰͷγεςϜΞʔΩςΫνϟɿϙΠϯτ
    media core
    admin
    cv-worker
    Redis
    Clusters
    Redis
    gRPC
    gRPC
    media DB DB for Earn Tab
    MySQL
    REST
    DB for Use Tab
    MySQL MySQL HBase
    3FEJTʹͷΈ઀ଓ͠εέʔϥϏϦςΟͷվળ

    View Slide

  30. Kafka
    ,PUMJO ͰͷγεςϜΞʔΩςΫνϟɿϙΠϯτ
    media core
    admin
    cv-worker
    Redis
    Clusters
    Redis
    gRPC
    gRPC
    media DB DB for Earn Tab
    MySQL
    REST
    DB for Use Tab
    MySQL MySQL HBase
    ಠࣗͷδϣϒΩϡʔ͔Β ,BGLB΁Ҡߦ

    View Slide

  31. Kafka
    ,PUMJO ͰͷγεςϜΞʔΩςΫνϟɿϙΠϯτ
    media core
    admin
    cv-worker
    Redis
    Clusters
    Redis
    gRPC
    gRPC
    media DB DB for Earn Tab
    MySQL
    REST
    DB for Use Tab
    MySQL MySQL HBase
    ஷΊΔλϒͱ࢖͏λϒͷ౷߹

    View Slide


  32. DPSFBQQ։ൃ׬ྃɾ
    ଞͷ BQQͷઃܭ

    ΠϯςάϨʔγϣϯɾ
    2"
    1FSMʹ࢒͍ͯͨ͠
    ػೳͷ։ൃ

    શମ։ൃ׬ྃ

    ϝΠϯػೳͷϦϦʔε

    શମઃܭɾDPSFBQQઃܭɾ
    ։ൃ؀ڥ੔උ
    ॗʑͱ։ൃ
    1FSM,PUMJOҠߦϓϩδΣΫτͷશ๴ɿεέδϡʔϧ

    View Slide


  33. DPSFBQQ։ൃ׬ྃɾ
    ଞͷ BQQͷઃܭ

    ΠϯςάϨʔγϣϯɾ
    2"
    1FSMʹ࢒͍ͯͨ͠
    ػೳͷ։ൃ

    શମ։ൃ׬ྃ

    ϝΠϯػೳͷϦϦʔε

    શମઃܭɾDPSFBQQઃܭɾ
    ։ൃ؀ڥ੔උ
    ॗʑͱ։ൃ
    1FSM,PUMJOҠߦϓϩδΣΫτͷશ๴ɿεέδϡʔϧ
    -*/&%&7&-01&3%":Ͱ͜͜ͷ࿩Λͯ͠·͢ʂ
    ಈըɾهࣄΛݟ͍ͯͩ͘͞ʂ

    View Slide


  34. DPSFBQQ։ൃ׬ྃɾ
    ଞͷ BQQͷઃܭ

    ΠϯςάϨʔγϣϯɾ
    2"
    1FSMʹ࢒͍ͯͨ͠
    ػೳͷ։ൃ

    શମ։ൃ׬ྃ

    ϝΠϯػೳͷϦϦʔε

    શମઃܭɾDPSFBQQઃܭɾ
    ։ൃ؀ڥ੔උ
    1FSM,PUMJOҠߦϓϩδΣΫτͷશ๴ɿεέδϡʔϧ

    View Slide

  35. l 1FSMͰಠཱͯ͠ಈ࡞Մೳͳػೳ
    l όονॲཧ
    l ؅ཧը໘
    l ֎෦޲͚ͷ "1*
    ॳظͷϦϦʔεʹؚΊͳ͔ͬͨػೳ
    σʔλϕʔε΁ͷมߋΛ࠷খݶʹͱͲΊͨ͜ͱͰ 1FSMΛ࢒͠ͳ͕ΒҠߦͰ͖ͨ

    View Slide

  36. l ΄ͱΜͲ͸ҠߦͰ͖ͨ
    l ݱࡏ΋एׯͷҠߦ͸࢒͍ͬͯΔ͕ɺ
    શϝϯόʔ͕ϑϧͰҠߦ࡞ۀΛ͍ͯ͠Δ༁Ͱ͸ͳ͍
    l ࢒͍ͬͯΔͷ͸ɺࡉ͔͍όονॲཧ
    l DPSPVUJOF΍ JOMJOFDMBTTͳͲͷػೳ΋ར༻࢝͠Ί͍ͯΔ
    ݱঢ়

    View Slide

  37. ʮ-*/&ϙΠϯτΫϥϒʯͱ͸ʁ
    ͳͥ ,PUMJOʹॻ͖׵͑ͨͷ͔ʁ
    1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͷશ๴
    1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͰى͖ͨ໰୊ɾվળ
    ϓϩδΣΫτΛৼΓฦͬͯΈͯ
    01
    02
    03
    04
    05
    ࠓ೔͓࿩͢͠Δ಺༰

    View Slide

  38. l ࠓ೔࿩͢͜ͱ
    l ྫ֎ॲཧͷ΍Γํʹ໰୊͕͋ͬͨ࿩
    l ੩తղੳπʔϧ %FUFLU Λಋೖͨ͠Βྑ͔ͬͨΑͱ͍͏࿩
    l ࠓ೔࿩͞ͳ͍͜ͱ
    l -*/&%&7&-01&3%":Ͱൃදͨ͠಺༰
    ,PUMJOҠߦϓϩδΣΫτͰى͖ͨ໰୊ͱվળ

    View Slide

  39. l ͜Μͳίʔυॻ͍ͯ·ͤΜ͔ʁ
    ྫ֎ॲཧͷ΍Γํ͕ྑ͘ͳ͔ͬͨ

    View Slide

  40. l ͜Μͳίʔυॻ͍ͯ·ͤΜ͔ʁ
    ྫ֎ॲཧͷ΍Γํ͕ྑ͘ͳ͔ͬͨ
    ࣗલͰϩΪϯά͔ͯ͠Β࠶ૹग़͢ΔΞϯνύλʔϯ

    View Slide

  41. l ͲΜͳ໰୊͕ى͜Δͷ͔ʁ
    l ಉ͡໰୊ʹىҼ͢Δϩά͕ෳ਺ग़ྗ͞ΕΔ͜ͱͰࠞཚΛҾ͖ى͜͢
    l ͳͥࠞཚ͕ى͜Δͷ͔ʁ
    l ݸผͷϩάʹՃ͑ͯɺେҬྫ֎ϋϯυϥͰ΋ϩά͕ग़ྗ͞ΕΔҝ
    l େҬྫ֎ϋϯυϥͱ͸ʁ
    l ϑϨʔϜϫʔΫଆͰ༻ҙ͍ͯ͠ΔେҬతͳྫ֎ॲཧػߏͷ͜ͱ
    l ෳ਺ $POUSPMMFSʹڞ௨ͨ͠ྫ֎ϋϯυϥ͕ॻ͚Δ
    l ྫɿ4QSJOH.7$Ͱ͸ !$POUSPMMFS"EWJDF Λ෇༩ͨ͠ΫϥεͰهड़Ͱ͖Δ
    ࣗલͰϩΪϯά͔ͯ͠Β࠶ૹग़͢ΔΞϯνύλʔϯͱ͸ʁ
    ˞ࢀߟɿஈ֊తʹཧղ͢Δ +BWBྫ֎ॲཧ IUUQTRJJUBDPNUTJJUFNTEGDDEBFE

    View Slide

  42. l ϩΪϯά͸େҬྫ֎ϋϯυϥʹ೚ͤΔ
    l ,PUMJOͰ͸ελοΫτϨʔε͕ϩάʹग़ྗͰ͖ΔͷͰɺ
    Լͷ֊૚Ͱࡉ͔͘ϩΪϯά͢Δඞཁ͸ͳ͍
    ઌ΄Ͳͷίʔυ͸Ͳ͏͢Ε͹ྑ͍ͷ͔ʁ

    View Slide

  43. l 1FSMͷϓϩδΣΫτͰ͸େҬྫ֎ϋϯυϥ΍ελοΫτϨʔεΛ
    ϩάʹग़ྗ͢Δ࢓૊Έʹͳ͍ͬͯͳ͔ͬͨҝɺஞҰϩΪϯά͍ͯͨ͠
    l ͦ͏͍ͬͨίʔυΛ ,PUMJOʹҠߦ͢ΔࡍʹΞϯνύλʔϯʹ͍ؕͬͯͨ
    ͳͥ͜ͷΞϯνύλʔϯʹؕͬͨͷ͔ʁ

    View Slide

  44. l %FUFLU ಋೖલ͸ LUMJOU ͸ಋೖ͞Ε͍ͯͨ
    l LUMJOU ͱ %FUFLU ͷҧ͍
    l LUMJOU ͸ DPEJOHTUZMFΛ֬ೝ͢Δ
    l %FUFLU ͸ίʔυͷෳࡶ౓΍ίʔυͷ೏͍ʢ໰୊ͷஹީʣΛݕ஌͢Δ
    ੩తղੳπʔϧ %FUFLU Λಋೖͨ͠Βྑ͔ͬͨ

    View Slide

  45. l -POH.FUIPE ΍ $PNQMFY.FUIPE ͋ͨΓͷܯࠂ͕ಛʹ͋Γ͕͍ͨ
    l ਓ͕ؒʮ͜ͷϝιου͸௕͍ɾෳࡶͳͷͰमਖ਼͍ͯͩ͘͠͞ʯͱϨϏϡʔ͢Δͷ͸೉͍͠
    l ओ؍తͳଆ໘͕͋ͬͯࢦఠͮ͠Β͔ͬͨΓਓʹΑͬͨΓ͢Δ෦෼͕େ͖͍ҝ
    l ػցతʹܯࠂ͕ग़Δͱ඼࣭ͷҡ͕࣋͠΍͍͢
    l େ͖͍ϓϩδΣΫτͰ΋్த͔Βಋೖ͠΍͍͢
    l طଘͷίʔυʹग़͍ͯΔܯࠂΛແࢹ͢Δҝͷ CBTFMJOFYNM Λग़ྗͰ͖Δػೳ͕ศར
    %FUFLU ͷྑ͍఺

    View Slide

  46. ʮ-*/&ϙΠϯτΫϥϒʯͱ͸ʁ
    ͳͥ ,PUMJOʹॻ͖׵͑ͨͷ͔ʁ
    1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͷશ๴
    1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͰى͖ͨ໰୊ɾվળ
    ϓϩδΣΫτΛৼΓฦͬͯΈͯ
    01
    02
    03
    04
    05
    ࠓ೔͓࿩͢͠Δ಺༰

    View Slide

  47. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ
    l දݱྗ͕ߴ͍
    l ֦ுؔ਺
    l JG USZ XIFOͳͲ͕஋ΛฦͤΔ
    l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ
    l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ
    l ࣮ߦ଎౓͕଎͍
    1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ

    View Slide

  48. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ
    l දݱྗ͕ߴ͍
    l ֦ுؔ਺
    l JG USZ XIFOͳͲ͕஋ΛฦͤΔ
    l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ
    l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ
    l ࣮ߦ଎౓͕଎͍
    1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ

    View Slide

  49. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ
    l දݱྗ͕ߴ͍
    l ֦ுؔ਺
    l JG USZ XIFOͳͲ͕஋ΛฦͤΔ
    l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ
    l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ
    l ࣮ߦ଎౓͕଎͍
    1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ

    View Slide

  50. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ
    l දݱྗ͕ߴ͍
    l ֦ுؔ਺
    l JG USZ XIFOͳͲ͕஋ΛฦͤΔ
    l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ
    l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ
    l ࣮ߦ଎౓͕଎͍
    1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ

    View Slide

  51. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ
    l දݱྗ͕ߴ͍
    l ֦ுؔ਺
    l JG USZ XIFOͳͲ͕஋ΛฦͤΔ
    l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ
    l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ
    l ࣮ߦ଎౓͕଎͍
    1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ
    ΫϥεΛܧঝͤͣʹɺ
    Ϋϥεʹ৽͍͠ػೳΛ௥Ճ͢Δ

    View Slide

  52. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ
    l දݱྗ͕ߴ͍
    l ֦ுؔ਺
    l JG USZ XIFOͳͲ͕஋ΛฦͤΔ
    l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ
    l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ
    l ࣮ߦ଎౓͕଎͍
    1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ

    View Slide

  53. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ
    l දݱྗ͕ߴ͍
    l ֦ுؔ਺
    l JG USZ XIFOͳͲ͕஋ΛฦͤΔ
    l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ
    l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ
    l ࣮ߦ଎౓͕଎͍
    1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ

    View Slide

  54. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ
    l දݱྗ͕ߴ͍
    l ֦ுؔ਺
    l JG USZ XIFOͳͲ͕஋ΛฦͤΔ
    l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ
    l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ
    l ࣮ߦ଎౓͕଎͍
    1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ

    View Slide

  55. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ
    l දݱྗ͕ߴ͍
    l ֦ுؔ਺
    l JG USZ XIFOͳͲ͕஋ΛฦͤΔ
    l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ
    l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ
    l ࣮ߦ଎౓͕଎͍
    1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ
    /VMMͩͬͨΒޙଓͷॲཧΛ͢Δʢ͜͜Ͱ͸ྫ֎Λ౤͛Δʣ

    View Slide

  56. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ
    l දݱྗ͕ߴ͍
    l ֦ுؔ਺
    l JG USZ XIFOͳͲ͕஋ΛฦͤΔ
    l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ
    l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ
    l ࣮ߦ଎౓͕଎͍
    1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ

    View Slide

  57. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ
    l දݱྗ͕ߴ͍
    l ֦ுؔ਺
    l JG USZ XIFOͳͲ͕஋ΛฦͤΔ
    l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ
    l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ
    l ࣮ߦ଎౓͕଎͍
    1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ
    UFYU͕OVMMͳΒ MFOHUI͸࣮ߦ͞Εͣ OVMMΛฦ͢

    View Slide

  58. l ։ൃ؀ڥʹؔ͢ΔΤίγεςϜ͕੔͍ͬͯΔ
    l ,PUMJOͷ։ൃݩ͕ +FU#SBJOT TSP Ͱ͋Γɺ *%&΍पลπʔϧ΋։ൃ͍ͯ͠ΔͨΊ
    ڧྗͳαϙʔτ͕͋Δ
    l ܰྔͳฒྻԽ͕Ͱ͖Δ
    l $PSPVUJOFͳͲ
    l ࣾ಺ͷଞνʔϜͱ৘ใަ׵͕੝ΜͳͨΊαʔόαΠυ։ൃͷ
    ૬ஊ͕ߦ͍΍͍͢
    l ฼਺ͷؔ܎্ 1FSM։ൃΑΓ΋૬ஊ͕ਐΈ΍͍͢
    1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ

    View Slide

  59. l Ϗϧυʹ͕͔͔࣌ؒΔҝखݩͰͷमਖ਼ΠςϨʔγϣϯ͸
    1FSM࣌୅ΑΓ΋஗͘ͳͬͨ
    l 4QSJOH#PPU΍ HSBEMF ͳͲ BQQΛ࡞੒͢Δ্Ͱඞཁͳ
    ஌ࣝ΍ٕज़͕ଟ͍
    l 1FSMͰ͸γϯϘϧςʔϒϧΛ͍͡Δ͜ͱͰ NPOLFZQBUDI͕
    ඇৗʹ༰қͰɺಛघͳςετ͕؆୯ʹॻ͚ͨ
    1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿωΨςΟϒฤʢʣ

    View Slide

  60. l スレッドセーフに関して注意する必要がある
    l 1FSMではマルチプロセス・シングルスレッドのアプリケーションを書いていたので
    意識が薄かった
    1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿωΨςΟϒฤʢʣ

    View Slide

  61. l H31$ ͷ CJEJSFDUJPOBMTUSFBNJOHΛ࢖ͬͯΈ͍ͨ
    l 1FSM࣌୅ͷ "1*Λ࠶ݱ͢Δ͜ͱΛ༏ઌ͍ͯͨ͠ͷͰɺ·ͩख͕ճ͍ͬͯͳ͍
    1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿͦͷଞฤ

    View Slide

  62. l ౰ͨΓલͰ͸͋Δ͕ผͷݴޠʹ׬શʹҠߦ͢Δͷ͸݁ߏେมͩͬͨ
    l ςετΛআ͖ QNϑΝΠϧ ௒͑Δ͘Β͍ͷن໛ͩͱΤϯδχΞਓͰ೥Ҏ্͔͔Δ
    l νʔϜҰؙͰ୹ظؒʹϓϩδΣΫτશମΛผͷݴޠ΁Ҡߦ͢Δͷ͸
    νʔϜશһʹͱͬͯྑ͍ܦݧʹͳͬͨ
    l 1FSM΋޷͖͕ͩͬͨɺ ,PUMJO΋޷͖ʹͳͬͨ
    ϓϩδΣΫτͷ୲౰Λऴ͑ͨࠓͷؾ࣋ͪ

    View Slide

  63. l -*/&ϙΠϯτΫϥϒͷ 1FSM͔Β ,PUMJO΁ͷҠߦϓϩδΣΫτͷ঺հ
    l ͳͥࠓ ,PUMJOʹͨ͠ͷ͔ʁ
    l ͳͥ ,PUMJOʁɿॻ͖΍͍͢ҝɾࣾ಺ͰΑ͘࢖ΘΕ͍ͯΔҝ
    l ͳͥࠓʁɿ௕೥ӡ༻͍ͯ͠ΔதͰ՝୊͕ੵΈॏͳ͍ͬͯͨҝɾऔΓ૊ΊΔ࣌ظͩͬͨҝ
    l ઃܭͰେ੾ʹͨ͜͠ͱ΍ݱঢ়ͷ঺հ
    l ϓϩδΣΫτͰى͖ͨ໰୊ͱվળ
    l ྫ֎ॲཧͷ࢓ํ͕ҧ͏ͱ͍͏࿩ͱ %FUFLU ಋೖͨ͠Βྑ͔ͬͨͱ͍͏࿩
    l ৼΓฦͬͯͷײ૝ͷ঺հ
    ·ͱΊ

    View Slide

  64. l -*/&ϙΠϯτΫϥϒͷ 1FSM͔Β ,PUMJO΁ͷҠߦϓϩδΣΫτͷ঺հ
    l ͳͥࠓ ,PUMJOʹͨ͠ͷ͔ʁ
    l ͳͥ ,PUMJOʁɿॻ͖΍͍͢ҝɾࣾ಺ͰΑ͘࢖ΘΕ͍ͯΔҝ
    l ͳͥࠓʁɿ௕೥ӡ༻͍ͯ͠ΔதͰ՝୊͕ੵΈॏͳ͍ͬͯͨҝɾऔΓ૊ΊΔ࣌ظͩͬͨҝ
    l ઃܭͰେ੾ʹͨ͜͠ͱ΍ݱঢ়ͷ঺հ
    l ϓϩδΣΫτͰى͖ͨ໰୊ͱվળ
    l ྫ֎ॲཧͷ࢓ํ͕ҧ͏ͱ͍͏࿩ͱ %FUFLU ಋೖͨ͠Βྑ͔ͬͨͱ͍͏࿩
    l ৼΓฦͬͯͷײ૝ͷ঺հ
    ·ͱΊ
    ,PUMJOະܦݧऀɾ੩తܕ෇͚ະܦݧऀͰ΋ ,PUMJO͸ॻ͖΍͍͢Ͱ͢ʂ
    ੋඇαʔόαΠυ ,PUMJOΛॻ͖·͠ΐ͏ʂ

    View Slide