新規事業立ち上げからマイクロサービスについて考えてみる

Aa777465acd82d13333678f3fc082c59?s=47 Spring_MT
August 30, 2018

 新規事業立ち上げからマイクロサービスについて考えてみる

Aa777465acd82d13333678f3fc082c59?s=128

Spring_MT

August 30, 2018
Tweet

Transcript

  1. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Copyright (C)

    2018 DeNA Co.,Ltd. All Rights Reserved. Aug 30, 2018 Spring_MT ৽نࣄۀ্ཱ͔ͪ͛ΒϚΠΫϩαʔϏεʹ͍ͭ ͯߟ͑ͯΈΔ
  2. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. ࣗݾ঺հ •

    ⾃⼰紹介 2 l 2008年 DeNA⼊社 l 2010年 エンジニアになる l 2011年 DeNA退社 -> 福岡へ l 2013年 DeNAに出戻り l 2016年 ゲーム事業本部 l 2017年 コマース&インキュベーション事業本部 GitHub https://github.com/SpringMT Twitter https://twitter.com/Spring_MT @Spring_MT
  3. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. • 新規事業

    -> 新しいシステム • マイクロサービスアーキテクチャの中では新規システム はよりモノリシックにすることが勧めらている。 w 0A3&*--:ϚΠΫϩαʔϏεΞʔΩςΫνϟ Q͋ͨΓ 新規事業 3
  4. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. • 新しいシステムではサービス境界が定まっていないので、

    間違って分割するとあとがつらい。。 • 分散モノリスみたいのは最悪ケース なぜか 4
  5. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 5 •

    以上
  6. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 6 •

    だと意味ないので
  7. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 新規事業を⽴ち上げるときにどうしておく? 7

  8. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. • 早いサイクルの改善が求められる

    w ίʔυΛमਖ਼͢Δස౓͕ଟ͍ w Өڹൣғ͕ා͔ͬͨΓ͠·ͤΜ͔ʁ 新規事業を⽴ち上げるときにどうしておく? 8
  9. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. • デプロイの容易性

    w ϞϊϦγοΫͩͱमਖ਼͕খͯ͘͞΋ΞϓϦέʔγϣϯશମΛσϓϩΠ͠ͳ ͚Ε͹ͳΒͣɺӨڹ͕େ͖͘ϦεΫ͕ߴ͘ͳΔ • 回復性 w ϞϊϦγοΫͩͱಛఆͷΤϯυϙΠϯτʹશମ͕Ҿ͖ͮΒΕΔ • 技術特異性 w ผͷݴޠͱ͔ϛυϧ΢ΣΞͱ͔࢖͍͍ͨ マイクロサービスにしたいと思うとき 9
  10. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. • でもこれってマイクロサービスにしたときに受けられる

    恩恵であって、マイクロサービスの分割単位ではない • この単位で分けるとマイクロサービスっぽいものができ る w ϚΠΫϩαʔϏεʹࣦͯ͠ഊ͍͍ͨͬͯͬͯ͠Δͷ͍͍ͩͨ͜͏ͳͷͰ ͸ʁ マイクロサービスにしたいと思うとき 10
  11. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. • 境界づけられたコンテキストで分割する

    w ͜ͷ୯Ґʹ͓͍ͯ͸ɺٕज़ΞʔΩςΫνϟ͕෺ཧతʹ෼ׂ͑͠Δ マイクロサービスの分け⽅の前提 11
  12. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. • トランザクション境界も分かれるはず

    w ΞʔΩςΫνϟ্ͷτϥϯβΫγϣϯͷ݁߹ͷྗ͸ڧྗ w ڥք͚ͮΒΕͨίϯςΩετΛ·͍ͨͰτϥϯβΫγϣϯͰ݁߹͞Ε͍ͯ Δͱ͜Ζ͸ཁ஫ҙ w ͭ·ΓτϥϯβΫγϣϯ಺ͷॲཧʹ஫໨͓ͯ͘͠ w τϥϯβΫγϣϯ͕෼ׂෆՄͱ͍͏͜ͱ͸ίϯςΩετ͸෼͚ ΒΕͳ͍ 境界づけられたコンテキストで分割すると 12
  13. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. • 新規サービス⽴ち上げのときから意識できる

    w ͻͱ͔ͨ·ΓͰѻ͍͍ͨσʔλ͕ݦࡏԽ͢Δ w গͳ͘ͱ΋ͦͷσʔλ͸ґଘ͕ੜ·ΕΔ w ͜ͷσʔλ͸ಉ͡մͰѻ͏΂͖͔ߟ͑Δ トランザクション境界 13
  14. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. • データベースを分ける

    w ෼͚ͨޙͷ੔߹ੑͷͱΓํ͸͍Ζ͍Ζ͋Δ͕ɺԿ͸ͱ΋͋Εෳ਺σʔλ ϕʔεΛѻ͏͜ͱͱͳΔ w ͜͜ͰτϥϯβΫγϣϯΛ෼͚Δͱ໰୊ʹͳΔͱ͜ΖΛચ͍ग़͢ トランザクション境界を分けるということ 14
  15. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. • Railsだと

    w ෳ਺%#ͬͯجຊతʹαϙʔτͯ͠ͳ͍ w ෳ਺%#ʹରԠ͢Δʹ͸ʁ w 3BJMͷϓϩδΣΫτ෼͚Δ w "DUJWF3FDPSEΛෳ਺%#Ͱ΋࢖͑ΔΑ͏ʹ͢Δ 複数DBの扱い 15
  16. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. • もちろん最初はモノリシックで

    w ෳ਺%#Ͱ΋Ͱ͖ΔΑ͏ʹɺPDUPQVTΛ࢖͍ͬͯΔ w ࣮ࡍʹෳ਺%#ʹ͸͍ͯ͠Δ 今のプロジェクト 16
  17. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. • 今の所、共通系統とユーザー系統でDBを分割

    w ڞ௨ܥ౷ͱϢʔβʔܥ౷ͰτϥϯβΫγϣϯΛ·͙ͨॲཧΛॻ͜͏ͱ͢Δ ͱͳʹ͔͓͔͍ͬͯ͠ࢥ͏Α͏ʹ͸ͳΔ 今のプロジェクト 17
  18. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. • 新規サービス⽴ち上げ時にマイクロサービスにする必要

    はない • トランザクション境界に注⽬して適切に分けておくと、 あとあとマイクロサービスを取り⼊れやすい(と思う) まとめ ·ͱΊ 18