Microservices on pairs

135
API Meetup Tokyo #11 Takuma Morikawa / eureka, inc. Copyright © 2009-2015 eureka, inc. All rights reserved.

Transcript of Microservices on pairs

Page 1: Microservices on pairs

API Meetup Tokyo #11

Takuma Morikawa / eureka, inc.

Copyright © 2009-2015 eureka, inc. All rights reserved.

Page 2: Microservices on pairs

じこしょうかい

About me

Page 3: Microservices on pairs

Copyright © 2009-2015 eureka, inc. All rights reserved.

なまえ Takuma Morikawa

しょぞく

たんとう (Go, JS, たまにインフラ)

じこしょうかい

Page 4: Microservices on pairs

エウレカについて

About eureka

Page 5: Microservices on pairs

株式会社エウレカ

専門分野以外の領域

でも活躍できる

エンジニア

55人

非エンジニア

40人

事業内容自社サービスの企画・開発・運営・オンライン・デーティング・サービス「pairs」

・カップル専用アプリ「Couples」

海外拠点・唯麗家股份有限公司(台湾)・ EUREKA SG Pte. Ltd.(シンガポール)

社員数: 95名インターン・業務委託含む

Page 6: Microservices on pairs
Page 7: Microservices on pairs

オンライン・デーティング・サービス「pa i rs」

12年9月 13年3月 13年9月 14年3月 14年9月 15年3月

225万

。゚+\\310万会員突破//+.゚

リリース 2012年 10月

会員数 310万人

プラットフォーム PC/SP/iOS/Android

135万

45万

90万

190万3年で

300万人

Page 8: Microservices on pairs
Page 9: Microservices on pairs

カップル専用アプリ「Coup les」

。゚+\\300万DL突破//+.゚

リリース 2014年 5月

DL数 300万DL

プラットフォーム iOS/Android

14年5月 14年10月 15年3月

215万

170万

130万

85万

45万

国内No.1

Page 10: Microservices on pairs

Today's Talk

Page 11: Microservices on pairs

Microservices on pairs

Page 12: Microservices on pairs

今日お話すること

About Microservices

・きっかけ

・適用箇所

・実際に使ってみて

Page 13: Microservices on pairs

あるよく晴れた日の朝…

one day, very sunny day morning…

Page 14: Microservices on pairs

※登場人物・話は全て架空の例です

Page 15: Microservices on pairs

私さん(仮名) ボス(仮名)

ʕººʔ ʕ ʘ ʘʔ

Charac te rs

Page 16: Microservices on pairs

ʕººʔ<「うーん今日もいい天気」

Mono l i th ic days

Page 17: Microservices on pairs

ʕººʔ<「うーん今日もいい天気」

ʕººʔ<「こんな日はP…以外に限る」

Mono l i th ic days

Page 18: Microservices on pairs

ʕººʔ<「うーん今日もいい天気」

ʕººʔ<「こんな日はP…以外に限る」

ʕººʔ<「よーし仕事しちゃうぞ」

Mono l i th ic days

Page 19: Microservices on pairs

「私さん」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 20: Microservices on pairs

「私さん」>ʕ ʘ ʘʔ

「ちょっと話があるんですが」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 21: Microservices on pairs

ʕººʔ<「え、なんでしょうか」

Mono l i th ic days

Page 22: Microservices on pairs

ʕººʔ<「え、なんでしょうか」

ʕººʔo0O(これは危険なニオイがするぞ…)

Mono l i th ic days

Page 23: Microservices on pairs

ʕººʔ<「え、なんでしょうか」

ʕººʔo0O(これは危険なニオイがするぞ…)

「今日の売上見ました?」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 24: Microservices on pairs

ʕººʔo0O(まじかよ…)

Mono l i th ic days

Page 25: Microservices on pairs

ʕººʔo0O(まじかよ…)

ʕººʔ<「はい」

Mono l i th ic days

Page 26: Microservices on pairs

ʕººʔo0O(まじかよ…)

