31
MicroServiceなんて最初から やるもんじゃなかった Akira Miki Repro Inc. shinjuku.rb #27@metaps July 22, 2015

Microserviceなんて最初からやるもんじゃ無かった

Embed Size (px)

Citation preview

Page 1: Microserviceなんて最初からやるもんじゃ無かった

MicroServiceなんて最初からやるもんじゃなかった

Akira Miki Repro Inc.

shinjuku.rb #27@metaps July 22, 2015

Page 2: Microserviceなんて最初からやるもんじゃ無かった

Akira Miki CTO / Repro

@treetreeslight

Page 3: Microserviceなんて最初からやるもんじゃ無かった
Page 4: Microserviceなんて最初からやるもんじゃ無かった

定量分析では分からない原因を

Page 5: Microserviceなんて最初からやるもんじゃ無かった

動画から推察して改善するツール

Page 6: Microserviceなんて最初からやるもんじゃ無かった

プッシュもできるようになったよ!

Page 7: Microserviceなんて最初からやるもんじゃ無かった

At the first of Repro

Page 8: Microserviceなんて最初からやるもんじゃ無かった

Reproがやりたいこと

情報を送って 変換して 分析する受け取って

Page 9: Microserviceなんて最初からやるもんじゃ無かった

責務を分けてスケーラビリティを担保したい

Page 10: Microserviceなんて最初からやるもんじゃ無かった

マーティンファウラー御大曰く

> The term "Microservice Architecture" has sprung up over the last few years to describe a particular way of designing software applications as suites of independently deployable services.

http://martinfowler.com/articles/microservices.html

Page 11: Microserviceなんて最初からやるもんじゃ無かった

時代はマイクロサービシス キタコレ

Page 12: Microserviceなんて最初からやるもんじゃ無かった

Reproがやりたいこと

とりま分けて作っちゃおう!!!

情報を送って 変換して 分析する受け取って

Page 13: Microserviceなんて最初からやるもんじゃ無かった

好きな言語でガンガンいこう!

情報を送って 変換して 分析する受け取って

Page 14: Microserviceなんて最初からやるもんじゃ無かった

あれ、、、、

Page 15: Microserviceなんて最初からやるもんじゃ無かった

スキーマ変更やら型変更すると。。。

情報を送って 変換して 分析する受け取ってフォーマット チェック直して

DBが 食えるように パースして

ユーザーへの見せ方かえて

送るフォーマット合わせて

Page 16: Microserviceなんて最初からやるもんじゃ無かった

溢れ出す修正漏れ 膨れ上がる管理コスト

Page 17: Microserviceなんて最初からやるもんじゃ無かった

monolithic

Page 18: Microserviceなんて最初からやるもんじゃ無かった

結局

情報を送って 変換して 分析する受け取って

•モノリシックにするソリューション •ビジネスロジックのズレをなくす

Page 19: Microserviceなんて最初からやるもんじゃ無かった

教訓その1

• 変化に強いアーキテクチャは、激しく変化に強いのとは意味が違う

• 変更が頻発する時期はモノリシックじゃないとつらい

• ビジネスロジックが同じなら使い回すべき

Page 20: Microserviceなんて最初からやるもんじゃ無かった

余談・変更の激しさ

ここ1年で11万行書いて8万行消しました…

Page 21: Microserviceなんて最初からやるもんじゃ無かった

After alpha release of Repro

Page 22: Microserviceなんて最初からやるもんじゃ無かった

リクエストどうにかしたい

情報を送って 変換して 分析する受け取って

フォーマット チェック

Page 23: Microserviceなんて最初からやるもんじゃ無かった

再びサービス分割へ

情報を送って 変換して 分析する受け取って

フォーマット チェック

Page 24: Microserviceなんて最初からやるもんじゃ無かった

失敗したのにまたやるの?

Page 25: Microserviceなんて最初からやるもんじゃ無かった

ビジネスロジックの依存を捨てる

情報を送って 変換して 分析する受け取ってフォーマット チェック

•簡易なチェック(JSONフォーマットとキーとなる値)だけにする

•キー値の妥当性チェックはAPIで他のサーバーに聞きに行く

Page 26: Microserviceなんて最初からやるもんじゃ無かった

後工程で賄える事は後工程へ

情報を送って 変換して 分析する受け取ってフォーマット チェック

•簡易なチェック(JSONフォーマットとキーとなる値)だけにする

•キー値の妥当性チェックはAPIで他のサーバーに聞きに行く

Page 27: Microserviceなんて最初からやるもんじゃ無かった

教訓その2

• 単一の責務に集中させる

• 後工程のコスト下げたいとか欲を出さない

• もし、責務から外れる行為をやりたいときはAPI作って叩きに行く

Page 28: Microserviceなんて最初からやるもんじゃ無かった

And now

Page 29: Microserviceなんて最初からやるもんじゃ無かった

リクエストに合わせた工夫をする

• あまりに多いリクエストをさばくにはRailsがつらい。

• キャッシュにヒットしない分析データはリクエストに時間がかかる=unicorn向かない

Page 30: Microserviceなんて最初からやるもんじゃ無かった

まとめ

Page 31: Microserviceなんて最初からやるもんじゃ無かった

• 最初はモノリシックに、そこからサービスを分ける方が責務が明確になる。

• リクエスト数や状況に応じて、単一の責務に特化したサービスに分割する。欲を出さない