第三回マイクロサービスアーキテクチャ読書会(後半)

222
第3回MSA読書会(後半) #MSA読書会

Upload: mizuki-wada

Post on 21-Apr-2017

2.617 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: 第三回マイクロサービスアーキテクチャ読書会(後半)

第3回MSA読書会(後半) #MSA読書会

Page 2: 第三回マイクロサービスアーキテクチャ読書会(後半)

こんにちは!

しょぼちむ(@syobochim)

Page 3: 第三回マイクロサービスアーキテクチャ読書会(後半)

後半のもくじ4.11 マイクロサービスの世界における DRYとコードの再利用のリスク

4.12 参照によるアクセス

4.13 バージョニング

4.14 ユーザインターフェース

4.15 サードパーティーソフトウェアとの統合

4.16 まとめ

Page 4: 第三回マイクロサービスアーキテクチャ読書会(後半)

後半のもくじ4.11 マイクロサービスの世界における DRYとコードの再利用のリスク

4.12 参照によるアクセス

4.13 バージョニング

4.14 ユーザインターフェース

4.15 サードパーティーソフトウェアとの統合

4.16 まとめ ⇦ここからいくよ!

Page 5: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.16 まとめ4章で言いたいこと

•いかなる代償を払ってもデータベース統合を避けます

•RESTとRPCとの間のトレードオフを理解し、RESTをリクエスト / レスポンス統合の優れた出発点と積極的にみなします

•オーケストレーションよりもコレオグラフィを選びます

•ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、バージョンが必要ないようにします

•ユーザインターフェースを合成レイヤと考えます

Page 6: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.16 まとめ4章で言いたいこと

•いかなる代償を払ってもデータベース統合を避けます

•RESTとRPCとの間のトレードオフを理解し、RESTをリクエスト / レスポンス統合の優れた出発点と積極的にみなします

•オーケストレーションよりもコレオグラフィを選びます

•ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、バージョンが必要ないようにします

•ユーザインターフェースを合成レイヤと考えます

こっちは前半部分

Page 7: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.16 まとめ4章で言いたいこと

•いかなる代償を払ってもデータベース統合を避けます

•RESTとRPCとの間のトレードオフを理解し、RESTをリクエスト / レスポンス統合の優れた出発点と積極的にみなします

•オーケストレーションよりもコレオグラフィを選びます

•ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、バージョンが必要ないようにします

•ユーザインターフェースを合成レイヤと考えます

このふたつについてまず説明していきます!

Page 8: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.16 まとめ4章で言いたいこと

•いかなる代償を払ってもデータベース統合を避けます

•RESTとRPCとの間のトレードオフを理解し、RESTをリクエスト / レスポンス統合の優れた出発点と積極的にみなします

•オーケストレーションよりもコレオグラフィを選びます

•ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、バージョンが必要ないようにします

•ユーザインターフェースを合成レイヤと考えます

4.13 バージョニング

4.14 ユーザインターフェース

Page 9: 第三回マイクロサービスアーキテクチャ読書会(後半)

後半のもくじ4.11 マイクロサービスの世界における DRYとコードの再利用のリスク

4.12 参照によるアクセス

4.13 バージョニング

4.14 ユーザインターフェース

4.15 サードパーティーソフトウェアとの統合

4.16 まとめこのあたりは最後に時間があれば

Page 10: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.16 まとめ4章で言いたいこと

•いかなる代償を払ってもデータベース統合を避けます

•RESTとRPCとの間のトレードオフを理解し、RESTをリクエスト / レスポンス統合の優れた出発点と積極的にみなします

•オーケストレーションよりもコレオグラフィを選びます

•ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、バージョンが必要ないようにします

•ユーザインターフェースを合成レイヤと考えます

Page 11: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

Page 12: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

⬆について書いてあるのが

Page 13: 第三回マイクロサービスアーキテクチャ読書会(後半)

後半のもくじ4.11 マイクロサービスの世界における DRYとコードの再利用のリスク

4.12 参照によるアクセス

4.13 バージョニング

4.14 ユーザインターフェース

4.15 サードパーティーソフトウェアとの統合

4.16 まとめ

Page 14: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13 バージョニング

P73 マイクロサービスに関して話すたびに バージョニングをどのように行うかを

訊かれました。

人々は「いつかはサービスのインターフェースを変更しなければならない」という当然の心配をし 変更の管理方法を理解したいと思っている。

Page 15: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13 バージョニング

この問題を分割し、対策を説明していきます。

•コンシューマ(クライアント)の心持ち •サービスの心持ち •バージョンの意味付け •サービスのバージョンアップ方法

Page 16: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.1 最大限の見送り

「サービス側の変更に影響されないように 気をつけましょう」

というコンシューマ側の心持ちのはなし

Page 17: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.1 最大限の見送り

「サービス側の変更に影響されないように 気をつけましょう」

というコンシューマ側の心持ちのはなし

影響されない=バージョンが必要ない