ʕººʔ<「はい」

ʕººʔ<「特におかしくは無いと思うんですが」

Mono l i th ic days

Page 27: Microservices on pairs

「昨日じゃなくて今日のです」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 28: Microservices on pairs

「昨日じゃなくて今日のです」>ʕ ʘ ʘʔ

「明らかにおかしいんですけど」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 29: Microservices on pairs

「昨日じゃなくて今日のです」>ʕ ʘ ʘʔ

「明らかにおかしいんですけど」>ʕ ʘ ʘʔ

「バッチ処理こけてません?」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 30: Microservices on pairs

ʕººʔ(プロセスを確認する)

Mono l i th ic days

Page 31: Microservices on pairs

ʕººʔ(プロセスを確認する)

ʕººʔ<「処理自体は動いてはいますね」

Mono l i th ic days

Page 32: Microservices on pairs

ʕººʔ(プロセスを確認する)

ʕººʔ<「処理自体は動いてはいますね」

ʕººʔo0O(もっと死にたくなってきた…)

Mono l i th ic days

Page 33: Microservices on pairs

ʕººʔ(プロセスを確認する)

ʕººʔ<「処理自体は動いてはいますね」

ʕººʔo0O(もっと死にたくなってきた…)

ʕººʔ<「ログ確認してご報告します…」

Mono l i th ic days

Page 34: Microservices on pairs

「逃げないで下さい」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 35: Microservices on pairs

「逃げないで下さい」>ʕ ʘ ʘʔ

「今から一緒に確認しましょう」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 36: Microservices on pairs

「逃げないで下さい」>ʕ ʘ ʘʔ

「今から一緒に確認しましょう」>ʕ ʘ ʘʔ

「ほら、私も既にログ開いてますし」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 37: Microservices on pairs

「あれ」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 38: Microservices on pairs

「あれ」>ʕ ʘ ʘʔ

「動いてないっていうか」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 39: Microservices on pairs

「あれ」>ʕ ʘ ʘʔ

「動いてないっていうか」>ʕ ʘ ʘʔ

「解約、 」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 40: Microservices on pairs

「あれ」>ʕ ʘ ʘʔ

「動いてないっていうか」>ʕ ʘ ʘʔ

「解約、されてませんか」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 41: Microservices on pairs

ʕººʔ<「そのようでございますね…」

Mono l i th ic days

Page 42: Microservices on pairs

ʕººʔ<「そのようでございますね…」

ʕººʔ<「なぜでしょうか…」

Mono l i th ic days

Page 43: Microservices on pairs

ʕººʔ<「そのようでございますね…」

ʕººʔ<「なぜでしょうか…」

「なんで?」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 44: Microservices on pairs

「なんで?」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 45: Microservices on pairs

「なんで?」>ʕ ʘ ʘʔ

「なんで??」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 46: Microservices on pairs

「なんで?」>ʕ ʘ ʘʔ

「なんで??」>ʕ ʘ ʘʔ

「なんで?!?!?!?!?!」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 47: Microservices on pairs

Mono l i th ic days

Page 48: Microservices on pairs

説明しよう!

Mono l i th ic days

Page 49: Microservices on pairs

世界展開をすると

Mono l i th ic days

Page 50: Microservices on pairs

商品・決済プラット

フォームが

国ごとに変わる!

Mono l i th ic days

Page 51: Microservices on pairs

ʕººʔ<「これは…」

Mono l i th ic days

Page 52: Microservices on pairs

ʕººʔ<「これは…」

ʕººʔ<「台湾PayPalのキャンペーン商品が」

Mono l i th ic days

Page 53: Microservices on pairs

ʕººʔ<「これは…」

ʕººʔ<「台湾PayPalのキャンペーン商品が」

ʕººʔ<「ロジック間違えてます。。。」

Mono l i th ic days

Page 54: Microservices on pairs

ʕººʔ<「$ git blame」

Mono l i th ic days

Page 55: Microservices on pairs

ʕººʔ<「$ git blame」

