1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

分散アーキテクチャにおける現代のトレードオフ分析と今後のソフトウェアアーキテクチャの展望

概要

アーキテクチャメトリクスの話はほぼなく、ハードパーツの話がメインで取り上げられていました。
複数のシナリオを想定し、モノリスのままでいるのか?
それともマイクロサービスにするのか?
マイクロサービスにしたとしてもどのような粒度感で分割するのか?
について、書籍の内容のざっくりした考え方についてお話しされていました。

分割の粒度感

マイクロサービスは、DDDでもよく語られている【境界付けられたコンテキスト】の考え方
を用いて、その境界内でトランザクションの範囲が完了することや、
変更頻度・変更理由がそのサービス内のものに関しては同じであるという
コンポーネントの凝集原則の1つ、CCPを意識した考え方をベースとして分けたくなる。

要はサービス粒度での単一責務てやつだ。
高度に物理的に分割され、疎結合を満たすことによって、スケーラビリティやアジリティを高めることができる。
しかしながら、それ以外の品質特性軸によるビジネスドライバによって、安易に単一責務のその単位で分けると判断してはならない。

繰り返し述べられていたこと

トレードオフ分析は継続的に行うものであるという、至極当たり前なことだけど、
難しいことを述べていました。
これはつまり、環境変化などによって、トレードオフ要素間の重みの比重が変化するからです。

ファイル名

ある瞬間上図のように、品質特性A(天秤の左側)、B(天秤の右側)の重みが定義されていたとする。
しかしそれは時間経過に伴うステークホルダーの要求の変化や、市場の変化などによって
天秤の傾き具合が変化してしまいます。
それを事実データを使ったりして、客観的にいまどのくらいのトレードオフ関係なのか?
それとも抜本的技術が登場したことによって、トレードオフ関係が解消されたのか?
などを継続的にモニタリングしろ、ということになります。

同時にそれは、大前提であるステークホルダーの要求の変化や関心の強さの変化にも
目を光らせなくてはなりません。

落とし穴

本にあるいくつかの非機能項目での評価マトリクスにおいて、
たとえば【セキュリティ】【パフォーマンス】などが重要な特性であり、
その軸でアーキテクチャを評価しなくてはならないとした場合に、
〇△×という3種類の定性評価だけでは、間違った意思決定になるということ。
なぜなら2つの特性の重みが同じである保証はないからである。

下図はハードパーツにおいて取り上げられていた、
再利用パターンのうち、共有ライブラリを使って静的な結合にするケースか、
共有サービスとして分離した上であとから動的に通信で結合させるケースを
7つの評価軸で比較検討している様子である。

スクリーンショット (183).png

たとえばわかりやすくするために、10段階の定性的な重みのうち、
めちゃくちゃ強く求められる特性であるほど10に近づくという場合を想定し、
セキュリティが10、パフォーマンスが4程度であったとする。
この場合、明らかにセキュリティの方が比重が重いため、
単純な〇△×という3種類の定性評価だけでなく、重みも意識した評価が必要。

たとえば重みポイントが10で〇なら、10×3で30 の評価ポイント
重みポイントが5で△なら、5×2 で10 の評価ポイント
といったようにしなくてはならない。

必ずしもこの計算方法が絶対的ではないので、そこだけ注意。

所感

今回のテーマであるハードパーツの書籍を私はグループディスカッション形式に
計3回ほど行ったことがあるが、何度読んでも前提となるステークホルダーマネジメント
をアーキテクト自身が行い、アーキテクチャを決める品質の軸の優先度がわかっている
必要があると感じています。

匠メソッドによるプラスの価値の考察と、脅威モデリングによるマイナスからの
両方による考察が必要であると感じます。

組織を支えるアーキテクチャの過去と未来

背景説明

登壇者の方の組織では、4年前に1チーム5名であった状態から、
今にかけて直線的に組織の人数とそれに伴うチーム数が増加したらしい。

組織の拡大に伴って、生産性を下げないようにするために、
またアーキテクチャの方針として、チームごとのマイクロサービスに分割することで、
各チームごとに素早く自律分散して開発ができるようにしたそう。

本来は、初期からのマイクロサービスに分割するのは、
アンチパターンとされているが、たまたま条件がそろって、初期からマイクロサービスで割と成功を収めた事例としてのお話であった。

設計方針

業務ドメインごとにサービスを分割し、マイクロサービスごとにデータも分割。
主要なマイクロサービスに対しては、同期的な通信による蜜結合状態を避け、
非同期通信による疎結合の徹底。

フロントエンドからは、BFFを経由してのアクセス。

当初のアーキテクチャと現在の比較

共有ライブラリを作成せずに、あえてサービス間でコードを重複しても、
DRY原則に反していてもいいとする方針であった。

重複コード部分を共有ライブラリに分けることによって、
不要な結合を排除して、サービスごとのコンテキスト境界 独立性を重視したかった
ために、あえてそのような設計にしたそう。

このあたりのお話は、以下の共有ライブラリのパターンに参考情報があります。

しかしながら、現在は共有ライブラリパターンを適用しているとのこと。
というのも、重複コード部分において、データベース周りやWeBフレームワーク、ユーティリティなどなど、共通で使いまわしたいものが固まってきたからだそう。

恐らく共有サービスパターンを使用しなかったのは、
動的に連携した際に、ランタイムエラーが起きる可能性が読めないことなどの
懸念事項が背後にあったからだと思われる。

感想

そもそもチームの境界を正しく発見するためには、
データのプロセスの両方の側面からLeSS的な組織一致団結活動によるモデリングによって
チームの責任境界などを継続的に議論しないと無理ゲーではと感じた。

ただし、BFFやら非同期通信を基本とした設計によって、疎結合を徹底されているのには非常に感心をしました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?