Page 18: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.1 最大限の見送り

最初から破壊的な変更を避けることが、 破壊的変更の影響を減らす最善の方法です。

クライアントに優れた振る舞いを推奨し、 そもそもサービスと密結合にならないように

しましょう。

Page 19: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.1 最大限の見送り

たとえば、メールサービスが⬇のレスポンスを おくってくるとき

<customer> <firstName>Sam</firstName> <lastName>Newman</lastName> <email>[email protected]</email> <telephoneNumber>555-1234-5678</telephoneNumber></customer>

Page 20: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.1 最大限の見送り

telephoneNumberをつかわないコンシューマーが、こんなクラスを作っていて、リクエストに来ている項目をそのままバインディングするソースを書いちゃうと。。。

public class Customer { public String firstName; public String lastName; public String email; public String telephoneNumber;}

Page 21: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.1 最大限の見送り

メールサービス「メール送信にtelephoneNumberって使ってないよね?消します。」

<customer> <firstName>Sam</firstName> <lastName>Newman</lastName> <email>[email protected]</email> <telephoneNumber>555-1234-5678</telephoneNumber></customer>

Page 22: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.1 最大限の見送り

メールサービス「メール送信にtelephoneNumberって使ってないよね?消します。」 「えっ」

<customer> <firstName>Sam</firstName> <lastName>Newman</lastName> <email>[email protected]</email> <telephoneNumber>555-1234-5678</telephoneNumber></customer>

Page 23: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.1 最大限の見送り

メールサービス「メール送信にtelephoneNumberって使ってないよね?消します。」 「えっ」➡ クラス修正が必要 (telephoneNumberを消すことがコンシューマの破壊的変更になっちゃう。)

public class Customer { public String firstName; public String lastName; public String email; public String telephoneNumber;}

Page 24: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.1 最大限の見送り

たとえばfirstNameとlastNameの階層構造を明確に推測している場合 『customer > firstName』『customer > lastName』 『customer > email』

public class Customer { public String firstName; public String lastName; public String email;}

Page 25: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.1 最大限の見送り

メールサービス「項目増えてきたから階層構造にしてみたわー。」

<customer> <naming> <firstName>Sam</firstName> <lastName>Newman</lastName> <nickName>Magpiebrain</nickName> <fullName>Magpiebrain</fullName> </naming> <email>[email protected]</email></customer>

Page 26: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.1 最大限の見送り

メールサービス「項目増えてきたから階層構造にしてみたわー。」 「えっ」

<customer> <naming> <firstName>Sam</firstName> <lastName>Newman</lastName> <nickName>Magpiebrain</nickName> <fullName>Magpiebrain</fullName> </naming> <email>[email protected]</email></customer>

Page 27: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.1 最大限の見送り

メールサービス「項目増えてきたから階層構造にしてみたわー。」 「えっ」 ➡ クラス修正が必要 (項目名は変わってないのに。。。)

public class Customer { public Naming naming; public String email; } public class Naming { public String firstName; public String lastName; … }

Page 28: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.1 最大限の見送り

必要な項目のみ定義する、や、フィールドの場所(構造)を曖昧にしておく、など、サービスとコンシューマの結合を小さくすれば、リーダー(Reader)が関心のない変更を無視することができる!!!

Page 29: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.1 最大限の見送り

必要な項目のみ定義する、や、フィールドの場所(構造)を曖昧にしておく、など、サービスとコンシューマの結合を小さくすれば、リーダー(Reader)が関心のない変更を無視することができる!!!

耐性のあるリーダー(by Martin Fowler) •http://martinfowler.com/bliki/TolerantReader.html •https://uramoto.wordpress.com/2015/09/21/マイクロサービスのデザインパターン/

Page 30: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.1 最大限の見送り

必要な項目のみ定義する、や、フィールドの場所(構造)を曖昧にしておく、など、サービスとコンシューマの結合を小さくすれば、リーダー(Reader)が関心のない変更を無視することができる!!!

XPath •https://msdn.microsoft.com/ja-jp/library/ms256086(v=vs.120).aspx

Page 31: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.1 最大限の見送り

ポステルの法則 https://ja.wikipedia.org/wiki/ジョン・ポステル

「送信するものに関しては厳密に、受信するものに関しては寛大に」

「人にやさしく、自分にきびしく」

Page 32: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.1 最大限の見送り

「サービス側の変更に影響されないように 気をつけましょう」

というコンシューマ側の心持ちのはなし

Page 33: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.2 破壊的変更の早期の把握

「コンシューマへの変更の影響を出す前に 検知しましょう」

というサービス側の心持ちのはなし

Page 34: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.2 破壊的変更の早期の把握

「コンシューマへの変更の影響を出す前に 検知しましょう」

というサービス側の心持ちのはなし

影響を出さない=バージョンが必要ない

Page 35: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.2 破壊的変更の早期の把握

コンシューマ駆動契約

問題を早期に検出する