ʕººʔ<「昨日のデプロイですね」

Mono l i th ic days

Page 56: Microservices on pairs

ʕººʔ<「$ git blame」

ʕººʔ<「昨日のデプロイですね」

ʕººʔ<「日本版の新キャンペーンのようです」

Mono l i th ic days

Page 57: Microservices on pairs

ʕººʔ<「担当者に確認しておきます…m(__)m」

Mono l i th ic days

Page 58: Microservices on pairs

ʕººʔ<「担当者に確認しておきます…m(__)m」

「再発防止策をお願いします」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 59: Microservices on pairs

ʕººʔ<「担当者に確認しておきます…m(__)m」

「再発防止策をお願いします」>ʕ ʘ ʘʔ

「12時の会議までに」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 60: Microservices on pairs

ʕººʔ<「担当者に確認しておきます…m(__)m」

「再発防止策をお願いします」>ʕ ʘ ʘʔ

「12時の会議までに」>ʕ ʘ ʘʔ

「あと私より先に気付くようにして下さい」>ʕ ʘ ʘʔ

Mono l i th ic days

Page 61: Microservices on pairs

ʕººʔ<「…」

Mono l i th ic days

Page 62: Microservices on pairs

ʕººʔ<「…」

ʕººʔo0O(あなた…)

Mono l i th ic days

Page 63: Microservices on pairs

ʕººʔ<「…」

ʕººʔo0O(あなた…)

ʕººʔo0O(いつも6時前に起きてますやん…)

Mono l i th ic days

Page 64: Microservices on pairs

人生完

fin.

Page 65: Microservices on pairs
Page 66: Microservices on pairs

ある静かな夜の帳の中で…

one day, very dark midnight…

Page 67: Microservices on pairs

ʕººʔ<「…」

Mono l i th ic days

Page 68: Microservices on pairs

ʕººʔ<「…」

ʕººʔ<「ねよ。」

Mono l i th ic days

Page 69: Microservices on pairs

ʕººʔ<「…」

ʕººʔ<「ねよ。」

ʕººʔ<「ぐー」

Mono l i th ic days

Page 70: Microservices on pairs

「ブー、ブー、ブー」>☎

Mono l i th ic days

Page 71: Microservices on pairs

「ブー、ブー、ブー」>☎

ʕººʔ<「むくり」

Mono l i th ic days

Page 72: Microservices on pairs

「ブー、ブー、ブー」>☎

ʕººʔ<「むくり」

ʕººʔ<「こんな時間に電話って誰やねん」

Mono l i th ic days

Page 73: Microservices on pairs

「お世話になっております(以下略」>☎

Mono l i th ic days

Page 74: Microservices on pairs

「お世話になっております(以下略」>☎

「pairsからのデータが」>☎

Mono l i th ic days

Page 75: Microservices on pairs

「お世話になっております(以下略」>☎

「pairsからのデータが」>☎

「全く飛んでこなくなりました」>☎

Mono l i th ic days

Page 76: Microservices on pairs

Mono l i th ic days

Page 77: Microservices on pairs

「こちら対応完了しましたら」>☎

Mono l i th ic days

Page 78: Microservices on pairs

「こちら対応完了しましたら」>☎

「ご連絡いただけると助かります」>☎

Mono l i th ic days

Page 79: Microservices on pairs

「こちら対応完了しましたら」>☎

「ご連絡いただけると助かります」>☎

「ガチャッ」>☎

Mono l i th ic days

Page 80: Microservices on pairs

ʕººʔ<「チラッ(スマホの時間を確認する)」

Mono l i th ic days

Page 81: Microservices on pairs

ʕººʔ<「チラッ(スマホの時間を確認する)」

Mono l i th ic days

Page 82: Microservices on pairs

ʕººʔ<「…」

Mono l i th ic days

Page 83: Microservices on pairs

ʕººʔ<「…」

ʕººʔ<「No Work, No Life...」

Mono l i th ic days

Page 84: Microservices on pairs

ʕººʔ<「…」

ʕººʔ<「No Work, No Life...」

ʕººʔo0O(No More Work…)

Mono l i th ic days

Page 85: Microservices on pairs

プログラムの問題点

What's the problems of programs

Page 86: Microservices on pairs

・一見関係ない処理が密に結合されている

Mono l i th ic days

Page 87: Microservices on pairs

・一見関係ない処理が密に結合されている

例)登録 <-> キャンペーン <-> 商品

Mono l i th ic days

Page 88: Microservices on pairs

・一見関係ない処理が密に結合されている

例)登録 <-> キャンペーン <-> 商品

・ワンソースなので国別の対応が必要

Mono l i th ic days

Page 89: Microservices on pairs

・一見関係ない処理が密に結合されている

例)登録 <-> キャンペーン <-> 商品

