microservices on pairs

Post on 22-Jan-2018

1.414 Views

Category:

Engineering

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

API Meetup Tokyo #11

Takuma Morikawa / eureka, inc.

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

じこしょうかい

About me

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

なまえ Takuma Morikawa

しょぞく

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

じこしょうかい

エウレカについて

About eureka

株式会社エウレカ

専門分野以外の領域

でも活躍できる

エンジニア

55人

非エンジニア

40人

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

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

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

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

オンライン・デーティング・サービス「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万人

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

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

リリース 2014年 5月

DL数 300万DL

プラットフォーム iOS/Android

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

215万

170万

130万

85万

45万

国内No.1

Today's Talk

Microservices on pairs

今日お話すること

About Microservices

・きっかけ

・適用箇所

・実際に使ってみて

あるよく晴れた日の朝…

one day, very sunny day morning…

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

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

ʕººʔ ʕ ʘ ʘʔ

Charac te rs

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

Mono l i th ic days

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

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

Mono l i th ic days

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

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

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

Mono l i th ic days

「私さん」>ʕ ʘ ʘʔ

Mono l i th ic days

「私さん」>ʕ ʘ ʘʔ

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

Mono l i th ic days

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

Mono l i th ic days

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

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

Mono l i th ic days

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

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

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

Mono l i th ic days

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

Mono l i th ic days

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

ʕººʔ<「はい」

Mono l i th ic days

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

ʕººʔ<「はい」

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

Mono l i th ic days

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

Mono l i th ic days

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

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

Mono l i th ic days

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

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

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

Mono l i th ic days

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

Mono l i th ic days

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

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

Mono l i th ic days

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

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

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

Mono l i th ic days

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

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

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

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

Mono l i th ic days

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

Mono l i th ic days

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

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

Mono l i th ic days

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

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

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

Mono l i th ic days

「あれ」>ʕ ʘ ʘʔ

Mono l i th ic days

「あれ」>ʕ ʘ ʘʔ

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

Mono l i th ic days

「あれ」>ʕ ʘ ʘʔ

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

「解約、 」>ʕ ʘ ʘʔ

Mono l i th ic days

「あれ」>ʕ ʘ ʘʔ

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

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

Mono l i th ic days

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

Mono l i th ic days

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

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

Mono l i th ic days

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

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

「なんで?」>ʕ ʘ ʘʔ

Mono l i th ic days

「なんで?」>ʕ ʘ ʘʔ

Mono l i th ic days

「なんで?」>ʕ ʘ ʘʔ

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

Mono l i th ic days

「なんで?」>ʕ ʘ ʘʔ

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

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

Mono l i th ic days

Mono l i th ic days

説明しよう!

Mono l i th ic days

世界展開をすると

Mono l i th ic days

商品・決済プラット

フォームが

国ごとに変わる!

Mono l i th ic days

ʕººʔ<「これは…」

Mono l i th ic days

ʕººʔ<「これは…」

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

Mono l i th ic days

ʕººʔ<「これは…」

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

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

Mono l i th ic days

ʕººʔ<「$ git blame」

Mono l i th ic days

ʕººʔ<「$ git blame」

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

Mono l i th ic days

ʕººʔ<「$ git blame」

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

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

Mono l i th ic days

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

Mono l i th ic days

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

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

Mono l i th ic days

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

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

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

Mono l i th ic days

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

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

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

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

Mono l i th ic days

ʕººʔ<「…」

Mono l i th ic days

ʕººʔ<「…」

ʕººʔo0O(あなた…)

Mono l i th ic days

ʕººʔ<「…」

ʕººʔo0O(あなた…)

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

Mono l i th ic days

人生完

fin.

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

one day, very dark midnight…

ʕººʔ<「…」

Mono l i th ic days

ʕººʔ<「…」

ʕººʔ<「ねよ。」

Mono l i th ic days

ʕººʔ<「…」

ʕººʔ<「ねよ。」

ʕººʔ<「ぐー」

Mono l i th ic days

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

Mono l i th ic days

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

ʕººʔ<「むくり」

Mono l i th ic days

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

ʕººʔ<「むくり」

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