Page 36: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.2 破壊的変更の早期の把握

コンシューマ駆動契約の詳しいはなしは 7章を発表する人にお任せしますが。。。

Page 37: 第三回マイクロサービスアーキテクチャ読書会(後半)

こんポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.2 破壊的変更の早期の把握 コンシューマー(ヘルプデスク)が期待する動作を

顧客サービスがテストとして書いて動作を保証する。 そのテストが、コンシューマーとの契約になる。

ヘルプデスクの コンシューマ駆動契約の

テスト範囲

Page 38: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.2 破壊的変更の早期の把握

サービスやライブラリをテストすることで、 この動きはまずいぞ!

(契約違反だぞ!すなわち破壊的変更!!) というのを検知することができる。

※テストを書いているので、 破壊的変更の特定も簡単!!

Page 39: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.2 破壊的変更の早期の把握

破壊的変更が入ったら、

•顧客サービスが破壊的変更を回避する •破壊的変更を受け入れてコンシューマの担当者たちと相談する

Page 40: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.2 破壊的変更の早期の把握

「コンシューマへの変更の影響を出す前に 検知しましょう」

というサービス側の心持ちのはなし

Page 41: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

このあたりが、 「バージョンが必要ないようにします」

という話でした。

それでもコンシューマが サービスの破壊的なバージョニングに

対応しなきゃいけないことが 絶対にある

じゃあ、どう運用していけば いいんだろう?

Page 42: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.3 セマンティックバージョニングの利用

コンシューマとサービス間で

「変更の種類をわかりやすいようにしましょう」

というルールを作るはなし

Page 43: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.3 セマンティックバージョニングの利用

変更の種類をわかりやすくする手段のひとつが

セマンティックバージョニング http://semver.org/lang/ja/

Page 44: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.3 セマンティックバージョニングの利用

MAJOR.MINOR.PATCH

•MAJOR:後方互換性のない変更 •MINOR:後方互換性のある新機能の追加 •PATCH:既存機能にバグ修正が行われた場合

※他にも細かいルールがサイトには書いてあるよ。

Page 45: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.3 セマンティックバージョニングの利用

使っている側はバージョンを見るだけで、変更にどの程度の影響があるのかを判断できる。

明確なルールがあることで、 サービスを提供する側と受け取る側の情報交換の

プロセスを簡略化することもできる。

Page 46: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.3 セマンティックバージョニングの利用

コンシューマとサービス間で

「変更の種類をわかりやすいようにしましょう」

というルールを作るはなし

Page 47: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.4 異なるエンドポイントの共存

サービス側の変更によって コンシューマーになるべく変更を

与えないようにしましょう

(影響を制限する)

Page 48: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.4 異なるエンドポイントの共存

•独立してリリースできるようにしたい。 •コンシューマーに同時アップグレードを強要したくない。

Page 49: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.4 異なるエンドポイントの共存

•独立してリリースできるようにしたい。 •コンシューマーに同時アップグレードを強要したくない。

そうだ!エンドポイントの新旧両方のバージョンを公開すればいいんだ!!!

Page 50: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.4 異なるエンドポイントの共存 •提供する機能のエンドポイントを拡張して新旧両方をサポート! •コンシューマの移行が済んだらAPIを縮小して古い機能を取り除く!

Page 51: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.4 異なるエンドポイントの共存 •新しいインターフェースをできる限り早く公開できる •コンシューマに移行する時間を与える

Page 52: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.4 異なるエンドポイントの共存

ルーティングする手段 •リクエストヘッダのバージョン番号 ‣URIが不透明になるので、クライアントにURIテンプレートをハードコードしなくて済む

•URIのバージョン番号(/v1/customer と /v2/customer) ‣物事が非常に明確になり、リクエストのルーティングを簡素化できる

Page 53: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.4 異なるエンドポイントの共存

ただし、バージョンが3つ以上になると辛い

エンドポイントに合わせた コードとテストを用意しなきゃいけないので

メンテが大変になっちゃう。

Page 54: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.4 異なるエンドポイントの共存

サービス側の変更によって コンシューマーになるべく変更を

与えないようにしましょう

(影響を制限する)

Page 55: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.5 複数のサービスバージョンの同時使用

「わざわざエンドポイントを 分けるってめんどくさくない?

二つのバージョンのサービスを 用意しておけばいいじゃん

時間が出来たら移行しよう」

Page 56: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.5 複数のサービスバージョンの同時使用

Page 57: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.5 複数のサービスバージョンの同時使用

古いコンシューマのトラフィックを 旧バージョンにルーティングし

新しいバージョンのトラフィックを 新バージョンにルーティングする

Page 58: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.5 複数のサービスバージョンの同時使用

でも

これはアンチパターン

Page 59: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.5 複数のサービスバージョンの同時使用

サービス内の内部のバグを修正する必要があると 2つを直さなくちゃいけなくて大変

