システム・アーキテクチャのベストプラクティス?

システム・アーキテクチャのベストプラクティス?

本記事はMakuake Product Team Advent Calendar 2018の23日目の記事です。
今日は僕の誕生日です。誕生日の7時間をかけて書きました。笑
こんにちわ。よーへいです。 今日はMakuakeのAdvent Calendar 2018ということで、エンジニアっぽい記事を書いてみようと思います。 あまりみられないシステムアーキテクチャの総論みたいな記事です 全部詳細に書くと書籍規模の話になってしまうので、適度に省いて、世の中にある情報はリンクにバンバン流していきます。

目次

  • 前段として
    • システム・アーキテクチャとは何か
  • システム・アーキテクチャのプラクティス
    • あとがき
      • アーキテクチャ・デザインにとって重要なこと
        • 不自由なエンジニアリング
        • システムアーキテクチャ・デザインの要素と角度
          • 誰が作るのか(社会の中で・会社の中で)
          • 材料の哲学と未来
        • 重要なのは多くのベスト・プラクティスを知ることそのものではない
    こんな感じで書いています。

    システム・アーキテクチャとは何か

    基本的にはどんなシステムも「データを管理し、それを利活用すること」が目的ですから、これを実現する、あるいはある期間実現し続ける機能を提供することが命題です。 システム・アーキテクチャはそのために最も適した構造をデザインすることです。

    WEBエンジニアにとっての最もシンプルな例を考えてみます

    これは、よく言われる「データベースがない静的なWEB」であっても例外ではなく、例えば以下の様なシンプルなhtmlであっても、生内は北海道生まれであることを伝えるための成分を構造化し、データとして完成させた上でhtmlフォーマットに組み込み、webサーバーアプリケーションに乗せてUIとして表現することを目的としています。
    <html>
        <head>
            <title>生内の秘密について</title>
        </head>
        <body>
            <h1>生内には秘密があります</h1>
            <dl>
                <dt>出身地</dt>
                <dd>北海道生まれです</dd>
            </dl>
        </body>
    </html>
    
    この機能を実現するために、例えば以下の様にRDBMSに作成したtableにdataを保存し、それをruby、PHPなどから読み取って表示するという選択肢もあります。

    table name “ikunai_secrets”

    titlebody
    出身地北海道生まれです
    上記例では同じくRedisなどのKVSにkeyとvalueの関係で保存しても構いませんし、csvやjson、xmlファイルなどでももちろん問題がありません。 また、上記の様にストラクチャを変更したとしてもシステムの目的は何ら変わりません。 データと機能の間をどう繋ぐかはエンジニアの自由です。 そして、そのシステムに期待される
    • 機能拡張性(maintenancibility)
    • 変容への俊敏性(Asility)
    • 過酷な利用条件(Hard Enviroment)・利用状況(Scalability)への耐性
    • 間違いやエラーへの回復性(Resilience)
    • 何よりもそのシステムの寿命(Lifecycle)
    など様々な要素を鑑みると、おのずと決定すべき構造が見えてきます。 もし上記の例であなたが何らかのDatabaseの採用を検討していたならば、それは未来の機能拡張性、たとえば
    titlebody
    出身地北海道生まれです
    性別男です
    となる様な未来を思い描いていたからでしょう。 このように「今と未来の姿」を両方考えた時に、アーキテクチャ・デザインのパターンは無限に広がります。 次の章ではWEBに限らず、僕が実際に書いたり構築したり、または関わったほんの一部の特徴的なシステム・アーキテクチャを肝となるポイントの解説を添えた形で実例として紹介していきましょう。

    この記事はシリーズです。

    一緒に「世界をつなぎ、アタラシイを創る」エンジニアを募集しております。ご興味持っていただけた方は、「各種エンジニア募集! クラウドファンディングMakuake」からご連絡ください。