勉強日記

チラ裏

PoEAA Introduction

Architecture

  • 多くの人が「Architecture」という言葉を定義する
  • 共通点
    • システムを細分化していく際の最上位の分類
    • 変えづらい
  • システムのアーキテクチャは一通りであらわされるものではない
    • 何がアーキテクチャに含まれるかは主観的なもの
    • システムの生涯にわたり変わっていく
  • アーキテクチャとは
    • 開発のエキスパートらによる、システム設計の共通理解
    • 主要なコンポーネントと、その相互作用
  • アーキテクチャに関する決め事
    • 変えづらいため、早期に正しく決めたい
    • 簡単に変えられないからこそ重要
  • ほとんどのシステムは「レイヤ分け」を大なり小なり行う
  • 本書ではパターンを「アーキテクチャ」「そうでないもの」と殊更に区別しない。主観が入るから

Enterprise Applications

  • S/Wにもいろいろあるよね、という話
  • エンタープライズアプリケーションでは、下記のようなものは不要
    • マルチスレッド
    • S/WとH/Wとの統合
  • 逆に、下記のような困難がある
  • あらゆるS/Wで共通のことというのは、むしろ少ない
  • そもそもEnterprise Applicationとは
    • 永続性データをもつ
      • 年単位でデータ保持
      • H/W、OS、コンパイラ等よりも長生き
      • それを利用するプログラムが変わっていく
      • データ構造も変わっていく
        • 新しいデータも持てるように
      • S/Wを捨てて新しいものに変えても、データは移行される
    • データは大量
    • データは同時にアクセスされる
    • 大量のデータを扱うため、UIもたくさん
      • 何百画面もあることは珍しくない
    • 大量のデータを処理するため、大量のバッチ処理がある
  • Enterprise Applicationは、たいてい他システムと連携する
    • そもそもデータの概念が違ったりして、あまりうまくいかない
    • 例: 「customer」
      • リード客
      • 過去の客
      • 物の消費者は含めるが、サービスの消費者は含めない
  • ここにおいて、「ビジネスロジック」が出てくる
  • ビジネスロジック
    • 「ロジック」といいつつ、これほど論理的でないものはない
    • 実装の都合で変えられる代物ではない
    • しょっちゅう変わる
  • エンタープライズアプリケーションは、必ずしも大きなものではない
    • 小さくても大きな利益をもたらすことはできる
    • シンプルに小さく保て

Kinds of Enterprise Application

  • エンタープライズアプリケーション」にもいろいろあるよ、という話
    • 例1: B2Cの小売システム
      • 客がいっぱいいるのでH/Wスケーラビリティが必要
      • ビジネスロジックは比較的単純
      • サポートブラウザをなるべく広く
      • データソースはDB、在庫システム
    • 例2: B2Bのバックエンド賃貸システム
    • 例3: 小さな企業向けのコスト管理システム
      • ユーザー少ない
      • ロジック単純
      • データソースはテーブル数個程度
      • 単純とはいえ、困難が一切ないわけではない
        • 仕様追加
          • 払戻
          • 給与に払戻を反映
          • 税計算
          • CFO向けレポート出力
          • 飛行機予約
        • 短納期
          • さっさと完成しないと損失になる
            • 焦って将来の拡張性を損なう設計にはしたくない
            • とはいえむやみに柔軟にするのもよくない
              • 複雑になる
              • 結果、追加開発が大変になる
              • 結果、開発が遅くなる
      • 小さなシステムとはいえ、不適切なアーキテクチャは看過できない
        • 小さなシステムをたくさんあると、影響が蓄積する
  • 「どんなエンタープライズアプリケーションにも適用できるパターン」はない
  • 採用パターンを決めたら、それをアプリケーション向けに調整する必要がある
  • 本書に限らず、設計に関する決め事の判断材料を提供するだけ
  • ツールやフレームワークについても同じ。適しているか考えよ

Thinking About Performance

  • まず動くものを作り、実測し、それをもとに最適化せよ
    • ただし、アーキテクチャに関しては後から変えづらいことがある
    • 後から簡単に変えられるのに、早期から心配する人もいる
  • パフォーマンスは実測しないとわからない
    • 遅そうでも、実測したら問題ないことはままある
  • 本書でも、可読性のためにパフォーマンスを犠牲にしているサンプルコード多数
  • 実測なしに「早いはずの」コードを書くと、コードが読みづらくなるだけ
  • 環境や設定が変われば再測定が必要
  • 旧環境で有利に働いた最適化が、新しい環境では逆に遅くなることもある
    • 【補】SQLの高速化
      • MySQL 8で、INをNOT EXISTSで置き換えたら逆に遅くなったりした
        • EXPLAINによると、INがたぶんINNER JOINに置き換わり暗黙裡に最適化されていた
  • 言葉の混乱。詳しい言葉を使おうね
    • 例1: 速度・時間に関する言葉
      • response time
        • 要求を受け取って、処理して、結果を応答するまでの時間
      • responsibility
        • 要求を受け取り、「これから処理するよ」と応答するまでの時間
        • プログレスパーを表示するまでの時間とか
          • 分母の計算があるのでlatencyよりは長時間かかるはず
      • latency
        • 要求を受け取り、何もせず応答するまでの時間
        • ローカルだと早い
        • リモートだと遅い
        • アプリケーションのコードレベルでは高速化できない
      • throughput
    • 例2: 負荷に関する言葉
      • Load
        • 何人同時接続しているか、とか
      • Load sensitivity
        • 負荷によりresponse time等がどれほど変化するか
        • 負荷増による劣化をとくに degradation とも
      • efficiency
        • リソースあたりの値
        • 「CPU2つで30tps」
        • 「CPU4つで40tps」
        • 前者のほうが高効率
      • capacity
        • 最大のthroughputやload
      • scalability
        • リソースの投入がパフォーマンスにどう影響するか
        • vertical scalability / scaling up
          • 単一サーバーにリソース投入
        • horizontal scalability / scale out
          • サーバーそのもの投入
  • 「throughputは向上するがresponse timeは遅くなる」ということもあるので、安易に「パフォーマンス」という言葉を使わない
  • エンタープライズアプリケーションでは、capacityやefficiencyよりもscalabilityを優先したほうがうまくいくこと多し
    • 複雑な設計をしてcapacityを上げるより、H/Wを投入したほうが安上がりなことがままある