Mono l i th ic days

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

Mono l i th ic days

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

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

Mono l i th ic days

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

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

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

Mono l i th ic days

Mono l i th ic days

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

Mono l i th ic days

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

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

Mono l i th ic days

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

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

「ガチャッ」>☎

Mono l i th ic days

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

Mono l i th ic days

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

Mono l i th ic days

ʕººʔ<「…」

Mono l i th ic days

ʕººʔ<「…」

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

Mono l i th ic days

ʕººʔ<「…」

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

ʕººʔo0O(No More Work…)

Mono l i th ic days

プログラムの問題点

What's the problems of programs

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

Mono l i th ic days

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

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

Mono l i th ic days

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

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

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

Mono l i th ic days

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

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

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

・翻訳

・商品

・現地の法律対応

・etc…

Mono l i th ic days

Mono l i th ic days

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

Mono l i th ic days

Mono l i th ic days

Mono l i th ic days

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

Mono l i th ic days

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

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

Mono l i th ic days

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

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

・(現実には)

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

Mono l i th ic days

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

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

・(現実には)

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

Mono l i th ic days

ʕººʔ<「…」

Mono l i th ic days

ʕººʔ<「…」

ʕººʔ<「ねよ。」

Mono l i th ic days

ʕººʔ<「…」

ʕººʔ<「ねよ。」

(以下繰り返し)

Mono l i th ic days

ʕººʔ<「…」

ʕººʔ<「ねよ。」

(以下繰り返し)

Mono l i th ic days

Microservices Architecture

Mono l i th ic

外部API

DB

Cache

Web

登録

検索

メッセージ

決済

管理画面

Microserv ices?

外部API

DB

Cache

Gate Way

登録

検索

メッセージ

決済

管理画面

Microserv ices on pa i rs

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

Microserv ices on pa i rs

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

Microserv ices on pa i rs

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

Microserv ices

良かったこと

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

Microserv ices

良かったこと

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

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

Microserv ices

良かったこと

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

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

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

Microserv ices

良かったこと

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

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

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

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

Microserv ices

つらいところ

😰開発環境が複雑になる

Microserv ices

つらいところ

😰開発環境が複雑になる

😰本番環境が複雑になる

Microserv ices

つらいところ

😰開発環境が複雑になる

😰本番環境が複雑になる

> サーバーコスト

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

Microserv ices

つらいところ

😰開発環境が複雑になる

😰本番環境が複雑になる

> サーバーコスト

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

😱調査が複雑になる

Microserv ices

つらいところ

😰開発環境が複雑になる

😰本番環境が複雑になる

> サーバーコスト

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

😱調査が複雑になる

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

Microserv ices

つらいところ

😰開発環境が複雑になる

😩本番環境が複雑になる

> サーバーコスト

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

😱調査が複雑になる

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

😷属人化

Microserv ices

つらいところ

😰開発環境が複雑になる

Microserv ices

つらいところ

😰開発環境が複雑になる

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

Microserv ices

つらいところ

😰開発環境が複雑になる

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

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

Microserv ices

つらいところ

😩本番環境が複雑になる

😱調査が複雑になる

Microserv ices

つらいところ

😩本番環境が複雑になる

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

😱調査が複雑になる

Microserv ices

つらいところ

😩本番環境が複雑になる

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

😱調査が複雑になる

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

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

Microserv ices

つらいところ

😷属人化

Microserv ices

つらいところ

😷属人化

=> …

Microserv ices

つらいところ

😷属人化

=> …

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

Microserv ices

つらいところ

😷属人化

=> …

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

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

Microserv ices

つらいところ

😷属人化

=> …

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

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

Microserv ices

雑感

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

Microserv ices

雑感

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

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

Microserv ices

雑感

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

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

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

しやすかった

Microserv ices

雑感

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

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

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

しやすかった

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

おわり。

fin.

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

セグメントNo1 サービス

グローバルビジネス

Business

pairs Goフルスクラッチ

Engineering

マッチングアルゴリズム

Big Data

ハイブリッドエンジニア

大規模行動データ解析

CONFIDENTIAL

Thank you :)

Thank you :)

top related