振る舞いをミドルウェアのどこかか 一連のnginxスクリプトに

配置しなければいけなくなるので システムの振る舞いを検証するのが大変

データが旧バージョンと新バージョンの どちらで作られたものかがわからない

Page 60: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.5 複数のサービスバージョンの同時使用

サービス内の内部のバグを修正する必要があると 2つを直さなくちゃいけなくて大変

振る舞いをミドルウェアのどこかか 一連のnginxスクリプトに

配置しなければいけなくなるので システムの振る舞いを検証するのが大変

データが旧バージョンと新バージョンの どちらで作られたものかがわからない

コードベースを 分岐させるのはやめよう。

(http://12factor.net/ja/)

Page 61: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.5 複数のサービスバージョンの同時使用

サービス内の内部のバグを修正する必要があると 2つを直さなくちゃいけなくて大変

振る舞いをミドルウェアのどこかか 一連のnginxスクリプトに

配置しなければいけなくなるので システムの振る舞いを検証するのが大変

データが旧バージョンと新バージョンの どちらで作られたものかがわからない

Page 62: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.5 複数のサービスバージョンの同時使用

短期間だけこの方法をとるのはいいよ。

ブルーグリーンデプロイや カナリアリリースなどをする場合はOK

(詳しくは7章を担当する人が話してくれます。)

ブルーグリーンデプロイ http://www.atmarkit.co.jp/ait/articles/1312/03/news033_2.html カナリアリリース http://www.nttdata.com/jp/ja/insights/trend_keyword/2013061301.html

Page 63: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.5 複数のサービスバージョンの同時使用

ローリングメンテナンス http://www.itmedia.co.jp/im/articles/

0701/26/news124.html

みたいに、数分や数時間だけバージョンを 共存させることはありますよね。

Page 64: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.5 複数のサービスバージョンの同時使用

Netflixでも古いコンシューマを変更するコストが高すぎる場合、特にレガシーデバイスがまだAPIの旧バージョンに縛られている場合に備えて

「慎重に」利用している。

Page 65: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.4 と 4.13.5を比べてみよう

4.13.4

Page 66: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.4 と 4.13.5を比べてみよう

4.13.4 エンドポイントは

複数のバージョンに対応しているが、 裏のロジックは1つ。

古いバージョンのリクエストを受け取ったエンドポイントは、新しいバージョンの形式に変換して

から裏のロジックに流す。

Page 67: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.4 と 4.13.5を比べてみよう

4.13.5

Page 68: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13.4 と 4.13.5を比べてみよう

4.13.5 エンドポイントのみならず、

裏のロジックも新旧存在する。

つまり、アプリケーションそのものが 2つある状態。

Page 69: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

バージョンのお話はここまで!

Page 70: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

4.13 バージョニング

説明したこと

•コンシューマ(クライアント)の心持ち •サービスの心持ち •バージョンの意味付け •サービスのバージョンアップ方法

Page 71: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

ディスカッションします?

Page 72: 第三回マイクロサービスアーキテクチャ読書会(後半)

ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、

バージョンが必要ないようにします

•現場で「バージョンが必要ないように」って実現してますか? •まだしてないひとは、どうすればいいと思いますか? •サービスとコンシューマ間の情報共有で何か工夫してますか?

Page 73: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.16 まとめ4章で言いたいこと

•いかなる代償を払ってもデータベース統合を避けます

•RESTとRPCとの間のトレードオフを理解し、RESTをリクエスト / レスポンス統合の優れた出発点と積極的にみなします

•オーケストレーションよりもコレオグラフィを選びます

•ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、バージョンが必要ないようにします

•ユーザインターフェースを合成レイヤと考えます

Page 74: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

⬆について書いてあるのが

Page 75: 第三回マイクロサービスアーキテクチャ読書会(後半)

後半のもくじ4.11 マイクロサービスの世界における DRYとコードの再利用のリスク

4.12 参照によるアクセス

4.13 バージョニング

4.14 ユーザインターフェース

4.15 サードパーティーソフトウェアとの統合

4.16 まとめ

Page 76: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14 ユーザインターフェース

すべてのマイクロサービスを 顧客が理解できるものにまとめる場所

Page 77: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14 ユーザインターフェース

前まで

GET / POST経由でサーバ側で処理。 サーバ側プログラムがページ全体を描画して

クライアントブラウザに送信。 クライアントブラウザは少しの処理しかしない。

Page 78: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14 ユーザインターフェース

最近

JavaScriptがもろもろやってくれる。

Page 79: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.1 デジタルへ向けて

最近は、 Web・モバイル・デスクトップアプリケーション・

ウェアラブル端末など、

いろんな媒体でWebサイトが見られている。

Page 80: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.1 デジタルへ向けて

顧客がどのように対話するか 正確には予測できない

かつ

デバイスによって 見たいコンテンツも違う

Page 81: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.1 デジタルへ向けて

そこで、ユーザインターフェースを 合成レイヤだと考える。

提供するさまざまな機能を 組み合わせる場所

Page 82: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.1 デジタルへ向けて

そこで、ユーザインターフェースを 合成レイヤだと考える。

提供するさまざまな機能を 組み合わせる場所

Page 83: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.2 制約

でも、ユーザインターフェースって いろんな種類があるから、

ただまとめればいいわけでもないですよね?

Page 84: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.2 制約

たとえば、それぞれのデバイスの使い方は

タブレットでは右クリックできない スマホでは親指だけで操作したい

みたいに。

Page 85: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.2 制約

たとえば、それぞれのデバイスの使い方は

タブレットでは右クリックできない スマホでは親指だけで操作したい

みたいに。

Page 86: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.2 制約

中核のサービスは同じでも それぞれのインターフェースがもつ制約に

サービスを適用させる必要がある。

Page 87: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

じゃあ、どういう風に webサイトを作っていけば

いいんでしょう?

Page 88: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

じゃあ、どういう風に webサイトを作っていけば

いいんでしょう?

※いろんなサイトを例に出したりしますが 「そうじゃないぞ!!!」

という方(中の人とか)がいたら 教えてください。。。

Page 89: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

まずはよくあるサイトの作り方

UIにAPI呼び出しを行わせて すべてをUIコントロールにマッピングする

Page 90: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

Page 91: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

Page 92: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

P81 段落1つめ

Page 93: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

P81 段落2つめ

Page 94: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

P81 段落3つめ

Page 95: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

Page 96: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない。

•小さな変更でも、複数のチームに変更リクエストをおこなわないといけなくなる。

•サービスの担当者たちはサービスのユーザへの見せ方に関わらない。

Page 97: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

顧客サービス担当者「サービス変更したからUIもあわせて変更して!」 UI担当者「はーい」

Page 98: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

顧客サービス担当者「サービス変更したからUIもあわせて変更して!」 UI担当者「はーい」 レコメンデーションサービス担当者「サービス変更したからUIもあわせて変更して!」

Page 99: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

顧客サービス担当者「サービス変更したからUIもあわせて変更して!」 UI担当者「はーい」 レコメンデーションサービス担当者「サービス変更したからUIもあわせて変更して!」 UI担当者「いま顧客サービスの方を修正しているから。。。」

Page 100: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

顧客サービス担当者「サービス変更したからUIもあわせて変更して!」 UI担当者「はーい」 レコメンデーションサービス担当者「サービス変更したからUIもあわせて変更して!」 UI担当者「いま顧客サービスの方を修正しているから。。。」 レコメンデーションサービス担当者「こっちの方が急いでるんだけど…。」

Page 101: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

顧客サービス担当者「サービス変更したからUIもあわせて変更して!」 UI担当者「はーい」 レコメンデーションサービス担当者「サービス変更したからUIもあわせて変更して!」 UI担当者「いま顧客サービスの方を修正しているから。。。」 レコメンデーションサービス担当者「こっちの方が急いでるんだけど…。」

Page 102: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

つらい

Page 103: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

顧客サービス担当者「この項目の桁数を変えようと思う。画面への影響ないか確認して。」

Page 104: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

顧客サービス担当者「この項目の桁数を変えようと思う。画面への影響ないか確認して。」 web UI担当者「わかったよ。」 モバイル UI担当者「わかったよ。」

Page 105: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

顧客サービス担当者「この項目の桁数を変えようと思う。画面への影響ないか確認して。」 web UI担当者「わかったよ。」 モバイル UI担当者「わかったよ。」 顧客サービス担当者「リリースしたいんだけど確認おわった?」

Page 106: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

顧客サービス担当者「この項目の桁数を変えようと思う。画面への影響ないか確認して。」 web UI担当者「わかったよ。」 モバイル UI担当者「わかったよ。」 顧客サービス担当者「リリースしたいんだけど確認おわった?」 web UI担当者「終わった」 モバイル UI担当者「まだだよ。」

Page 107: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

顧客サービス担当者「この項目の桁数を変えようと思う。画面への影響ないか確認して。」 web UI担当者「わかったよ。」 モバイル UI担当者「わかったよ。」 顧客サービス担当者「リリースしたいんだけど確認おわった?」 web UI担当者「終わった」 モバイル UI担当者「まだだよ。」

リリースできない

Page 108: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

顧客サービス担当者「この項目の桁数を変えようと思う。画面への影響ないか確認して。」 web UI担当者「わかったよ。」 モバイル UI担当者「わかったよ。」 顧客サービス担当者「リリースしたいんだけど確認おわった?」 web UI担当者「終わった」 モバイル UI担当者「まだだよ。」

Page 109: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

つらい

Page 110: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

Page 111: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

Page 112: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない。

Page 113: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

Page 114: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

1つの画面を表示するために 3つのサービスを

呼び出さないといけない

❶ ❷

Page 115: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

Page 116: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

Page 117: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

たとえば(1)

ヘルプデスクアプリではWeb画面で見る 顧客記録を全部見たい

移動店舗ではモバイルアプリで見る 店舗で買ったことがある顧客記録だけ見たい

Page 118: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

たとえば(2)

http://qiita.com/api/v2/docs#ユーザ

レスポンスでいろんな情報が返ってくる

web画面で見るならいいけど スマホで見るときはここまで情報はいらないかも

Page 119: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.3 API合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

Page 120: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

では、欠点を補うためには どうしていけばいいでしょう

Page 121: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

Page 122: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

サービスにUIの部品を直接提供させ その部品を集めてUIを作成する

Page 123: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

UIコンポーネント

Page 124: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

たとえば http://syobochim.hatenablog.com/

twitterのところがwidgetになっている

Page 125: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

たとえば http://syobochim.hatenablog.com/

twitterのところがwidgetになっている

急遽つけたので、 かなり雑です。。。

Page 126: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

たとえば http://syobochim.hatenablog.com/

twitterのところがwidgetになっている

デザインを決めているのは ブログの管理者でもはてなさんでもなく

twitter!

Page 127: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

たとえば http://syobochim.hatenablog.com/

twitterのところがwidgetになっている

デザインを決めているのは ブログの管理者でもはてなさんでもなく

twitter!

widget系が多い。 このモデルを適用しているサイトは少ない

Page 128: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

サービスを変更するチームが UI部品の変更も行う

Page 129: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

サービスを変更するチームが UI部品の変更も行う

変更をすぐに公開できる

Page 130: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

ただし、注意があります

Page 131: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

ユーザエクスペリエンス(ユーザ体験)を 他のサービスと一貫させないと

使いにくくなっちゃう。

Page 132: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

ユーザエクスペリエンス(ユーザ体験)を 他のサービスと一貫させないと

使いにくくなっちゃう。

「えっ、この部品は更新するために 下にスクロールすればいいのに、

こっちの部品は更新ボタンを押すのか。。。」

Page 133: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

ユーザエクスペリエンス(ユーザ体験)を 他のサービスと一貫させないと

使いにくくなっちゃう。

「えっ、この部品は更新するために 下にスクロールすればいいのに、

こっちの部品は更新ボタンを押すのか。。。」

わかりにくい!!!!

Page 134: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

そういうのを回避するために リビングスタイルガイド

を作りましょう

Page 135: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

そういうのを回避するために リビングスタイルガイド

を作りましょう

HTMLやCSS、画像といった資産を共有してある程度の一貫性を持たせる

http://getbootstrap.com/javascript/ 動くものがあると簡単にイメージを共有できる

Page 136: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

解決できるか確信が持てない大きな課題

Page 137: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

解決できるか確信が持てない大きな課題

サービスが提供する機能が ウィジェットやページに

きちんと収まらないことがある。

Page 138: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

解決できるか確信が持てない大きな課題

サービスが提供する機能が ウィジェットやページに

きちんと収まらないことがある。

対話の形式が横断的になるほど このモデルが当てはまる場合が少なくなり

単なるAPI呼び出しに戻る場合がある

Page 139: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

こういうことが苦手

ゼクシィは 需要がタブごとに別れている

http://zexy.net/ (タブを各サービスとする)

Page 140: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

こういうことが苦手

ゼクシィは 需要がタブごとに別れている

http://zexy.net/ (タブを各サービスとする)

サイトの右上の検索機能を使うと 各サービスを混合した結果が出てくる

(対話の形式が横断的)

Page 141: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

Page 142: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

Page 143: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

Page 144: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

でもこのふたつは 解消できていない

Page 145: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

『4.14.5 フロントエンド向けのバックエンド(BFF)』はここの二つの話

Page 146: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.13.4 UI部品合成

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

Page 147: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

サーバ側集約エンドポイントの APIゲートウェイを用意する!

https://www.ogis-ri.co.jp/otc/hiroba/others/SilliconValley5/

Page 148: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

Page 149: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF) APIゲートウェイで

