Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
Aug 30, 2018
Spring_MT
৽نࣄۀ্ཱ͔ͪ͛ΒϚΠΫϩαʔϏεʹ͍ͭ
ͯߟ͑ͯΈΔ
Slide 2
Slide 2 text
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
Slide 3
Slide 3 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
• 新規事業 -> 新しいシステム
• マイクロサービスアーキテクチャの中では新規システム
はよりモノリシックにすることが勧めらている。
w 0A3&*--:ϚΠΫϩαʔϏεΞʔΩςΫνϟ Q͋ͨΓ
新規事業
3
Slide 4
Slide 4 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
• 新しいシステムではサービス境界が定まっていないので、
間違って分割するとあとがつらい。。
• 分散モノリスみたいのは最悪ケース
なぜか
4
Slide 5
Slide 5 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
5
• 以上
Slide 6
Slide 6 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
6
• だと意味ないので
Slide 7
Slide 7 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
新規事業を⽴ち上げるときにどうしておく?
7
Slide 8
Slide 8 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
• 早いサイクルの改善が求められる
w ίʔυΛमਖ਼͢Δස͕ଟ͍
w Өڹൣғ͕ා͔ͬͨΓ͠·ͤΜ͔ʁ
新規事業を⽴ち上げるときにどうしておく?
8
Slide 9
Slide 9 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
• デプロイの容易性
w ϞϊϦγοΫͩͱमਖ਼͕খͯ͘͞ΞϓϦέʔγϣϯશମΛσϓϩΠ͠ͳ
͚ΕͳΒͣɺӨڹ͕େ͖͘ϦεΫ͕ߴ͘ͳΔ
• 回復性
w ϞϊϦγοΫͩͱಛఆͷΤϯυϙΠϯτʹશମ͕Ҿ͖ͮΒΕΔ
• 技術特異性
w ผͷݴޠͱ͔ϛυϧΣΞͱ͔͍͍ͨ
マイクロサービスにしたいと思うとき
9
Slide 10
Slide 10 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
• でもこれってマイクロサービスにしたときに受けられる
恩恵であって、マイクロサービスの分割単位ではない
• この単位で分けるとマイクロサービスっぽいものができ
る
w ϚΠΫϩαʔϏεʹࣦͯ͠ഊ͍͍ͨͬͯͬͯ͠Δͷ͍͍ͩͨ͜͏ͳͷͰ
ʁ
マイクロサービスにしたいと思うとき
10
Slide 11
Slide 11 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
• 境界づけられたコンテキストで分割する
w ͜ͷ୯Ґʹ͓͍ͯɺٕज़ΞʔΩςΫνϟ͕ཧతʹׂ͑͠Δ
マイクロサービスの分け⽅の前提
11
Slide 12
Slide 12 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
• トランザクション境界も分かれるはず
w ΞʔΩςΫνϟ্ͷτϥϯβΫγϣϯͷ݁߹ͷྗڧྗ
w ڥք͚ͮΒΕͨίϯςΩετΛ·͍ͨͰτϥϯβΫγϣϯͰ݁߹͞Ε͍ͯ
Δͱ͜Ζཁҙ
w ͭ·ΓτϥϯβΫγϣϯͷॲཧʹ͓ͯ͘͠
w τϥϯβΫγϣϯׂ͕ෆՄͱ͍͏͜ͱίϯςΩετ͚
ΒΕͳ͍
境界づけられたコンテキストで分割すると
12
Slide 13
Slide 13 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
• 新規サービス⽴ち上げのときから意識できる
w ͻͱ͔ͨ·ΓͰѻ͍͍ͨσʔλ͕ݦࡏԽ͢Δ
w গͳ͘ͱͦͷσʔλґଘ͕ੜ·ΕΔ
w ͜ͷσʔλಉ͡մͰѻ͏͖͔ߟ͑Δ
トランザクション境界
13
Slide 14
Slide 14 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
• データベースを分ける
w ͚ͨޙͷ߹ੑͷͱΓํ͍Ζ͍Ζ͋Δ͕ɺԿͱ͋Εෳσʔλ
ϕʔεΛѻ͏͜ͱͱͳΔ
w ͜͜ͰτϥϯβΫγϣϯΛ͚ΔͱʹͳΔͱ͜ΖΛચ͍ग़͢
トランザクション境界を分けるということ
14
Slide 15
Slide 15 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
• Railsだと
w ෳ%#ͬͯجຊతʹαϙʔτͯ͠ͳ͍
w ෳ%#ʹରԠ͢Δʹʁ
w 3BJMͷϓϩδΣΫτ͚Δ
w "DUJWF3FDPSEΛෳ%#Ͱ͑ΔΑ͏ʹ͢Δ
複数DBの扱い
15
Slide 16
Slide 16 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
• もちろん最初はモノリシックで
w ෳ%#ͰͰ͖ΔΑ͏ʹɺPDUPQVTΛ͍ͬͯΔ
w ࣮ࡍʹෳ%#ʹ͍ͯ͠Δ
今のプロジェクト
16
Slide 17
Slide 17 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
• 今の所、共通系統とユーザー系統でDBを分割
w ڞ௨ܥ౷ͱϢʔβʔܥ౷ͰτϥϯβΫγϣϯΛ·͙ͨॲཧΛॻ͜͏ͱ͢Δ
ͱͳʹ͔͓͔͍ͬͯ͠ࢥ͏Α͏ʹͳΔ
今のプロジェクト
17
Slide 18
Slide 18 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
• 新規サービス⽴ち上げ時にマイクロサービスにする必要
はない
• トランザクション境界に注⽬して適切に分けておくと、
あとあとマイクロサービスを取り⼊れやすい(と思う)
まとめ
·ͱΊ
18