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

じわじわとPerlからGoに移行しようとしている俺達のマイクロサービシーズの紹介 / The migrating to microservices in Go from Monolith in Perl

mackee
March 05, 2022

じわじわとPerlからGoに移行しようとしている俺達のマイクロサービシーズの紹介 / The migrating to microservices in Go from Monolith in Perl

YAPC::Japan::Online 2022 Track B

mackee

March 05, 2022
Tweet

More Decks by mackee

Other Decks in Programming

Transcript

  1. ͡Θ͡ΘͱPerl͔ΒGoʹ
    Ҡߦ͠Α͏ͱ͍ͯ͠Δ
    ԶͨͪͷϚΠΫϩαʔϏγʔζ
    YAPC::Japan::Online 2022
    2022-03-05 Track B 13:40ʙ14:20
    @macopy a.k.a @mackee_w

    View Slide

  2. ͜ͷηογϣϯͷུ֓

    View Slide

  3. 1FSMೖֶࣜ͘ΜIUUQTQFSMFOUSBODFDPOOQBTTDPN 3FOÉF'SFODIIUUQTSFOFFGSFODICMPHTQPUDPN

    View Slide

  4. (·ͩ)શ෦͸ஔ͖׵͍͑ͯͳ͍

    View Slide

  5. View Slide

  6. Tonamelͷن໛ײ






    -PCJ5PVSOBNFOU
    ޙͷ5POBNFM

    ։ൃ։࢝
    5POBNFMʹ໊લ͕มߋ
    1FSMͷߦ਺ߦ
    ͭͳ͗͜ΈͰएׯ૿Ճ
    1FSMͷߦ਺ߦ
    (P੡ϚΠΫϩαʔϏεº
    (Pͷߦ਺ߦ
    ͏ͪίʔυੜ੒ߦ

    View Slide

  7. ͜Ε·Ͱ2೥΄Ͳ͔͚ͯ
    ͡Θ͡ΘҠߦͭͭ͋͠Δ

    View Slide

  8. ͦͷؒʹ΋ػೳ͕૿͑

    View Slide

  9. େձ΋૿͍͑ͯ͘

    View Slide

  10. ͜ͷηογϣϯͰ͸
    ٞ࿦ͷҰൠԽΛ͋͑ͯͤͣ
    TonamelͰͷࣄྫΛ࿩͠·͢

    View Slide

  11. ୈ1ষ: ͳͥϚΠΫϩαʔϏεʹ͢Δͷ͔ʁ
    ୈ2ষ: ॳΊͯͷαʔϏε෼ׂ
    ୈ3ষ: ϚΠΫϩαʔϏεͨͪͷ࿈ܞํ๏

    View Slide

  12. @macopy
    • ໘ന๏ਓΧϠοΫ eεϙʔπࣄۀ෦
    TonamelαʔόαΠυςοΫϦʔυ
    • Perlେ޷͖ Go΋޷͖
    • GGST࢖༻Ωϟϥ: ϥϜϨβϧ
    • ISUCON11 ༏উ ←NEW!

    View Slide

  13. ୈ1ষ
    ͳͥϚΠΫϩαʔϏεʹ͢Δͷ͔ʁ

    View Slide

  14. Ҡߦલͷߏ੒(ʙ2020-07)
    ͜ͷ௚ޙʹϚΠΫϩαʔϏεԽʹ߹ΘͤͯECSԽ

    View Slide

  15. ՝୊: PerlͰڊେGraphQLΛ
    ͞͹͘ͷ͸ՙ͕ॏ͍
    • TonamelͰ͸ओͳAPIܗࣜͱͯ͠GraphQLΛ
    ࠾༻͍ͯ͠Δ
    • ڊେͳϨεϙϯεΛฦ͢ͱ͖ɺGraphQL.pm
    0.47(2021-02ϦϦʔε)ҎલͰ͸ܕνΣοΫ
    ͕ϨεϙϯελΠϜͷ΄ͱΜͲΛ઎Ί͍ͯͨ
    • GraphQLΛ࢖͍ଓ͚Δʹ͸ɺ͜ͷ͋ͨΓʹԿ
    Β͔ͷվળҊ͕ඞཁͩͬͨ

    View Slide

  16. ݱࡏͷGraphQL.pm(>=0.47)͸σϑΥϧτͰ
    ࣮ߦ࣌ܕνΣοΫ͕Φϑʹͳ͍ͬͯΔ
    ౰࣌໰୊ʹͳ͍ͬͯͨGraphQL QueryͷϕϯνϚʔΫΛ΍ͬͯΈͨ(256ਓγϯάϧΤϦϛωʔγϣϯͷΫΤϦ)
    $ carton exec perl -Ilib tmp/graphql_benchmark.pl bench 47bIg
    Benchmark: timing 10 iterations of default...
    default: 4 wallclock secs ( 3.22 usr + 0.08 sys = 3.30 CPU) @ 3.03/s (n=10)
    Rate default
    default 3.03/s —
    `local $ENV{PERL_STRICT} = 1;` ΛίʔυʹೖΕͯܕνΣοΫΛ༗ޮʹͯ͠ΈΔ(౰࣌͸͜ͷঢ়ଶͩͬͨ)
    $ carton exec perl -Ilib tmp/graphql_benchmark.pl bench 47bIg
    Benchmark: timing 10 iterations of default…
    default: 7 wallclock secs ( 6.57 usr + 0.07 sys = 6.64 CPU) @ 1.51/s (n=10)
    Rate default
    default 1.51/s --

    View Slide

  17. ͍͔ͭ͘ͷબ୒ࢶ
    • GraphQLΛ࠾༻͢Δ৔߹
    • Perl ͷ··Ͱ GraphQL Λߴ଎Խ͢Δ
    • GraphQLΛίετ௿ΊʹฦͤΔϥΠϒϥϦ͕͋Δݴޠʹ৐Γ׵͑Δ
    • ͦΕҎ֎Λ࠾༻͢Δ৔߹
    • PerlͰѻ͑ΔൣғͷAPIతͳ΋ͷʹ͢Δ
    • XslateͰMPAʹ໭Δ

    View Slide

  18. GraphQLҎ֎ͷ՝୊: εέʔϦϯάੑ
    • ೾͕͋ΔτϥϑΟοΫ΁ͷରԠ
    • όοΫΤϯυDB͕Aurora MySQLͳͷͰɺखಈͰεέʔϧΞοϓ/Πϯ
    ͯ͠ෛՙʹରԠ͍ͯͨ͠
    • => ӡ༻ͷख͕ؒ͠ΜͲ͍ͷͰɺࣗಈͰਫฏεέʔϧ͢Δσʔλε
    τΞʹҠߦ͍ͨ͠Ϟνϕʔγϣϯ
    • ྫ͑͹DynamoDBͱͳΔ͕ɺPerlͰDynamoDBΛѻ͏ϊ΢ϋ΢͕ͳ͍

    View Slide

  19. Πϕϯτʹ࢖ΘΕΔαʔϏεͳͷͰ
    τϥϑΟοΫͷ೾͕େ͖͍

    View Slide

  20. GraphQLҎ֎ͷ՝୊: ੩తܕ͕ͳ͍ݴޠ͕ਏ͍
    • τʔφϝϯτදͷߏங͸ൺֱతෳࡶͳϓϩάϥϛϯάΛཁٻ͞ΕΔํ
    • εΠευϩʔͷOMW%, μϒϧΤϦϛͷഊऀαΠυͷ഑ஔͳͲ
    • ෳࡶͳϩδοΫΛ૊Ήͷʹܕ͕͋Δͱ”҆৺”͢Δ
    • ΋ͪΖΜςετ΋ඞཁ

    View Slide

  21. ͱ͍͏Θ͚ͰGo͕࢖͍͍ͨ
    • GraphQL => gqlgenͱ͍͏εΩʔϚϑΝʔετͰ੩తܕνΣοΫΛ
    ߦ͏ϥΠϒϥϦ
    • ਫฏεέʔϦϯάՄೳͳDBΛ࢖͍͍ͨ => Go͸ެࣜAWS SDK͕͋
    ΓɺDynamoDBΛѻ͏ͨΊͷϥούʔϥΠϒϥϦ΋͋Δ
    • ੩తܕ͕ͪΐ͏Ͳ͍͍ײ͡ʹଘࡏ͢Δ
    • ͳʹΑΓνʔϜϝϯόʔ͕աڈʹ࢖ͬͨ͜ͱ͕͋ΔݴޠͰ͋Δ

    View Slide

  22. Ͳ͏GoΛ૊ΈࠐΉ͔ʁ
    • શ෦Goʹ͢Δͱʁ
    • ࠓ·Ͱೖ͍ͬͯΔDBʹೖ͍ͬͯΔσʔλΛͲ͏͢Δͷ͔
    • શ෦GoͰ࣮૷͠ऴΘΔ·Ͱ৽ن։ൃΛࢭΊΔͷ͔
    • => ݁ߏ೉͍͠
    • Ұ෦͚ͩGoʹ͍ͨ͠
    • ͕ͩDBΛڞ༗͸ͨ͘͠ͳ͍ DynamoDBʹ͍ͨ͠

    View Slide

  23. ϚΠΫϩαʔϏε΁෼ׂ͢Δ

    View Slide

  24. ҰൠతͳϚΠΫϩαʔϏεͷޮೳ
    • ݸʑͷΞϓϦέʔγϣϯͷ੹຿Λখ͘͞อͯΔ
    • ΞδϦςΟ͕ߴ͘ͳΔ
    • ΞϓϦέʔγϣϯ͝ͱʹద੾ͳΞʔΩςΫνϟΛબ΂Δ
    • ؔ৺͝ͱʹνʔϜΛ෼ׂ͢Δ͜ͱ͕༰қʹͳΔ
    • etc…

    View Slide

  25. ϚΠΫϩαʔϏεΛ΍Γ͔ͨͬͨͱ͍͏ΑΓ
    ͦΕҎ֎ͷྑ͍બ୒ࢶ͕ͳ͔ͬͨͷͰ΍ͬͨ
    • ϚΠΫϩαʔϏεΛબ୒͢Δͷʹ્֐͢Δཁૉ
    • νʔϜ΋෼ׂ͢Δ΄Ͳن໛͕େ͖͘ͳ͍
    • ͚Ͳɺݱঢ়ͷΞʔΩςΫνϟͰ͸ղܾͰ͖ͳ͍՝୊͕͋Δ
    • ࠷ऴతʹ͸ϞδϡϥϞϊϦεʹ߹ମ͢ΔՄೳੑ΋͋Δͱ͸ࢥ͍ͬͯΔ

    View Slide

  26. ͦ΋ͦ΋ϞδϡϥϞϊϦεͩͬͨͷͰ
    ෼ׂ͠΍͔ͬͨ͢
    • ઌਓ͕TonamelΛϞδϡϥϞ
    ϊϦεͰ࡞ͬͯ͘Ε͍ͯͨ
    • ෼ׂ͢ΔͨΊͷػೳͷڥք͕
    ͢Ͱʹଘࡏ͍ͯͨ͠

    View Slide

  27. Ͱ͸Ͳ͏΍͍͔ͬͯ͘

    View Slide

  28. ୈ2ষ
    ॳΊͯͷαʔϏε෼ׂ

    View Slide

  29. ॳखɺԿΛ੾Γग़͔͢

    View Slide

  30. ͸͡Ίʹ੾Γग़͢ͱྑ͍ͱ͞ΕΔαʔϏεͷ৚݅
    • ͋Δఔ౓αʔϏε͕ʮڥք͚ͮΒΕͨίϯςΩετʯʹͦͬͯ෼ղ͞
    Ε͍ͯΔલఏͰҎԼ
    • ଞͷίϯςΩετ͔Βͷґଘ͕গͳ͍ => ෼ղ͠΍͍͢
    • ϩʔϧόοΫ͕͠΍͍͢ => ࡉ͔͘ϦϦʔεͰ͖Δ
    • ෼ղʹΑΔརӹ͕େ͖͍

    View Slide

  31. ༏ઌॱҐ෇͚৅ݶ
    ʮϞϊϦε͔ΒϚΠΫϩαʔϏε΁ʯΛࢀߟʹ

    View Slide

  32. ͳͥτʔφϝϯτද͔
    • GraphQLͷϨεϙϯελΠϜΛվળ͔ͨͬͨ͠ͷ͸τʔφϝϯτද
    • => ෼ղʹΑΔརӹ͕͋Δ
    • τʔφϝϯτදʹ͍ͭͯ৽ػೳ(μϒϧΤϦϛωʔγϣϯ)ͷ࣮૷͕༧ఆ͞Ε͍ͯͨ
    • => ৽ػೳΛ΍ΔҰ؀ͱͯ͠ϚΠΫϩαʔϏεͷ෼ղ͕ߦ͑Δ
    • τʔφϝϯτද͸΄͔ͷαʔϏεʹґଘ͢ΔαʔϏεͳͷͰɺґଘ͞ΕΔଆͰ͸
    ͳ͍
    • => ෼ղͷ͠΍͢͞

    View Slide

  33. ΍্ͬͨͰ͜ͷ൑அͷৼΓฦΓ
    • ৽ػೳͷҰ؀ͱͯ͠෼ղΛߦ͏ͷ͸͋·ΓಘࡦͰ͸ͳ͍
    • ϩʔϧόοΫ͕ͮ͠Β͘ͳΔ
    • ։ൃνʔϜ֎͔Βͷਐḿͷݟͨ໨͕ѱ͍
    • ໌ࣔతʹػೳͷϚΠΫϩαʔϏε΁ͷ࠶࣮૷Λ΍͍ͬͯΔͱ͍͏
    ͷΛݴͬͨ΄͏͕ྑ͍
    • ϦϦʔε͕ϏοάόϯʹͳΓ͕ͪ(͋Δఔ౓؇࿨ࡦ͸͋Δ)

    View Slide

  34. طଘͷϦΫΤετͱ
    ৽τʔφϝϯτදϦΫΤετͷ
    ෼͚ํ

    View Slide

  35. GraphQLΤϯυϙΠϯτΛ෼͚Δ

    View Slide

  36. Ϣʔβʔ৘ใ͸ϔομʹJWTͰຒΊࠐΉ
    • ϞϊϦεͰड͚ͨϦΫΤετͷCookie͔ΒϦΫΤετϢʔβʔͷ
    ηογϣϯ৘ใΛऔΓग़͢
    • ͜͜·Ͱ͸ैདྷ·Ͱ͋Δಈ࡞
    • `X-Awesome-Authentication: ` ͷΑ͏ͳHTTPϔομʹJWTϊ
    ܗͰೖΕΔ
    • ϓϩΩγͰBodyΛ͍ͬͨ͡ΓಡΜͩΓ͸ͨ͘͠ͳ͍

    View Slide

  37. ͞ΒʹύεΛ෼͚ͯ
    Ϣʔβ×େձͷݖݶ৘ใ΋෇༩

    View Slide

  38. GraphQLͷύεΛେձ͝ͱʹ෼͚Δ
    ྫ: େձID=XXXXX ͷ৔߹
    POST /new_awesome/graphql/XXXXX
    ͜ΕͰBodyΛಡ·ͳͯ͘΋
    τʔφϝϯτදαʔϏε͕ΞΫηεϢʔβͷݖݶΛ஌ΕΔ

    View Slide

  39. ͿͬͪΌ͚Δͱ͜Ε͸͓͢͢ΊͰ͸ͳ͍
    • GraphQL͸ΤϯυϙΠϯτ͕Ұݸʹ·ͱ·Δͷ͕͍͍ͱ͜ΖͷҰͭ
    • ΫϥΠΞϯταΠυ΋ෳ਺ݸʹ෼͔ΕΔͷ͸ରԠ͍ͯ͠ͳ͍͜ͱ͕
    ଟ͍
    • ΋ͬͱ΄͔ʹ΍Γํ͸͕͋ͬͨɺޙड़͢Δେ౷Ұʹ࣋ͪӽ͍ͯ͠Δ
    • ผղ: ύʔεޙʹผͷAPIʹେձ৘ใ+ݖݶ৘ใ໰͍߹Θͤ + େձ
    αʔϏεΛઌʹ࡞Δ

    View Slide

  40. Ͱ͸ͲͷΑ͏ʹ
    ຊ൪ʹೖΕΔ͔

    View Slide

  41. ͓खܰʹαΠυΧʔʹͨ͠

    View Slide

  42. αΠυΧʔʹ͢ΔϝϦοτɾσϝϦοτ
    • ϝϦοτ
    • Πϯϑϥ͕ෳࡶʹͳΒͳ͍, ௥Ճ͢Δखؒ΋͍҆
    • εέʔϧΞ΢τ΋ϞϊϦεͱҰॹʹ͢Δ => ෛՙ͕ಡΊͳ͍ͱ͖ʹศར
    • σϝϦοτ
    • ECS Taskͷ10ίϯςφ੍ݶΛ௒͑Δ͜ͱ͸ग़དྷͳ͍
    • αʔϏεͷधཁʹ߹ΘͤͯݸผʹεέʔϧΞ΢τ͕ग़དྷͳ͍

    View Slide

  43. ͯ͞ϦϦʔε…
    ͕ͩ💥Ϗοάόϯ💥Λආ͚͍ͨ

    View Slide

  44. ϕετϓϥΫςΟε: 💥Ϗοάόϯ💥Λආ͚Δ
    • ͜ͷ৔߹ͷϏοάόϯͱ͸
    • ͍͖ͳΓ৽࣮૷ͨ͠ϚΠΫϩαʔϏεʹαʔϏεશମΛ੾Γସ͑Δ
    • ϏοάόϯͷσϝϦοτ
    • ੾Γ໭͕͠ࠔ೉ʹͳΔ
    • ϦϦʔε୯Ґ͕େ͖͘ͳΔ => ݁ՌతʹσϦόϦʔ͕஗͘ͳΔ

    View Slide

  45. τʔφϝϯτදαʔϏεͰߦͬͨ͜ͱ
    • Ұ෦ͷϢʔβʹݶఆػೳͱͯ͠࢖͑ΔΑ
    ͏ʹఏڙ
    • ϑΟʔυόοΫΛ΋Β͍΍͍͢Ϣʔ
    βʹݶఆͯ͠ఏڙͰ͖Δ
    • େ͖ͳେձΛආ͚ͯఏڙ͢Δ
    • چτʔφϝϯτදػೳ΋ฒߦͯ͠ఏڙ
    ͠ଓ͚Δ
    • ໰୊͕͋Ε͹ݹ͍ํΛ࢖ͬͯ΋Β͏

    View Slide

  46. β൛தʹߦͬͨ͜ͱ
    • ຊ൪ͰΤϥʔϩά͕ग़ͨΒ͙͢ʹ௚͢
    • σʔλͿͬյΕܥ͸޾͍ʹ΋গͳ͔ͬͨ(͋Δʹ͸͕͋ͬͨ)
    • ن໛͕େ͖ΊͷେձͰ࢖ΘΕͯͨΒ؂ࢹ͍ͯ͠ΔϝτϦοΫΛݟΔ
    • DynamoDBΛॳΊͯ࢖͍ͬͯͨͷͰෛՙ܏޲͕Θ͔Βͳ͔ͬͨͷ΋
    ͋Δ
    • ༷ʑ௚ͯ͠େৎ෉ͦ͏ͳͷͰਖ਼ࣜϦϦʔε΁

    View Slide

  47. ͍Ζ͍Ζ͕͋ͬͨ׬੒ͨ͠ʂ

    View Slide

  48. Ͱ΋͜Ε͚ͩͩͱͨͩͷ
    Polyglotߏ੒ͩΑͶ

    View Slide

  49. ୈ3ষ
    ϚΠΫϩαʔϏε
    ͨͪͷ࿈ܞํ๏

    View Slide

  50. τʔφϝϯτදαʔϏεҎ߱ͷ։ൃํ਑
    • GoΛؚΊͨpolyglotͰ΍ΕΔ͜ͱ͕Θ͔ͬͨͷͰҎԼͷํ਑ʹ͢Δ
    • ৽ػೳ͸͢΂ͯϚΠΫϩαʔϏεଆʹ࣮૷͢Δ
    • طଘػೳͷվम͸PerlϞϊϦε΁ͷ࣮૷͕ۃ୺ʹૣ͍৔߹͸ͦͪΒ
    ʹ࣮૷͢Δɻͦ͏Ͱͳ͍৔߹͸ϚΠΫϩαʔϏεଆ΁

    View Slide

  51. ࣍͸ԿΛ੾Γग़͢ͷ͔

    View Slide

  52. ༏ઌॱҐ෇͚৅ݶ

    View Slide

  53. ༏ઌॱҐ෇͚৅ݶ(Update൛)

    View Slide

  54. εϙϯαʔػೳΛ࡞Δ͜ͱʹͳͬͨ

    View Slide

  55. εϙϯαʔػೳͱ͸
    • େձϖʔδʹ޿ࠂΛࡌͤΒΕΔػೳ
    • ޿ࠂ࿮͸ओ࠵ஂମ͕ืूͯ͠ɺ޿ࠂ
    ओ͕ओ࠵ஂମʹ͓ۚΛ෷͏͜ͱͰࡌ
    ͤͯ΋Β͑Δ

    View Slide

  56. ઃܭํ਑
    • εϙϯαʔαʔϏεͱܾࡁαʔϏεͷ2ͭʹ෼ׂ͢Δ
    • εϙϯαʔαʔϏεͷ੹຿ => େձʹඥͮ͘εϙϯαʔͷ؅ཧ
    • ਃ੥಺༰΍ঝೝϑϩʔɺऔΓԼ͛ͳͲΛ͔ͭ͞ͲΔ
    • εϙϯαʔ͕ԿΛ൐ͬͯਃ੥͞ΕΔ͔͸͋·Γؾʹ͠ͳ͍
    • ܾࡁαʔϏε => StripeΛ༻͍ͨ͋Δਓ͔Β͋Δਓ΁ͷࢧ෷͍ͷ؅ཧ
    • Կͷࢧ෷͍͔͸ܾࡁαʔϏε͸͋·Γؾʹ͠ͳ͍

    View Slide

  57. εϙϯαʔػೳͷσʔλͷྲྀΕ

    View Slide

  58. ͜͏ݴ͏ਤΛ࠷ॳʹॻ͘ͷ͸
    ͓͢͢Ίʂ

    View Slide

  59. Domain Event
    • ৽τʔφϝϯτදαʔϏε࣮૷Ҏલ͔Β͋ΔඇಉظδϣϒΛҕৡ͢ΔͨΊ
    ͷػߏͱͯ͠Domain Eventͱݴ͏֓೦Λ༻ҙͨ͠
    • ࣮૷ৄࡉతʹ͸HTTPͰLambdaΛୟ͘ͱSQSʹΤϯΩϡʔ͞Εͯɺϝο
    ηʔδΛผͷLambda͕ىಈͯ͠ɺ֤ϚΠΫϩαʔϏεͷhandlerʹϝο
    ηʔδΛ഑৴͢Δ
    • ϝοηʔδ͸ʮ○○͕ىͬͨ͜ʂʯͱ͍͏ײ͡Ͱpublish͞Ε͍ͯΔ
    • ʮ˓˓Λͯ͘͠Εʯͱ͍͏ײ͡Ͱ͸ͳ͍

    View Slide

  60. େձ࡞੒࣌ͷϝοηʔδ഑৴
    εϚʔτΤϯυϙΠϯτɾμϜύΠϓతͳࢥ૝

    View Slide

  61. εϙϯαʔػೳͷͦͷଞ
    • σʔλετΞ͸MySQL
    • τʔφϝϯτදαʔϏε΄ͲͷεέʔϧΞ΢τੑೳ͸͍Βͳ͍
    • ৔਺౿ΜͰͯࣾ಺Ͱ΋ൺֱతѻ͑Δਓ͕ଟ͍MySQLΛ࢖͏
    • ΞʔΩςΫνϟ͸Active Recordύλʔϯ
    • τʔφϝϯτදαʔϏε͸Clean Architecture

    View Slide

  62. ͜Ε΋ͳΜͱ͔ϦϦʔεʂ

    View Slide

  63. ·ͱΊͱࠓޙͷల๬

    View Slide

  64. ϚΠΫϩαʔϏε͸खஈͰ͋Γ໨తͰ͸ͳ͍
    • TonamelʹͱͬͯϚΠΫϩαʔϏε͸ҎԼͷ՝୊Λղܾ͢Δखஈ
    • ݱࡏͷαʔϏεΛࢭΊͣʹஞ࣍৽ػೳΛ௥Ճ͢Δ
    • ϞϊϦεଆͷ࠾༻ٕज़Ͱग़དྷͳ͔ͬͨ͜ͱΛॊೈʹಋೖ͢Δ
    • ࣌ظ͕དྷΕ͹શ෦·ͨϞδϡϥϞϊϦε΁߹ମ͢Δͷ΋ݕ౼
    • νʔϜ͕ෳ਺ʹͳΔ͙Β͍େ͖͘ͳΔ͔Ͳ͏͔
    • ࡞Δ΋ͷ͕ਖ਼͍͔͠Θ͔ΒΜॳظ͸ϞϊϦεͷ΄͏͕଎͍Ͱ͢
    • ϞϊϦε͔Β੾Γग़͢৔߹ɺਖ਼͘͠ಈ͘΋ͷ͕ͦ͜ʹ͋Δ͔Β࡞Δͷ͕ૣ͘ͳΔ

    View Slide

  65. ࠓޙͷల๬
    • Apollo Federationͷಋೖ
    • PerlϞϊϦε, τʔφϝϯτද, εϙϯαʔ, ܾࡁͱ͢΂ͯGraphQL
    ͕෼͔Ε͍ͯΔͷΛ౷߹͢ΔͨΊͷιϦϡʔγϣϯ
    • ϞϊϦεʹ͋Δ͢΂ͯͷػೳΛϚΠΫϩαʔϏε΁෼ׂ
    • ݱࡏ΋Ҡ২࡞ۀதͷ΋ͷ͋Γ

    View Slide

  66. Any Questions?

    View Slide

  67. ࢀߟʹͨ͠΋ͷ
    • ʮϞϊϦε͔ΒϚΠΫϩαʔϏε΁ʯSam Newman ஶ, ౡా ߒೋ ༁
    • ͜ͷࢿྉΛ࡞Δࡍʹࢀরɻ΍͖ͬͯͨ͜ͱͷཧ࿦෇͚΍આ໌ʹ༻͍
    ͨɻ͜ͷຊͰΞϯνύλʔϯͱ͞Ε͍ͯΔ͜ͱ΋ɺTonamelͰ͸(ؾ
    ͔ͮͣʹ)ߦ͍ͬͯΔɻ

    View Slide

  68. ิҨ
    ಠཱσϓϩΠՄೳੑ

    View Slide

  69. ϚΠΫϩαʔϏεͰ͜Ε΍ͬͱ͍ͨ΄͏͕͍͍
    ͧͬͯ΍ͭ
    • ʮϞϊϦε͔ΒϚΠΫϩαʔϏε΁ʯͱ͍͏ຊʹॻ͔Ε͍ͯΔ
    ຊॻ͔ΒಘΒΕΔ΋ͷ͕͚ͭͩͩͱͨ͠Βɺ
    ͦΕ͸ʮϚΠΫϩαʔϏεʹಠཱσϓϩΠՄೳੑ
    ͷ֓೦Λ࣮֬ʹऔΓೖΕΑ͏ʯͱ͍͏͜ͱͩɻ

    View Slide

  70. ಠཱσϓϩΠՄೳੑ
    🤔

    View Slide

  71. ಠཱσϓϩΠՄೳੑͱ͸
    • ʮ͋ΔϚΠΫϩαʔϏεʹର͢ΔมߋΛɺଞͷαʔϏεʹӨڹΛ༩͑
    Δ͜ͱͳ͘ຊ൪؀ڥͰϓϩΠͰ͖Δͱݴ͏ߟ͑ํͩɻʯ
    • by ʮϞϊϦε͔ΒϚΠΫϩαʔϏε΁ʯ
    • αʔϏεAΛมߋͨ͠ͱ͖ʹɺҰॹʹαʔϏεB΋มߋ͠ͳ͍ͱ͍͚
    ͳ͍ʂͱ͍͏ͷ͸ಠཱ͍ͯ͠ͳ͍
    • => ϚΠΫϩαʔϏεͰ͸ͳ͘”෼ࢄϞϊϦε”ͱ͍͏͜ͱʹ

    View Slide

  72. ಠཱσϓϩΠՄೳੑͷద༻
    • TonamelͰ͸ͦ͜·Ͱ׬શͳಠཱੑΛ୲อͰ͖͍ͯͳ͍
    • τʔφϝϯτදαʔϏε͸PerlϞϊϦεͷαΠυΧʔલఏͷ࡞Γ
    • εϙϯαʔαʔϏεͱܾࡁαʔϏε͸΄ͱΜͲͷ௨৴͕Eventܦ༝
    • ඇಉظΠϕϯτ͸ରԠ͢Δϋϯυϥʔ͕࣮૷͞Εͯͳ͚Ε͹ແࢹ͢
    Δ͚ͩͳͷͰಠཱσϓϩΠՄೳੑ͕͋Δ

    View Slide

  73. ಠཱσϓϩΠՄೳੑΛୡ੒͢ΔͨΊͷઓུ
    • αʔϏεؒͷґଘؔ܎ΛDAG(༗޲ඇ८ճάϥϑ)Ͱఆٛ
    • αʔϏεؒAPIʹඇޓ׵͕ൃੜ͢Δ৔߹
    • ґଘ͞ΕΔଆ͸ޙํޓ׵ੑΛߟྀ͢Δ
    • deprecatedͳkeyΛҠߦظؒ͸αϙʔτ͢ΔͳͲ
    • ґଘ͢Δଆ͸ޓ׵ੑΛߟྀͤͣ࢖͏

    View Slide

  74. αʔϏεؒґଘؔ܎ͷDAG

    View Slide

  75. “جຊతʹ͸”
    ಉ࣌ʹߋ৽͕ඞཁͰ͋ͬͯ΋
    ґଘ͞ΕΔଆ͔ΒσϓϩΠ͢Ε͹OK
    σϓϩΠ෼͚Ε͹͍͍͚ΕͲݕূͳͲͷؔ܎Ͱػೳ୯ҐͰσϓϩΠ͕ͪ͠

    View Slide

  76. TonamelͷσϓϩΠϑϩʔ
    • લఏ: αʔόɾϑϩϯτΤϯυɾΠϯϑϥ͢΂ͯҰͭͷϨϙδτϦ
    (monorepo)Ͱ؅ཧ͍ͯ͠Δ
    • ϦϙδτϦ͕෼ࢄͯ͠ͳ͍ͷͰɺmasterϒϥϯνͰϩʔΧϧ؀ڥΛ
    ཱͯͨΒͦͷ··ຊ൪ՔಇͷαʔϏεͱΠίʔϧͷ΋ͷ͕ಘΒΕΔ
    • ͦΕͧΕͷαʔϏε͸ಠཱͨ͠ECSαʔϏε΁σϓϩΠ͞ΕΔ
    • σϓϩΠπʔϧ͸kayac/ecspresso

    View Slide

  77. monorepoͳͷͰ
    શ෦ͷαʔϏεΛͲʔΜͱ΍Δͧʂ

    View Slide

  78. ຖճશ෦ͷαʔϏεΛ
    σϓϩΠ͍ͯ͠Δͱ஗͍ʂ

    View Slide

  79. ෼ࢄϞϊϦε͸σϓϩΠ͕஗͘ͳΔ
    • σϓϩΠ͢Δͱ͖ʹ͢΂ͯͷαʔϏεΛ͋Δॱ൪ʹԊͬͯσϓϩΠ͠
    ͳ͍ͱ͍͚ͳ͍ͱͳΔͱɺσϓϩΠʹඇৗʹ͕͔͔࣌ؒΔ
    • ϩʔϦϯάσϓϩΠͷ৔߹ Blue/Greenͷ৔߹͸ૣ͍͔΋
    • σϓϩΠ͕஗͘ͳΔͱϩʔϧόοΫ΋஗͘ͳΔ͜ͱ͕ଟ͍͠ɺԿΑΓ
    ػೳͷσϦόϦʔʹ͕͔͔࣌ؒΓɺϦϦʔε΋Ϗοάόϯ͡Όͳ͍ͱ
    ΋͍ͬͨͳ͍Έ͍ͨʹͳͬͯྑ͘ͳ͍

    View Slide

  80. େମͰಠཱσϓϩΠՄೳͳͷͰ
    ߋ৽͞ΕͨαʔϏε͚ͩͰϓϩΠͯ͠
    ͋ͱ͸σϓϩΠεΩοϓ͢Ε͹͍͍ͷ
    Ͱ͸ʁ

    View Slide

  81. σϓϩΠεΩοϓઓུ
    • ECSʹ࢖͏ίϯςφΠϝʔδͷߋ৽ΛɺʮαʔϏε͕ґଘ͢Δ
    repository಺ͷಛఆͷσΟϨΫτϦ͕ߋ৽͞Ε͍ͯͨΒʯʹ͢Δ
    • ٖࣅతʹpolyrepoతͳcommit hashΛಘͯλάʹ࢖͏
    • ຊ൪؀ڥͱσϓϩΠ༧ఆͷcommit hashؒͰECS Task Definitionͷࠩ
    ෼͕͋Ε͹σϓϩΠ͢Δ
    • ecspresso diff Λ࢖ͬͯdiffΛ֬ೝ

    View Slide

  82. σϓϩΠͷ༷ࢠ

    View Slide