Slide 1

Slide 1 text

hamait2022 2022/12/03 @suchi SOFTWARE ARCHITECTURE: THE HARD PARTS Modern Trade-Off Analyses for Distributed Architectures

Slide 2

Slide 2 text

hamait2022 The Hard Parts 2

Slide 3

Slide 3 text

hamait2022 The Hard Parts まとめ Modern Trade-Off Analyses for Distributed Architectures 3

Slide 4

Slide 4 text

hamait2022 The Hard Parts と思ったら 4 • 3日前に翻訳の島田さんがForkwellイベント で発表していた(→SpeakerDeck) • わかりやすい! これを読めばOK 終了

Slide 5

Slide 5 text

hamait2022 The Hard Parts まとめ 5 • 今風のソフトウェアアーキテクチャ構築方 法を知る • 普遍的なハードパーツ(難題)に取り組む方 法を知る

Slide 6

Slide 6 text

hamait2022 The Hard Parts Hard Parts 6 • 飲み込みにくい言葉 • 「難題」くらいに読み替える • 変更困難(Hard:堅い←→Soft) • 難しい(Hard:キツい←→Easy)

Slide 7

Slide 7 text

hamait2022 The Hard Parts ソフトウェアアーキテクトの役割 7 • アーキテクチャ決定を下す • アーキテクチャを継続的に分析する • 最新のトレンドを把握し続ける • 決定の順守を徹底する • 多様なものに触れ、経験している • 事業ドメインの知識を持っている • 対人スキルを持っている • 政治を理解し、かじ取りする

Slide 8

Slide 8 text

hamait2022 The Hard Parts ソフトウェアアーキテクチャの法則 8 • 第一法則 • ソフトウェアアーキテクチャはトレードオフが すべて • 第二法則 • 「どうやって」よりも「なぜ」の方がずっと重 要

Slide 9

Slide 9 text

hamait2022 The Hard Parts Why? 正解は存在しない 9 • 絶対的な正解はなく、さまざまな妥協から 選択するハードパーツ(難題)が山ほどある • 「最善な選択を見つける」よりも「最悪な 選択をしない」 CC-BY-NC 2.0 peter-rabbit

Slide 10

Slide 10 text

hamait2022 The Hard Parts 全体構成 10 •第一部 分割する •第二部 結びつける

Slide 11

Slide 11 text

hamait2022 The Hard Parts I. 分割する 11 • 結合の見分け方 • アーキテクチャのモジュール化 • アーキテクチャの分解 • コンポーネントベース分解パターン • 運用データの分解 • サービスの粒度

Slide 12

Slide 12 text

hamait2022 The Hard Parts II. 結びつける 12 • 再利用パターン • データの所有権と分散トランザクション • 分散データアクセス • 分散ワークフローの管理 • トランザクショナルサーガ • コントラクト • 分析データの管理

Slide 13

Slide 13 text

hamait2022 The Hard Parts 重要なのはトレードオフ分析 13 • これらのすべての節で • 特性を定義→候補を論理的に分類/パターン • それぞれのトレードオフを特性に沿って整理 • トレードオフの表が43もある • プロジェクトSysops Squadという物語(Saga) • 課題と選択の例

Slide 14

Slide 14 text

hamait2022 The Hard Parts 例: サービスの粒度 15 分解要因ドライバー ドライバーを適用する理由 サービスの範囲と機能 密な凝集を持った単一目的のサービス コード変動率 アジリティ(テスト範囲とデプロイリスクの低減) スケーラビリティとスループット コスト削減と迅速な対応 耐障害性 全体的な稼働率の向上 セキュリティアクセス 特定の機能へのセキュリティアクセス制御の向上 拡張性 アジリティ(新機能の追加の容易さ) 統合要因ドライバー ドライバーを適用する理由 データベーストランザクション データの整合性と正確性 ワークフロー 耐障害性、パフォーマンス、信頼性 共有コード 保守容易性 データ関係 データの整合性と正確性

Slide 15

Slide 15 text

hamait2022 The Hard Parts 例: トランザクショナルサーガパターン 16 パターン名 通信 整合性 調整 エピックサーガ(sao) 同期 アトミック オーケストレーション 伝言ゲームサーガ(sac) 同期 アトミック コレオグラフィ おとぎ話サーガ(seo) 同期 結果 オーケストレーション 時間旅行サーガ(sec) 同期 結果 コレオグラフィ ファンタジーサーガ(aao) 非同期 アトミック オーケストレーション ホラーストーリーサーガ(aac) 非同期 アトミック コレオグラフィ パラレルサーガ(aeo) 非同期 結果 オーケストレーション アナロジーサーガ(aec) 非同期 結果 コレオグラフィ

Slide 16

Slide 16 text

hamait2022 The Hard Parts 独自のトレードオフ分析構築 17 • 新たなハードパーツに立ち向かう方法 • 関心事の整理 • それぞれにMECEなリストを作り • トレードオフを分析する • アーキテクチャに限らないのでは? • →普遍的な難題(ハードパーツ)への対処方法が学べる

Slide 17

Slide 17 text

hamait2022 The Hard Parts O’REILLYアーキテクチャ入門本 18

Slide 18

Slide 18 text

hamait2022 The Hard Parts 翻訳は安心の島田印 19 • 日本Rubyの会理事/Ruby札幌 • 浜松Ruby会議オープニングセッション

Slide 19

Slide 19 text

hamait2022 The Hard Parts まとめ Modern Trade-Off Analyses for Distributed Architectures 20

Slide 20

Slide 20 text

hamait2022 The Hard Parts まとめ 21 • 分散システムのアーキテクチャ構築を知る • 普遍的なハードパーツ(難題)へ取り組む方 法を知る

Slide 21

Slide 21 text

hamait2022 2022/12/03 @suchi SOFTWARE ARCHITECTURE: THE HARD PARTS Modern Trade-Off Analyses for Distributed Architectures