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

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

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. Tonamelͷن໛ײ         -PCJ5PVSOBNFOU

    ޙͷ5POBNFM  ։ൃ։࢝ 5POBNFMʹ໊લ͕มߋ 1FSMͷߦ਺ߦ ͭͳ͗͜ΈͰएׯ૿Ճ 1FSMͷߦ਺ߦ (P੡ϚΠΫϩαʔϏεº (Pͷߦ਺ߦ ͏ͪίʔυੜ੒ߦ
  2. ݱࡏͷ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 --
  3. GraphQLҎ֎ͷ՝୊: εέʔϦϯάੑ • ೾͕͋ΔτϥϑΟοΫ΁ͷରԠ • όοΫΤϯυDB͕Aurora MySQLͳͷͰɺखಈͰεέʔϧΞοϓ/Πϯ ͯ͠ෛՙʹରԠ͍ͯͨ͠ • =>

    ӡ༻ͷख͕ؒ͠ΜͲ͍ͷͰɺࣗಈͰਫฏεέʔϧ͢Δσʔλε τΞʹҠߦ͍ͨ͠Ϟνϕʔγϣϯ • ྫ͑͹DynamoDBͱͳΔ͕ɺPerlͰDynamoDBΛѻ͏ϊ΢ϋ΢͕ͳ͍
  4. ͱ͍͏Θ͚ͰGo͕࢖͍͍ͨ • GraphQL => gqlgenͱ͍͏εΩʔϚϑΝʔετͰ੩తܕνΣοΫΛ ߦ͏ϥΠϒϥϦ • ਫฏεέʔϦϯάՄೳͳDBΛ࢖͍͍ͨ => Go͸ެࣜAWS

    SDK͕͋ ΓɺDynamoDBΛѻ͏ͨΊͷϥούʔϥΠϒϥϦ΋͋Δ • ੩తܕ͕ͪΐ͏Ͳ͍͍ײ͡ʹଘࡏ͢Δ • ͳʹΑΓνʔϜϝϯόʔ͕աڈʹ࢖ͬͨ͜ͱ͕͋ΔݴޠͰ͋Δ
  5. ͳͥτʔφϝϯτද͔ • GraphQLͷϨεϙϯελΠϜΛվળ͔ͨͬͨ͠ͷ͸τʔφϝϯτද • => ෼ղʹΑΔརӹ͕͋Δ • τʔφϝϯτදʹ͍ͭͯ৽ػೳ(μϒϧΤϦϛωʔγϣϯ)ͷ࣮૷͕༧ఆ͞Ε͍ͯͨ • =>

    ৽ػೳΛ΍ΔҰ؀ͱͯ͠ϚΠΫϩαʔϏεͷ෼ղ͕ߦ͑Δ • τʔφϝϯτද͸΄͔ͷαʔϏεʹґଘ͢ΔαʔϏεͳͷͰɺґଘ͞ΕΔଆͰ͸ ͳ͍ • => ෼ղͷ͠΍͢͞
  6. αΠυΧʔʹ͢ΔϝϦοτɾσϝϦοτ • ϝϦοτ • Πϯϑϥ͕ෳࡶʹͳΒͳ͍, ௥Ճ͢Δखؒ΋͍҆ • εέʔϧΞ΢τ΋ϞϊϦεͱҰॹʹ͢Δ => ෛՙ͕ಡΊͳ͍ͱ͖ʹศར

    • σϝϦοτ • ECS Taskͷ10ίϯςφ੍ݶΛ௒͑Δ͜ͱ͸ग़དྷͳ͍ • αʔϏεͷधཁʹ߹ΘͤͯݸผʹεέʔϧΞ΢τ͕ग़དྷͳ͍
  7. ઃܭํ਑ • εϙϯαʔαʔϏεͱܾࡁαʔϏεͷ2ͭʹ෼ׂ͢Δ • εϙϯαʔαʔϏεͷ੹຿ => େձʹඥͮ͘εϙϯαʔͷ؅ཧ • ਃ੥಺༰΍ঝೝϑϩʔɺऔΓԼ͛ͳͲΛ͔ͭ͞ͲΔ •

    εϙϯαʔ͕ԿΛ൐ͬͯਃ੥͞ΕΔ͔͸͋·Γؾʹ͠ͳ͍ • ܾࡁαʔϏε => StripeΛ༻͍ͨ͋Δਓ͔Β͋Δਓ΁ͷࢧ෷͍ͷ؅ཧ • Կͷࢧ෷͍͔͸ܾࡁαʔϏε͸͋·Γؾʹ͠ͳ͍