・ワンソースなので国別の対応が必要

・翻訳

・商品

・現地の法律対応

・etc…

Mono l i th ic days

Page 90: Microservices on pairs

Mono l i th ic days

イメージはこんな感じです

Page 91: Microservices on pairs

Mono l i th ic days

Page 92: Microservices on pairs

Mono l i th ic days

Page 93: Microservices on pairs

Mono l i th ic days

Page 94: Microservices on pairs

・チーム開発をするために…

Mono l i th ic days

Page 95: Microservices on pairs

・チーム開発をするために…

・異なる要素を、統一しなければならない

Mono l i th ic days

Page 96: Microservices on pairs

・チーム開発をするために…

・異なる要素を、統一しなければならない

・(現実には)

様々な要素を色々な視点で捉えることも必要

Mono l i th ic days

Page 97: Microservices on pairs

・チーム開発をするために…

・異なる要素を、統一しなければならない

・(現実には)

様々な要素を色々な視点で捉えることも必要

Mono l i th ic days

Page 98: Microservices on pairs

ʕººʔ<「…」

Mono l i th ic days

Page 99: Microservices on pairs

ʕººʔ<「…」

ʕººʔ<「ねよ。」

Mono l i th ic days

Page 100: Microservices on pairs

ʕººʔ<「…」

ʕººʔ<「ねよ。」

(以下繰り返し)

Mono l i th ic days

Page 101: Microservices on pairs

ʕººʔ<「…」

ʕººʔ<「ねよ。」

(以下繰り返し)

Mono l i th ic days

Page 102: Microservices on pairs

Microservices Architecture

Page 103: Microservices on pairs

Mono l i th ic

外部API

DB

Cache

Web

登録

検索

メッセージ

決済

管理画面

Page 104: Microservices on pairs

Microserv ices?

外部API

DB

Cache

Gate Way

登録

検索

メッセージ

決済

管理画面

Page 105: Microservices on pairs

Microserv ices on pa i rs

(ここにカッコイイ図を入れる)

Page 106: Microservices on pairs

Microserv ices on pa i rs

(ここにカッコイイ図を入れる)

Page 107: Microservices on pairs

Microserv ices on pa i rs

(ここにカッコイイ図を入れる)

Page 108: Microservices on pairs

Microserv ices

良かったこと

😃コードがシンプルになる(かも)

Page 109: Microservices on pairs

Microserv ices

良かったこと

😃コードがシンプルになる(かも)

😃システムが小さくなるので負の遺産が溜まりづらい

Page 110: Microservices on pairs

Microserv ices

良かったこと

😃コードがシンプルになる(かも)

😃システムが小さくなるので負の遺産が溜まりづらい

😃新しいことを試しやすい

Page 111: Microservices on pairs

Microserv ices

良かったこと

😃コードがシンプルになる(かも)

😃システムが小さくなるので負の遺産が溜まりづらい

😃新しいことを試しやすい

😃デプロイのサイクルが柔軟になる

Page 112: Microservices on pairs

Microserv ices

つらいところ

😰開発環境が複雑になる

Page 113: Microservices on pairs

Microserv ices

つらいところ