サービスを順番に呼び出して 結果を組み合わせる

Page 150: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF) APIゲートウェイで

サービスを順番に呼び出して 結果を組み合わせる

サーバとの通信が一回で済む

Page 151: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

https://twitter.com/kawasima/status/753483914954485761

APIゲートウェイで サービスを順番に呼び出して

結果を組み合わせる

サーバとの通信が一回で済む

Page 152: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

AWSにも API Gateway管理サービスがある

http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/

welcome.html

Page 153: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

でも サーバ側エンドポイントの振る舞いが

多くなりすぎたとき 大惨事になることがある

Page 154: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

でも サーバ側エンドポイントの振る舞いが

多くなりすぎたとき 大惨事になることがある

全てのサービス向けの 1つの巨大なレイヤをもつのは 影響が大きくなりすぎるので問題

Page 155: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

たとえば 一つのサービスに破壊的変更があったとき ブラウザもモバイルもネイティブアプリも すべてのクライアントに影響が出ちゃう

APIゲートウェイ自体が死んだ時の影響も すごく大きい

Page 156: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

Page 157: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

Page 158: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

Page 159: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

Page 160: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

BFF(フロントエンド向けのバックエンド) Backends For Frontends

http://samnewman.io/patterns/architectural/bff/

Page 161: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