Patterns

  • パターンは「半生」
    • プロジェクトごとに「ちゃんと焼いて」完成する必要がある
      • 調整
      • 全く同じプロジェクトなどない
  • パターン同士は非依存だが、孤立はしていない
    • あるパターンを理解するために本書を全部読まないといけない、とならないよう
    • 複数のパターンは併用される
  • 本書には新しいことはない
    • 新しく「開発した」パターンはない
    • 「発見した」ものが載っている
  • 普遍的な解決策を記述し、その核心をとらえ、パターンとして書き下している
  • 「そんなの知ってるよ」という設計者にとっても、他者とのコミュニケーションに有用
    • 語彙の提供
  • エンタープライズアプリケーション向けパターンが大多数だが、一般のS/Wに利用できるパターンも掲載した

The Structure of the Patterns

  • name
    • 「語彙の提供」のために重要
  • intent
    • 1~2文
  • sketch
  • motivation
    • パターンが解決する問題の例
  • how it works
    • implementation-issueとか
    • platform-specificなこととか
  • when to use it
    • トレードオフについてもここに書かれている
    • 「どういうときにこれを使わないか?」の判断材料
  • further reading
    • ここまでに書いた内容の理解を深めるためのsection
    • 包括的な内容ではない
  • examples
    • 半生のパターンを完成させたやつ
    • そのまま使わないでね
    • 核心をとらえやすくするために、あえて簡略化している
    • そのまま使える代物じゃないから、ダウンロード可能にはしてないよ

Limitations of These Patterns

  • 本書のパターン集は包括的なものではない
    • 完璧を目指すよりも有用なものをまず出版
  • 執筆時点での著者の理解を反映したものである
    • まだ確立されていない
  • パターンの使用は出発地点にすぎない
    • 先人たちの地検や試行錯誤に、自分自身のを加えよ
    • パターンはそのまま使わず、調整せよ

英語

  • In case you haven't realized it, ...
    • [決まり文句] 一応言っておくと
  • underpin
    • Support, justify, or form the basis for.
  • myriad
    • A countless or extremely great number of people or things.
  • pragmatic
    • Dealing with things sensibly and realistically in a way that is based on practical rather than theoretical considerations.
  • cynicism
    • An inclination to believe that people are motivated purely by self-interest; scepticism.
  • inclination
    • A person's natural tendency or urge to act or feel in a particular way; a disposition.
  • scepticism
    • A sceptical attitude; doubt as to the truth of something.
  • sceptical
    • Not easily convinced; having doubts or reservations.
  • reservation
    • An expression of doubt qualifying overall approval of a plan or statement.
  • qualify
    • [with object] Make (a statement or assertion) less absolute; add reservations to.
  • outlast
    • Live or last longer than.
  • stress
    • Give particular emphasis or importance to (a point, statement, or idea) made in speech or writing.
  • dissonance
    • Lack of agreement or harmony between people or things.
  • mung
    • [with object] Manipulate (data)
  • haphazard
    • Lacking any obvious principle of organization.
    • 行き当たりばったり
  • retail
    • A person or business that sells goods to the public in relatively small quantities for use or consumption rather than for resale.
      • 逆に、large quantities で for resale なのは「卸」(wholesale)でしょう
  • valuation
    • An estimation of the worth of something, especially one carried out by a professional valuer.
  • devoid of
    • Entirely lacking or free from.
  • payroll
    • A list of a company's employees and the amount of money they are to be paid.
  • reimbursement
    • The action of repaying a person who has spent or lost money.
    • 払戻、償還等
  • hamper
    • Hinder or impede the movement or progress of.
  • hinder
    • Make it difficult for (someone) to do something or for (something) to happen.
  • impede
    • Delay or prevent (someone or something) by obstructing them; hinder.
    • インピーダンス」 (交流回路の抵抗みたいなやつ)
  • instrument
    • [verb] Equip (something) with measuring instruments.
    • [noun] A tool or implement, especially one for precision work.
  • bogus
    • Not genuine or true (used in a disapproving manner when deception has been attempted)
  • commensurate
    • Corresponding in size or degree; in proportion.
  • choir (kwάɪɚ(米国英語), kwάɪə(英国英語))
    • An organized group of singers, especially one that takes part in church services or performs in public.
  • regurgitate
    • Bring (swallowed food) up again to the mouth.
    • Repeat (information) without analysing or comprehending it.
      • 比喩的
  • scaffolding
    • A temporary structure on the outside of a building, made of wooden planks and metal poles, used by workmen while building, repairing, or cleaning the building.
  • ramifications
    • A complex or unwelcome consequence of an action or event.
  • stand
    • Remain valid or unaltered.