見出し画像

はじめての設計をやり抜くための本【設計編】第2章設計の目的①何を設計するのか

設計ができるようになるためには、ハードウェア、ネットワーク、OS、ミドルウェアなど幅広い知識が必要である。幅広い知識を身につけるためには基本が必要。設計とは何かを知る前に何を設計するのかを整理する。

●設計の対象
・システム設計
・ソフトウェア設計
・アプリケーション設計
・ネットワーク設計
・データベース設計
・アーキテクチャ設計
・移行設計
・運用設計


システムの構成要素

本書ではソフトウェア設計を詳細に記載する


◆ネットワーク設計及びインフラ設計
ネットワーク設計では、購入するネットワーク機器やハードウェア機器をどのように構成するかを検討する。(→機器を販売する会社に構築を含めて依頼する場合が多い)
ハードウェアの選択と同時にOSも選択することが多いので、ネットワーク、ハードウェア、OSをまとめてインフラ設計と呼ぶ。ハードウェアはメーカー出荷時に完成されているので設定は必要ですが設計することはない。


●最近ではインフラはクラウドが活用されている。
クラウドの主な例
・AWS(Amazon Web Service)
・Microsoft Azure
・Google Cloud Platform
ハードウェアはクラウドベンダーにあり、ネットワーク経由で接続する。
また、クラウドに対して従来のハードウェアを運用することをオンプレミスという。

●クラウドのメリット
・ハードウェアを購入する必要がないので、初期費用を抑えることができる。
・仮想サーバー増設や仮想ディスク容量を簡単に増やすことができる。
→スケールアップ、スケールアウトを簡単に行うことができる。(オンプレミスでは大変)
●クラウドのデメリット
・クラウドベンダーの都合で使用が変更される。
・サービス停止することがある。
・複数の利用者が同じ環境で利用する場合、他の利用者が負荷をかけるとサービス全体の性能が落ちる。

※オンプレミスの場合でもクラウドを利用する場合でもインフラ設計は必要であり、OS、サーバー、ネットワークなどの知識がないと設計できない。


◆データベース設計
・データベース製品の選定
・データベースファイル設計
・テーブル設計が含まれる。
これらの設計では要件を満たすためのパフォーマンスやサイジング(運用するシステムやサービスの規模に合ったリソースの見積もり、準備)
をする。

◆ミドルウェア
・Webサーバー(Apache HTTP Server、nginxなど)
・Webアプリケーションサーバー(Tomcat、Jettyなど)
・Apache Spark
・AWS Lambda
いずれのミドルウェアも多くのアプリケーションで必要になる基本的な機能を提供する。
・HTTPのようなネットワークプロトコル実装
・マルチスレッド管理
・データベース接続を含めたトランザクション機能
ハードウェアと同じくメーカー出荷時に完成されているので設計することはない。

◆アプリケーション設計
ゼロから開発することはできるが、ERP(統合的に管理するためのソフトウェアパッケージ)を使用すればERP内部にミドルウェア、データベースを持つのでそのまま使用できる。


●スタックとプロダクトの関係
設計の範囲とそれをカバーするプロダクトの一例を示します。


◆移行設計
・開発したシステムを本番環境に移行する設計
→開発が完了したシステムを既存システムに代わって本番環境で動作するように配置し、データなどを準備するための設計
・最新のデータを新しいDBにインポートする際に注意が必要。ミスがあるとデータが消えたり、間違ったデータが本番環境のDBに入ってしまうことになる。移行作業の手順を検討することが移行設計である。

◆運用設計
・移行が完了したシステムをどのように運用するのか、障害が発生した時にどのように対処するのかを設計する。
【主な項目】
・トランザクションとデータの整合性
・フェールオーバーのためのクラスタリング
・ログの出力方法 など

●システムの運用サイクル
正常運転→障害対応→フィードバック→正常運転……

各段階で実施する主な作業

要件定義や設計が終わらないと運用設計が行いにくいが、ソフトウェア設計に密接に関係している運用設計もあるので、ソフトウェア設計が完了するまでに運用設計の中でソフトウェア設計に関係の強いものを検討する。
【ソフトウェア設計に関係が強い運用設計】
・障害を監視するためのログ出力、ヘルスチェック方法の提供
・フェールオーバーのためのクラスタリングなどのシステム構成
・バックアップ及びリカバリーを行うためのミドルウェアやDB選定
・リカバリーを行うためのデータの完全性を保つ(トランザクション、バックアップファイルなど)
・障害を分析するためのログ出力、システムダンプの提供
・簡単な起動・停止方法の提供


以上、この記事の初めに記載した設計の対象について内容をまとめました。
次回は②開発プロジェクトの進め方を記載します。



いいなと思ったら応援しよう!