Page 162: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

ここが分かれた

Page 163: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF) サーバーに組み込まれた

ユーザインターフェースの部品

Page 164: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF) 各デバイスごとの表示を 細かくわけましょう!

Page 165: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

デバイスごとに表示を変えることができる

たとえばGoogle

Page 166: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

Page 167: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

Page 168: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

Page 169: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

Page 170: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます検索結果がwebとスマホで

少し違う

Page 171: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます検索結果がwebとスマホで

少し違う

「スマホ対応」のサイトを優先

Page 172: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

特定のユーザエクスペリエンスの提供に 特化した振る舞いだけを管理すること。

さもないと

入り込むべきではないロジックが 入り込む恐れがある。

Page 173: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

Page 174: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.5 フロントエンド向けのバックエンド(BFF)

この方法の3つの欠点

•サービスの作成者とユーザインターフェースの作成者が違う

•通信が多くなる可能性がある

•デバイスごとにレスポンスを調整できない

Page 175: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.6 ハイブリッド手法

Webサイトは部品ベースの組み立てをして モバイルアプリケーションはBFFを使う

という企業もある。

ユーザに提供する基盤となる機能の 凝集性を維持することが必要

Page 176: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.6 ハイブリッド手法

https://www.thoughtworks.com/insights/blog/bff-soundcloud