😰開発環境が複雑になる

😰本番環境が複雑になる

Page 114: Microservices on pairs

Microserv ices

つらいところ

😰開発環境が複雑になる

😰本番環境が複雑になる

> サーバーコスト

> 各種オペレーションコスト

Page 115: Microservices on pairs

Microserv ices

つらいところ

😰開発環境が複雑になる

😰本番環境が複雑になる

> サーバーコスト

> 各種オペレーションコスト

😱調査が複雑になる

Page 116: Microservices on pairs

Microserv ices

つらいところ

😰開発環境が複雑になる

😰本番環境が複雑になる

> サーバーコスト

> 各種オペレーションコスト

😱調査が複雑になる

> データの不整合(バグ・障害時)

Page 117: Microservices on pairs

Microserv ices

つらいところ

😰開発環境が複雑になる

😩本番環境が複雑になる

> サーバーコスト

> 各種オペレーションコスト

😱調査が複雑になる

> データの不整合(バグ・障害時)

😷属人化

Page 118: Microservices on pairs

Microserv ices

つらいところ

😰開発環境が複雑になる

Page 119: Microservices on pairs

Microserv ices

つらいところ

😰開発環境が複雑になる

=> 各サービスは依存なしでも動くようにしてます

Page 120: Microservices on pairs

Microserv ices

つらいところ

😰開発環境が複雑になる

=> 各サービスは依存なしでも動くようにしてます

=> 提供するサービス側がAPIのSDKを公開する形

Page 121: Microservices on pairs

Microserv ices

つらいところ

😩本番環境が複雑になる

😱調査が複雑になる

Page 122: Microservices on pairs

Microserv ices

つらいところ

😩本番環境が複雑になる

=> インフラチームの腕の見せ所ですね!

😱調査が複雑になる

Page 123: Microservices on pairs

Microserv ices

つらいところ

😩本番環境が複雑になる

=> インフラチームの腕の見せ所ですね!

😱調査が複雑になる

=> デバッグ用のエンドポイント拡充

=> 効率的なログ収集を…

Page 124: Microservices on pairs

Microserv ices

つらいところ

😷属人化

Page 125: Microservices on pairs

Microserv ices

つらいところ

😷属人化

=> …

Page 126: Microservices on pairs

Microserv ices

つらいところ

😷属人化

=> …

=> テストコード・コメント・ドキュメント

Page 127: Microservices on pairs

Microserv ices

つらいところ

😷属人化

=> …

=> テストコード・コメント・ドキュメント

ちゃんと仕事をしましょう

Page 128: Microservices on pairs

Microserv ices

つらいところ

😷属人化

=> …

=> テストコード・コメント・ドキュメント

ちゃんと仕事をしましょう(自戒)

Page 129: Microservices on pairs

Microserv ices

雑感

・絶対に正しいアーキテクチャは存在しない

Page 130: Microservices on pairs

Microserv ices

雑感

・絶対に正しいアーキテクチャは存在しない

=> 2年前の規模だったらやるメリットが薄い

Page 131: Microservices on pairs

Microserv ices

雑感

・絶対に正しいアーキテクチャは存在しない

=> 2年前の規模だったらやるメリットが薄い

・既に動いているサービスなので分割のイメージが

しやすかった

Page 132: Microservices on pairs

Microserv ices

雑感

・絶対に正しいアーキテクチャは存在しない

=> 2年前の規模だったらやるメリットが薄い

・既に動いているサービスなので分割のイメージが

しやすかった

=> とはいえ開発中に変更することが多いです

Page 133: Microservices on pairs

おわり。

fin.

Page 134: Microservices on pairs

「世界で愛されるサービス」を一緒に作りませんか?

セグメントNo1 サービス

グローバルビジネス

Business

pairs Goフルスクラッチ

Engineering

マッチングアルゴリズム

Big Data

ハイブリッドエンジニア

大規模行動データ解析

Page 135: Microservices on pairs

CONFIDENTIAL

Thank you :)

Thank you :)