IT 基礎
テクノロジー
コンピュータ基礎
NUMA
レスポンスタイム
スループット
サイジング
- 必要なコンピュータリソースの見積もり
- プロセッサのサイジングに利用するデファクトスタンダード
-
- スワップが発生しないようにする必要がある
ストレージ基礎
- ハードディスク装置の基本的な仕組み
- 複数のプラッタ(磁気ディスク) が含まれており、各プラッタ上にデータが記録される
- 1 枚のプラッタは複数のトラックに分割
- トラックはデータが連続して記録される領域で、同心円状またはらせん状に配置
- トラックはさらに複数のセクタに分割
- セクタはデータアクセスの最小単位
- 複数のプラッタにおいて同じ位置にあるトラックの集合をシリンダという
- ハードディスク装置では基本的にセクタ、トラック、シリンダによって位置を特定してデータの読み書きを行いますが、ハードディスク装置を搭載したストレージはこのような物理的構造を隠蔽し、よりわかりやすい
ブロック
やファイル
といった論理単位でアクセスを行う- ブロックアクセス
- ファイルアクセス
ストレージ機器のアクセス方式
ブロックアクセス型ストレージ
- サーバからストレージへアクセスする際に特定のブロック単位でデータをやり取りする方式
- ブロックアクセス型のストレージではディスクを論理ボリュームに分割し、論理ボリュームをさらにブロックに分割
- 論理ボリュームの番号とブロックの番号により、データを特定し、読み書きを行う
- ブロック単位でアクセスするため、データの属性情報を保持したりデータを共有したりすることは原則できない
- ブロックアクセス型のストレージにアクセスするサーバ OS のファイルシステムを介すことで、クライアントからファイル単位でのアクセスが可能になる
- データベースシステム、業務システム、バックアップ / アーカイブなどの構造化データの管理に適している
- ファイルシステムのおかげでブロック単位の利便性をアップ
- Windows
- NTFS
- Linux
- ext4
- xfs
- SAN
- サーバからストレージへアクセスする際に特定のブロック単位でデータをやり取りする方式
ファイルアクセス型ストレージ
可変長のファイル単位でデータを読み書きする手法
ファイルアクセス型のストレージでもディスクを論理ボリュームとブロックに分割しますが、ボリュームとブロックではなく、ストレージに搭載されたファイルシステムにより、ルートからのディレクトリとファイル名を含むパス名でデータをファイルとして特定し、読み書きを行う
ファイルとブロックは 1 対 1 で対応するわけではなく、通常 1 つのファイルは、1 つまたは複数のブロックにまたがっている
ファイルにアクセスする際に、ボリュームとブロックとファイルとのマッピング処理が行われる分、データの転送速度がやや落ちる
- ファイルの属性情報(種類、サイズ、更新日など)の保持やファイルの共有が可能
- テキストファイル、画像や動画といったマルチメディアデータなどの非構造化データの管理に適している
NAS と呼ばれる製品
NFS や CIFS(Common Internet File System) と言ったネットワークファイルシステム用の通信プロトコルが、ネットワーク越しにファイルシステムへのアクセスを可能にしている
ファイルを直接操作できる
Unified Storage
- 複数のアクセスをサポートしてくれるストレージ
ストレージの接続機器
ローカル接続の規格
- SAS(Serial Attached SCSI)
- サーバ用ストレージ規格の代表
- SATA
- パソコン用ストレージデバイスとして提供されているものと同じ規格
- InfiniBand
- IBTA(InfiniBand Trade Assosiation) において策定された高速インターコネクトの規格
- RDMA(Remote Direct Memory Access) 機構を利用し、メモリー空間で直接アクセスすることが可能
- 高帯域、低レイテンシー、高信頼性を持つハイパフォーマンスな規格
- HPC(High Performance Computing) や基幹系の領域で数多く使われる
- SAS(Serial Attached SCSI)
ネットワーク接続の規格
- FC(Fiber Channel)
- ファイバーチャネルと呼ばれる専用の光ファイバーを用いた高速転送を実現できるインタフェース
- FC ネットワークの中では SCSI コマンドを利用してアクセスを行っている
- SCSI 規格に比較して長距離の伝送距離を実現していて、複数のサーバから共有ストレージとして利用する SAN の環境では多く使われる
- サーバ側では FC 用の専用ポート(HBA) を、中間経路では FC 用の専用スイッチを用意する必要があり、一般的には高価格になる
- iSCSI
- SCSI コマンドを利用したアクセス経路をネットワーク越しに利用するために策定された規格
- 専用ケーブルが必要なく、一般的な IP ネットワークを利用するため、既存のネットワークを流用・活用することが可能
- ソフトウェアイニシエータ
- サーバ側には IP ネットワークへアクセスできるインタフェースが必要ですが、専用のストレージアダプターに加えて、通常のネットワークカードを iSCSI ソフトウェアを利用してストレージアダプターとして使うこともできる
- FCoE
- iSCSI と同じく、IP ネットワークを介して SCSI コマンドでストレージへアクセスする規格
- iSCSI は IP ネットワーク上で SCSI コマンドをラッピングして通信を行うが、FCoE では IP ネットワークを使わず、DCB(Data Center Bridging) と呼ばれる専用のイーサネット拡張機能を利用してアクセスする
- 通信経路はイーサネットを利用するが、IP ルーティングとは関係のない FC ネットワークとして、ターゲットに直接アクセスする
- サーバ側には CNA(Converged Network Adapter) と呼ばれるアダプターを利用
- FC(Fiber Channel)
ストレージのコンポーネント
- サーバからストレージのディスクへアクセスするまでの経路上に存在する要素
- サーバ OS
- アプリケーションの I/O 要求を管理し、指定されたストレージの I/O 処理をストレージアダプター(HBA) ドライバ経由でネットワーク上へ送信
- ストレージアダプターのドライバ
- ストレージアダプターをコントロールするためのドライバソフトウェア
- OS とストレージの仲介役
- ストレージアダプターポート
- ネットワークへの物理的インタフェース
- 例
- FC 用ストレージアダプター(HBA) では、ファイバーチャネル用のコネクターポートを持っている
- ストレージスイッチ
- FC スイッチや、IP レイヤースイッチ
- ストレージコントローラーポート
- ストレージ側のコントローラの持つ物理ポート
- ストレージコントローラ
- CPU やキャッシュ用メモリーなどを持ち、論理ボリュームの管理や RAID の管理、I/O の負荷分散などを担う
- 一般的には冗長化されている
- 論理ボリューム
- RAID やストレージプールなど、ストレージコントローラの機能により、物理ディスクリソースを抽象化した領域
- サーバからのアクセスはこのボリューム単位
- 論理ボリュームに対する I/O 処理は、ストレージコントローラが実際の物理ディスクへのアクセスと読み替えて処理を実行する
- 物理ディスク
- HDD, SSD
- ディスクエンクロージャー
- 物理ディスクを格納する機器の部分
- ストレージコントローラとは内部のポートで接続されている
論理ボリューム
- 物理なドライブは記憶容量や性能、データの保護性能などの特性が、各ドライブの固有の性能に完全に紐付いているため、ストレージは物理デバイスを直接利用させるのではなく、デバイスを論理的なボリュームとして抽象化することによって柔軟なデータ格納を実現
- 抽象化テクノロジー
- RAID
- ストレージプール、LUN
- RAID で抽象化されたディスクをそのまま使うと、多数の HDD を一元管理するストレージ機器においては、作成されるボリュームが大きくなりすぎる
- => 一般的に RAID などで抽象化された大きなディスクをストレージプールとして扱い、そこから任意のサイズの論理ボリューム(LUN) を切り出してサーバ側に提供
- 論理ボリュームマネージャー
- OS レベルで実装されるブロックデバイスの抽象化テクノロジー
- RAID やブロックストレージから任意のサイズの論理ボリュームを作り出す
- LVM
- 仮想ディスク
- 論理ボリュームをファイルとして扱うことで、ポータビリティなど管理性の向上が図られている
- VMWare の VMDK フォーマット
- Microsoft の VHD フォーマット
- SDS(Software-Defined Storage)
- サーバベースストレージソフトウェア
- 汎用サーバに直結されたローカルストレージをネットワーク越しにソフトウェアでプール化し、共有ストレージとして利用可能にする
- Auto Tier Storage
- 複数のストレージを統合管理し、用途に合わせてストレージの利用を自律運用させる製品
- 複数の異なる性能のストレージを自動階層化し、利用状況に応じて再配置などを目的としている
- IBM の Spectrum Storage
- EMC の EMC ViPR 2.0
- サーバベースストレージソフトウェア
アクセスコントロール
- ゾーニング
- サーバとストレージ間のアクセス範囲をゾーンとして分割し、互いに参照できる範囲を絞ることが可能
- FC スイッチ上で構成
- ハードウェアゾーニング
- 接続するポートとポートの組み合わせをゾーンで指定
- ハードウェアゾーニングを用いる場合、物理ポート単位でゾーンを指定することで WWN を意識することなくアクセスをコントロールすることが可能
- ソフトウェアゾーニング
- サーバやストレージのインタフェースとなるデバイス単位でゾーンを指定
- LUN ごとのアクセスコントロールや仮想環境内での仮想的なデバイスもコントロール可能
- WWN(World Wide Name)
- 一意の ID
- ハードウェアゾーニングを用いる場合、物理ポート単位でゾーンを指定することで WWN を意識することなくアクセスをコントロールすることが可能
マスキング
- サーバやストレージのデバイス側でアクセス可能な WWN を指定する方法
iSCSI における ACL
- ACL レコードを管理
- IP アドレス
- iqn(iSCSI Qualified Name)
- CHAP 認証ユーザ名
- ACL レコードを管理
オブジェクトストレージ
- ファイル型、ブロック型ストレージ以降に登場
- 階層型のファイルシステムを持たず、すべてのデータをメタデータとともにフラットに管理
- メタデータのみで管理することで、データの位置情報とデータの特性・固有情報の依存関係を切り離し、データの移動やコピーなどが格納場所の管理がしやすくなる
- 特徴
- オブジェクトに多くのメタ情報を紐付けられる
- オブジェクトサイズ
- アクセス許可
- ユーザ
- etc...
- ファイルシステムを持たず、REST API を通じてオブジェクトに直接アクセスする
- アクセスする OS やデバイスを選ばない
- オブジェクトに多くのメタ情報を紐付けられる
- 業界標準
- Amazon S3 に準拠した S3 互換 API
ハイパーコンバージドインフラストラクチャー(Hyper-Converged Infrastructure : HCI)
- 各サーバで保持したローカルストレージを、SDS のテクノロジーを利用してプール化し、ネットワークを介して利用できるようになっている
- 本来のストレージ I/O 性能を担保していたストレージコントローラの機能は各ホストの I/O 機能が分散して行う形になる
- 単一の共有ストレージに比べてボトルネックが集中しにくく、サーバリソースの拡張に合わせたストレージ性能のスケールが簡単という特徴がある
- 製品
- Nutanix
- HCI Powered by VMware vSAN
データベース基礎
ネットワーク基礎
通信量をさばくネットワーク構造
- オーバーサブスクリプション
通信を安定して伝送処理する仕組み
DiffServ モデル
- 特定のパケットを優先制御できる
- 「分類」「マーキング」「キューイング」「スケジューリング」
FC(Fibre Channel)
- 通信対象感で到達性が保証されたプロトコル
- 伝送途中で喪失する心配は不要
iSCSI 通信に対しては絶対的に帯域を確保する以外、良い対策はない
ルール(規約) と作法(処理方式)
非機能要件を満たす機能と技術
可用性
- 冗長化プロトコル
- L2 のネットワークセグメントを複数経路も受ける手段として STP(Spanning Tree Protocol) やベンダーによる拡張発展型である PVST+(Per Vlan Spanning Tree Plus) がある
- L3 では IP アドレスを仮想化して冗長系で持ち回るゲートウェイ仮想化
L4 では FW の NAT やロードバランサーのバーチャルサービスなどを使う
- Flex Link
- 音声や映像の伝送路の仕様にあわせ、物理ポートで 0.5 秒の経路切替が可能
- Flex Link
拡張性
- 回線や機器を増強
運用性
仮想化に対応する技術と活用法
VLAN(Virtual LAN)
- L2 セグメントの分割・分離
VRF(Virtual Routing and Forwarding)
- L3 の IP 通信では IP ルーティング空間を分割・分離する仕組み
SDN(Software Defined Networking)
- OpenFlow という標準プロトコルを使ってネットワークの構成を変更するなどが可能
- VLAN のようにネットワークを論理的に分割することもできる
マイクロセグメンテーション
- 昨今の VLAN に代表されるセグメントにとらわれない単位でアクセス管理・整理するという考え方
エッジオーバーレイ
機器
- Cisco の ACI(Application Centric Infrastructure)
- Juniper Network の Contrail
- VMware の NSX
NFV(Network Function Virtualization)
- 通信キャリアの仮想化技術サービス
- 個別のネットワーク機器の機能をソフトウェアで実現し、仮想化基盤上に仮想アプライアンスとして構築する技術
ネットワークにおけるセキュリティ
- スイッチ認証(認証 VLAN, IEEE 802.1X)
プログラミング基礎
オブジェクト指向
- カプセル化
- 継承
- ポリモーフィズム
関数型プログラミング
OS 基礎
OS の役割
- POSIX
- Unix や Linux の API
- Single Unix Specification
- Win32
OS の構成要素
OS の構成要素
- シェル
- 基本ツール
- 標準ライブラリ
- カーネル
- デバイスドライバ
カーネル
- メモリーに常駐し、ハードウェアの操作および OS 専用のデータをアクセス可能な CPU の特権状態で実行する
- => カーネルをアップデートするには、システムの再起動が必要
- モノリシックカーネル
- 多様な機能を含む
- マイクロカーネル
- CPU の特権状態を要する必要最小限の機能だけからなる
- メモリーに常駐し、ハードウェアの操作および OS 専用のデータをアクセス可能な CPU の特権状態で実行する
デバイスドライバ
- ハードウェアを直接操作する部分
- サードパーティが提供することが多いため、カーネルとは別の要素として扱う OS が多い
- 標準ライブラリ
- API の実装
- プログラムは標準ライブラリを呼び出すことによって API を実行する
- メモリー、ファイルなどの OS が管理するリソースを使用する場合、カーネルを呼び出す
- Linux の glibc や Windows の kernel64(32).dll のようにすべてのプログラムで使用されるライブラリはメモリーに常駐しており、更新にはシステムの再起動が必要
スケジューリングと CPU 使用率
- プロセス
- カーネルがプログラムをストレージから読み込んでメモリー上に配置し、実行可能な状態になったもの
- スレッド
- プロセスの中で実行する命令の流れ
メモリー管理とメモリー使用率
- 回収可能なメモリーかどうかのチェックも必要
- スワップを発生させないことが重要
ファイルシステムとストレージ I/O
プロトコルとネットワーク I/O
- ネットワーク API の事実上の標準
- socket
仮想化とコンテナ
仮想マシン (VM) 方式の仮想化
- ハードウェアを模擬した環境を OS に提供するので、複数の異なる OS を同時に動作させることが可能
- 他の OS の動作には影響がない
- オーバーヘッド
- 仮想化ソフトウェアが介在するのでストレージ I/O とネットワーク I/O 顕著
- 逆に CPU 命令を実行し続け I/O をほとんど行わない処理は、オーバーヘッドの影響を受けづらい
- 準仮想化
- 上記のオーバーヘッドを減らす工夫
- 特別なデバイスドライバをゲスト OS に入れ、仮想マシンがハードウェアを模擬することなく、直接 I/O 対象のデータを送受することで、仮想下のオーバーヘッドを削減
コンテナ
- 一つの OS の中を分割して、OS を専有しているように見せる
- カーネルは共通なので、コンテナー間で共通なリソースを共有することにより、VM に比べて省リソースである
エンジニアリング
システム設計基礎
モデリング基礎
IT アーキテクチャ基礎
テスト/QA 基礎
要件定義基礎
セキュリティ基礎
データサイエンス基礎
マネジメント
プロジェクトマネジメント
システム企画
ヒューマンスキル
文章力
コミュニケーション
ヒアリング
ドキュメント作成
ロジカルシンキング
- インフラエンジニア
- サービスを提供するためにサーバやネットワーク、ミドルウェアの準備を行う
- 広く浅く広がり続ける IT システムを可能な限りキャッチアップし、必要に応じて掘り下げる
- データセンターの契約形態
- ハウジング
- ラックと電源と WAN 回線だけ借り、サーバを自前で調達して設置するところからすべてを運用
- ホスティング
- すでに用意されたネットワークやサーバ機器を借りて運用
- レンタルサーバ
- ハウジング
- 技術要件として確認しておきたいこと
- 予算
- OSS or 有償製品
- 冗長性
- 単一障害点(SPOF:Single Point Of Failure) の排除
- そもそも障害が発生しづらいシステムの選択
- 「障害」 と判断する項目の洗い出し
- 障害発生を自動検知するまでの時間の短縮
- 障害がおきてもサービスに影響しないためのアーキテクチャ設計
- 障害からの復旧のしやすや、復旧時間の短縮
- 障害を自動復旧する仕組みづくり
- 分散性
- スケールアウト
- スケールアップ
- 堅牢性(セキュリティ)
- すべてを閉鎖し、最小限を開放する
- 運用性
インフラアーキテクチャ
垂直分割型
- クライアント・サーバアーキテクチャ
- 3 階層型アーキテクチャ
- プレゼンテーション層
- ユーザからの入力を受け付ける
- アプリケーション層
- ユーザからのリクエストに応じて、業務処理を行う
- データ層
- アプリケーション層からのリクエストに応じて、データの入出力を行う
- プレゼンテーション層
水平分割型
- スケールアウト
- シャーディング
- パーティショニング
地理分割型
- アクティブ / スタンバイ型
- 災害対策
- クラウド型
システム障害
- フェールセーフ
- システムに障害が発生したときでも、常に安全側にシステムを制御する
- 例
- 制御プログラムの障害時に,システムの暴走を避け,安全に停止できるようにする
- フェールソフト
- 異常が発生しても機能を縮退させて運用を継続
- 例
- ハードウェアの障害時に,パフォーマンスは低下するが,構成を縮小して運転を続けられるようにする
- フォールトアボイダンス
- システム構成要素の信頼性を高めることでシステムが故障する確率を下げる
- フールプルーフ
- 不特定多数の人が操作しても、誤動作が起こりにくい設計にする
- メニュー画面上の使用権限のない機能は,実行できないようにするなど
- 例
- 利用者の誤操作や誤入力を未然に防ぐことによって,システムの誤動作を防止できるようにする
- フォールトトレラント
- 例
- UPSを設置することによって,停電時に手順どおりにシステムを停止できるようにする
- 例
- フォールトマスキング
- 障害発生時に外部に対して行うサービスに異常を一切生じないようにマスクする考え方
リソース監視ツール
Other
mBaaS (mobile Backend as a Service)
- スマートフォンアプリでよく利用される汎用的な機能をクラウドから提供するサービス
- クラウド上に用意された機能を API で呼び出すだけで利用できるので、サーバー開発・運用不要でよりリッチなバックエンド機能をアプリに実装することができ、工数削減によるコストカット・スピードアップに貢献
- Firebase
共有ライブラリ
- 複数のプログラムが共通して利用する汎用性の高いプログラムの部品の集まりのこと
- UNIX 系の OS
.so.(バージョン番号)
という拡張子のファイル
- Windows
.DLL
という拡張子のファイル
- プログラム
- コンピュータが実行すべき命令の一つひとつが書かれた手順書
- 入力装置から入力 => 補助記憶装置に格納 => 実行時には補助記憶装置からプログラムを主記憶装置に転送し、それを CPU が解釈
- パスワードマネージャー
コーデック
- デジタルデータの圧縮の方式や、圧縮処理を行う装置
RTP(Real-time Transport Protocol)
改行コード
CR(Carriage Return)
- 行頭の戻る、折り返す
LF(Line Feed)
- 1 行送る
OS | 改行コード | 改行コード(16 進数) | C 言語 |
---|---|---|---|
UNIX(Linux) | LF | 0A | \n |
DOS/Windows | CR+LF | 0D 0A | \r\n |
TCP/IP アプリケーション | CR+LF | 0D 0A | \r\n |
macOS | CR | 0D | \r |
- 周波数
- 1 秒間に繰り返す波の数のこと
- 単位 : ヘルツ(Hz)
- 例 : 60 Hz
- 波(山と谷で 1 組) が 1 秒間に 60 回繰り返すこと
DevOps
- ビジネスニーズを捉え、開発から運用までのスピードを限りなく早めるために考え出された概念
- ツールの話と文化の話がある
- ローリングアップデート
- 複数のコンポーネントからなるシステムにおいて、部分的にコンポーネントをアップデートしていくことで、システムを停止させずにシステム全体のアップデートを図る手法
- コンウェイの法則
- 「システムを設計する組織は、その構造をそっくりまねた構造のシステムを生み出してしまう」