Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
カオナビにおける マイクロサービスの取組と今後の展開 / kaonavi rearchitecturing
Ryo Tomidokoro
March 15, 2022
Technology
1
1.5k
カオナビにおける マイクロサービスの取組と今後の展開 / kaonavi rearchitecturing
カオナビにおける Re Architecturing の現状、今後の方向性について
Ryo Tomidokoro
March 15, 2022
Tweet
Share
More Decks by Ryo Tomidokoro
See All by Ryo Tomidokoro
Laravel を低速化する技術 / how to slow laravel
hanhan1978
0
1.7k
俺の Laravel がこんなに速いわけがない! / My Laravel Too Fast
hanhan1978
0
590
カンファレンスで登壇するとどうなるのか? / PHPTechCafe PHPerKaigi 2022
hanhan1978
3
240
PHPでWebサーバーを作って高速化に挑戦する!/php-web-server
hanhan1978
0
220
同期的なプログラミング言語の視点から非同期処理を理解する/understand async from sync
hanhan1978
2
690
EventLoopの実装から考えるFiberの位置付けについて/Fiber and Async Request
hanhan1978
4
610
PHPで書いて覚える非同期処理 / php-async-programming
hanhan1978
5
4.2k
PHPで学ぶ Session の基本と応用 / web-app-session-101
hanhan1978
15
5.3k
ソースコードから理解するPreloadとJITの話/preload_and_jit
hanhan1978
1
1.5k
Other Decks in Technology
See All in Technology
MoT/コネヒト/Kanmu が語るプロダクト開発xデータ分析 - 分析から機械学習システムの開発まで一人で複数ロールを担う大変さ
masatakashiwagi
3
740
NGINXENG JP#2 - 3-NGINX Plus・プロダクトのアップデート
hiropo20
0
250
立ち止まっても、寄り道しても / even if I stop, even if I take a detour
katoaz
0
670
データ分析基盤の要件分析の話(202201_JEDAI)
yabooun
0
270
目指せCoverage100%! AutoScale環境におけるSavings Plans購入戦略 / JAWS-UG_SRE_Coverage
taishin
0
510
PCL (Point Cloud Library)の基本となぜ点群処理か_2023年_第2版.pdf
cvmlexpertguide
0
170
SPA・SSGでSSRのようなOGP対応!
simo123
2
150
「一通りできるようになった」その先の話
hitomi___kt
0
120
もし本番ネットワークをまるごと仮想環境に”コピー”できたらうれしいですか? / janog51
corestate55
0
380
OpenShiftクラスターのアップグレード自動化への挑戦! / OpenShift Cluster Upgrade Automation
skitamura7446
0
150
Exploring MapStore Release 2022.02: improved 3DTiles support and more
simboss
PRO
0
370
2年で10→70人へ! スタートアップの 情報セキュリティ課題と施策
miekobayashi
1
630
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
320
20k
Six Lessons from altMBA
skipperchong
15
2.3k
It's Worth the Effort
3n
177
26k
Side Projects
sachag
451
37k
YesSQL, Process and Tooling at Scale
rocio
159
12k
Fantastic passwords and where to find them - at NoRuKo
philnash
32
1.9k
Building Your Own Lightsaber
phodgson
96
4.9k
Docker and Python
trallard
30
1.9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
29
7.9k
Practical Orchestrator
shlominoach
178
8.9k
No one is an island. Learnings from fostering a developers community.
thoeni
12
1.5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
643
54k
Transcript
@hanhan1978 カオナビにおける マイクロサービスの取組と今後の展開 SaaS.tech #1 LT
@hanhan1978 カオナビにおける マイクロサービスの取組と今後の展開 SaaS.tech #1 LT
@hanhan1978 カオナビにおける リーアキテクチャリングの取組と今後の展開 SaaS.tech #1 LT
弊社におけるモノリシックサービス改善の取組や経緯です。 少しでも参考になると幸いです。 4 本日のお話
5
現状のソフトウェアアーキテクチャー 6
- PHP (Laravel) - AWS (EC2) - モノリシック いわゆる LAMP
スタック 2012年4月の事業開始から、2回ほどのリアーキテクチャリング 7 https://dev.classmethod.jp/articles/ec2-lamp-al2-userdata/ ※Amazon Linux2 のLAMP環境、PHP7.2と MariaDB10.2.10をUserDataで初期設置してみた
現状の問題点 3つ 8
1. ソースコードの問題点 9
- 機能追加による暗黙知の増大 - ファイル数・ディレクトリ数の増加 - Package by Layer の限界 -
機能ごとに微妙にアーキテクチャーが異なる 10
結果として、Dev/Ops 共に認知負荷が増大 → 一人あたりのコミット数は低下傾向 11
2. インフラの問題点 12
- EC2 (これ自体は問題じゃない) - 開発環境はコンテナ - ECS 等に乗り換えられないと旨味が少ない 13
CodePipeline 利用や、 Blue/Green デプロイなど 改善は進んでいる ソフトウェアエンジニア側がインフラレイヤーに もう少し踏み込める形が望ましい PHPのバージョンアップとか、PHPのバージョンアップとか 14
3. チーム開発の問題点 15
- 開発チーム (Dev) -> 機能開発後は解散 - Dev の開発物は Ops の範疇として積まれる
16
仲が悪いわけではない。 暗黙知の継承など、スムーズに行えているとは言い難い Ops は日に日につらくなる どこかで見たコンウェイの法則 17
ここまでのまとめ 18
- いわゆる事業会社あるある - ゆでガエル状態 19
状況は日に日に悪くなっている気配を感じる 問題の大きさが、各チームが保持するゆとりでは 解決できない大きさになっている Big Ball of Mud 化しつつある 20
21 このへんで、銀の弾丸が求められる
最近のイキのいい銀の弾丸 - マイクロサービス - モジュラーモノリス というあたりで私は入社しました。(2020年11月) 22
@hanhan1978 • 富所 亮 • 所属 ◦ 株式会社カオナビ • 肩書
◦ エキスパート (??) • 役割 ◦ マイクロサービス化担当 ◦ リアーキテクチャリング担当 23
24 弊社における取り組み
25 高度な情報戦 https://codezine.jp/article/detail/15176?p=2
バズワードは使ってますが、私達は正気です。 手段を目的にしない! 26
最近のマイクロサービスについての情報 27
- Mercari - Retty - 本イベント 皆様アウトプットしてくれてありがとう... 28
コアドメインを含めたマイクロサービス化は、相当の困難が ありそう 集約として切り離しやすそうな機能は事例がチラホラ BFFとかもよく聞く 29
マイクロサービス化の結果として縦割り組織ができないか? Customer Success の阻害要因にならないか? 慎重な組織設計も求められる 30
マイクロサービス化は、その後の運用 チーム体制、その他考慮することがたくさんある ログどうする?デバッグどうする?結果整合性?とりあえずツラい 31
最近のモジュラモノリスについての情報 32
33 原点確認 http://www.codingthearchitecture.com/presentations/sa2015-modular-monoliths
34 http://www.codingthearchitecture.com/presentations/sa2015-modular-monoliths 分散デカ泥団子
モノリスを適切なモジュラー分割できないのは マイクロサービス以前 モジュラーモノリスの実例は、少しずつ出てきている 最近は弊社と同じ境遇の会社がモジューラモノリスに舵を切っている雰囲気を感じ ている 35
36 神発表の予感 https://fortee.jp/phperkaigi-2022/proposal/95bc3631-7683-4201-9f82-d7e7feeb7bab PHPerKaigi 2022, 4/9〜11 チケット発売中
Reアーキが現在考えていること 37
モノリスの複雑化の増大に対して どうやって軽減、改善していくかという構想・妄想 38
39 基本の考え方
40 モノリスを水平・垂直で考える
41 水平の例
- 認証 - 通知 - メール送信 - バッチ フレームワークにおいて、ミドルウェアで切り出されるような機能群 コアドメインから疎結合にしやすい
AWSのマネージドサービス利用、マイクロサービスとしての分割が現実的 42
43 垂直の例
- カオナビの各機能単位のソースコード群 - 各機能から使われる共通モジュール - フレームワーク 機能単位では Package By Feature
で名前空間・ディレクトリで分割 Composer Package として責務分離することで、全体の認知負荷を軽減 44
45 大切にしていること
- 既存の価値提供が毀損されないこと - セキュリティ的に脆弱な構成にならないこと - ビッグリライトを避けること できれば、後戻りができる算段をした上で段階的にやりたい 46
47 アーキテクトが価値を提供する相手
- 顧客・一般ユーザー - 開発者 顧客はもちろん、開発者の開発体験にも寄与したい。 秩序を保ちつつ、チャレンジの余地を残すアーキテクチャーの模索 48
49 実際に取り組んでいること
- プロトタイピングによる実験 - Composer Package を使ったモジュールの分割 - AST に影響を与えにくいリファクタリング -
コメント追加 - メソッド移動、名称変更 - 未使用クラス・メソッドの削除 50
- 考古学調査 - Unknown unknown の掘り出しと文書化 - 曖昧な仕様の調査と文書化 - 複雑な仕様の調査と文書化
- とにかく調べて調べて調べて調べて...... 51
問題から目をそらさない! 52 地味でも、大切な改善を繰り返す。栄光のゴールはその先に見えてくる!
53 https://kaonavi.connpass.com/event/240653/ 来週木曜開催!!
54 私と一緒に考古学調査しませんか? https://corp.kaonavi.jp/recruit/list
55 ご清聴ありがとうございました。