ちなみに 「4.15.5 ストラングラー(絞め殺し)パターン」

についても書いてる

Page 177: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.6 ハイブリッド手法

4.15.5 ストラングラー(絞め殺し)パターン

http://bliki-ja.github.io/StranglerApplication/

Page 178: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.6 ハイブリッド手法

4.15.5 ストラングラー(絞め殺し)パターン

http://bliki-ja.github.io/StranglerApplication/

昔からやっている 「古いシステムを徐々に新しいシステムに

移行していきましょうね」 のかっこいい言い方

Page 179: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.6 ハイブリッド手法

4.15.5 ストラングラー(絞め殺し)パターン

古いシステムへの呼び出しを インターセプトする。

呼び出しを既存のシステムに ルーティングするか

自分で記述した新しいコードに向けるかを 判断できる。

Page 180: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14.6 ハイブリッド手法

でも、ハイブリッドよりも。。。

BFFで作った層とクライアントで 同じ言語、同じ実装で動かす

isomorphic

https://speakerdeck.com/koichik/isomorphic-survival-guide

Page 181: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14 ユーザインターフェース

おはなししたこと

•API合成 •UI部品合成 •APIゲートウェイ •BFF(フロントエンド向けのバックエンド) •ハイブリッド手法 •isomorphic

Page 182: 第三回マイクロサービスアーキテクチャ読書会(後半)

ユーザインターフェースを合成レイヤと考えます

4.14 ユーザインターフェース

ではディスカッションタイム!

•いま紹介した手法のどれかをつかっていますか?

•いま業務で作っているサービスはどの手法を当てはめればいいと思いますか?

Page 183: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.16 まとめ4章で言いたいこと

•いかなる代償を払ってもデータベース統合を避けます

•RESTとRPCとの間のトレードオフを理解し、RESTをリクエスト / レスポンス統合の優れた出発点と積極的にみなします

•オーケストレーションよりもコレオグラフィを選びます

•ポステルの法則を理解して耐性のあるリーダー(Tolerant Readers)をつかって破壊的変更を避け、バージョンが必要ないようにします

•ユーザインターフェースを合成レイヤと考えます

Page 184: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.16 まとめまとめに関する説明が終わったのですが

ここ話してないです。

•4.11 マイクロサービスの世界におけるDRYとコード再利用性のリスク •4.12 参照によるアクセス •4.15 サードパーティソフトウェアとの統合 (4.15.5 ストラングラーパターンは話しましたが…)

Page 185: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.16 まとめまとめに関する説明が終わったのですが

ここ話してないです。

•4.11 マイクロサービスの世界におけるDRYとコード再利用性のリスク •4.12 参照によるアクセス •4.15 サードパーティソフトウェアとの統合

それぞれ、さらっと話ていきます!

Page 186: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.16 まとめ

•4.11 マイクロサービスの世界におけるDRYとコード再利用性のリスク •4.12 参照によるアクセス •4.15 サードパーティソフトウェアとの統合

Page 187: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.11 マイクロサービスの世界における DRYとコードの再利用のリスク

