Closed south37 closed 5 years ago
etcd の cluster upgrade の話 by @potsbo
c.f. https://microservices.io/patterns/data/database-per-service.html
マイクロサービスアーキテクチャ の 4.3 章「共有データベース」でもDB共有のアンチパターンについて説明されてます。
ざっと読んでまとめると、「DB共有だと 振る舞いの共有 に関して何もしないから変更のコストが高く、大量の回帰テストなどが必要になるので避けた方が良い」と言っているように見える。
私や私の同僚がこの業界で目にする圧倒的に一般的な統合形態は、データベース(DB)統合です。この世界では、あるサービスが別のサービスからの情報を入手したい場合、データベースにアクセスします。また、情報を変更したい場合もデータベースにアクセスします。統合について初めて考えるときにはこの方法がとても簡単であり、手始めとしては最も高速な統合形態でしょう。おそらくその為にデータベースは人気があるのでしょう。。
図4-1は、データベースで直接 SQL 操作を実行して顧客を作成する登録UIを表しています。また、データベースで SQL を実行して顧客データの閲覧と編集を行うコールセンターアプリケーションも表しています。倉庫は、データベースをクエリして顧客注文に関する情報を更新します。これは十分に一般的なパターンですが、困難を伴います。
まず、外部の関係者が内部実装詳細を閲覧したり内部実装詳細に統合したりできるようにしています。DB に格納しているデータ構造は全てに対して公平です。データベースにアクセスできる他の全ての関係者とデータ構造全体を共有します。スキーマを変更してデータをさらに適切にデータを表現したり、システムを保守しやすくしたりすることにしたら、コンシューマを壊す可能性があります。DBは事実上とても大規模な共有 API で、かなり脆弱でもあります。。。<中略>通常、このような状況では大量の回帰テストが必要になります。
次に、コンシューマが特定の技術選択に縛られてしまいます。...<中略>すでに述べたように本当は実装の詳細をコンシューマから隠し、時間とともに内部がどのように変わってもサービスにある水準の自律性を持たせるようにしたいのです。疎結合よ、さようなら。
最後に、少しの間振る舞いについて考えてみましょう。顧客の変更方法に関するロジックがあるとしたら、そのロジックはどこにあるのでしょうか。コンシューマが DB を直接操作している場合には、コンシューマが関連するロジックを持たなければなりません。。。<中略>凝集性よ、さようなら。
以前触れた優れたマイクロサービスの背後にある主な原則を覚えているでしょうか。データベース統合では、強い凝集性と疎結合の両方を失います。データベース統合ではサービスがデータを共有しなくなりますが、 振る舞いの共有 に関して何も行いません。。。<中略>必然的に変更一つでも恐れをなすようになります。いかなる代償を払っても避けてください。
microservices の非同期連携のはなし(まだちゃんとおってない) https://microservices.io//microservices/general/2018/11/08/mucon.html https://microservices.io/patterns/data/saga.html
ガウディ本のまえがきが良いことが書いてある話
@potsbo 先週のKubeConでもetcd アップグレードの話ありました
マイナーバージョンをひとつずつ上げろ、ローリングアップデートしろ、っていう話だったはず https://kccna18.sched.com/event/JAo2/deep-dive-etcd-xiang-li-alibaba-wenjia-zhang-google
詳細はこちら(よんでない https://github.com/etcd-io/etcd/tree/master/Documentation/upgrades
次回は年明けです!
2018-12-17 19:00~20:00
Microservices Mondayは、マイクロサービスに関連する話を気軽に共有する会です。毎週月曜日に開催されます。
社外からの参加を想定しているため、レポジトリはpublicになっています。
次のようなポリシーを掲げて開催しています。
話したい・聞きたいネタを書いていきます ✏️
ネタに困ったときは
ハッシュタグ #microservices_monday