DRY (Don't Repeat Yourself)

コードの重複を避けるようにすること

Page 188: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.11 マイクロサービスの世界における DRYとコードの再利用のリスク

DRY (Don't Repeat Yourself)

コードの重複を避けるようにすること

システムの振る舞いと 知識の重複を回避すること

Page 189: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.11 マイクロサービスの世界における DRYとコードの再利用のリスク

重複コードを抽象化して 複数の箇所から呼び出すような

共通ライブラリを作成する

Page 190: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.11 マイクロサービスの世界における DRYとコードの再利用のリスク

マイクロサービスとコンシューマを 過度に結合すると危険!

マイクロサービスの小さな変更が コンシューマへの不要な変更を 引き起こしてしまうかも…!

Page 191: 第三回マイクロサービスアーキテクチャ読書会(後半)

変更したよ!

Page 192: 第三回マイクロサービスアーキテクチャ読書会(後半)

変更したよ!やったー!

Page 193: 第三回マイクロサービスアーキテクチャ読書会(後半)

変更したよ!やったー! えっ

えっ えっ

Page 194: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.11 マイクロサービスの世界における DRYとコードの再利用のリスク

共有コードをサービス境界外で使うと 結合の可能性を招きます

ログライブラリなど、 外部から見えないものはOK

Page 195: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.11 マイクロサービスの世界における DRYとコードの再利用のリスク

一つのマイクロサービス内ではDRYを やぶらないけど

すべてのサービスに渡るDRYの違反には 寛大になろう!!!

DRY違反よりもサービス間の結合の方が 害があるよ

Page 196: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.11.1 クライアントライブラリ

ただし、一部の共通的な処理は それぞれのサービスで実装するのではなく クライアントライブラリで共通化すると

制御が簡単になることもある。

Page 197: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.11.1 クライアントライブラリ

Netflixのクライアントライブラリ https://github.com/Netflix/ribbon

サービスの検出・故障モード・ロギング など

実際のサービス自体の性質とは 関係ないところに対処する

Page 198: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.16 まとめ

•4.11 マイクロサービスの世界におけるDRYとコード再利用性のリスク •4.12 参照によるアクセス •4.15 サードパーティソフトウェアとの統合

Page 199: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.12 参照によるアクセス

ドメインエンティティに関する情報を 渡す方法について

Page 200: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.12 参照によるアクセス

Page 201: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.12 参照によるアクセス

Page 202: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.12 参照によるアクセス

あるタイミングの 顧客データ

Page 203: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.12 参照によるアクセス

Page 204: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.12 参照によるアクセス

ここの 顧客データは 最新なの?

Page 205: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.12 参照によるアクセス

他のサービスから 更新されているかも

Page 206: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.12 参照によるアクセス

じゃあどうすればいいの?

Page 207: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.12 参照によるアクセス

Page 208: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.12 参照によるアクセス

Page 209: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.12 参照によるアクセス

実際に使う タイミングで 情報をとる

Page 210: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.12 参照によるアクセス

Page 211: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.12 参照によるアクセス

変更が入っても 平気!

Page 212: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.12 参照によるアクセス

常に顧客サービスにアクセスして 特定のCustomerに関連する情報を

調べていると 顧客サービスの負荷が大きくなりすぎる

情報が新しいと考えられる期間を知らせると キャッシングを大いに活用して

負荷を減らせる

Page 213: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.16 まとめ

•4.11 マイクロサービスの世界におけるDRYとコード再利用性のリスク •4.12 参照によるアクセス •4.15 サードパーティソフトウェアとの統合

Page 214: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.15 サードパーティソフトウェアとの統合

自分では制御できないシステムに 対する統合

Page 215: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.15 サードパーティソフトウェアとの統合

自分では制御できないシステムに 対する統合

•Excel(オフィス生産性ツール) •OS •給与システム

など

わざわざ構築するのはしんどい

Page 216: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.15 サードパーティソフトウェアとの統合

4.15.1 制御の欠如

ツールの拡張に使えるプログラミング言語は 提供ベンダによる

統合とカスタマイズの作業を チームに取り戻すことが大切

Page 217: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.15 サードパーティソフトウェアとの統合

4.15.2 カスタマイズ

カスタマイズが可能なツールもある

でも

カスタマイズのコストは 新規に構築するよりも

高くなってしまう場合があるので注意

Page 218: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.15 サードパーティソフトウェアとの統合

4.15.2 カスタマイズ

複雑なカスタマイズをするよりも 組織のやり方を変更する方が

理にかなっている

Page 219: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.15 サードパーティソフトウェアとの統合

4.15.3 統合スパゲティ

ツールとの統合方法も課題

サービス間の統合方法を 入念に検討することが重要

Page 220: 第三回マイクロサービスアーキテクチャ読書会(後半)

4.15 サードパーティソフトウェアとの統合

4.15.4 思い通りにする

自分が制御するプラットフォーム上で 全てのカスタマイズを行い

ツール自体を使うコンシューマの数を 制限することで

状況を自分の思い通りにする

Page 222: 第三回マイクロサービスアーキテクチャ読書会(後半)

ありがとうございました