Linuc システムアーキテクト SA01
SA.01.1 アーキテクチャの設計原則と主要パターン
重要度 4
概要
- 複数ノード間の業務機能の分割、制御、連携集約の方式に着目してアーキテクチャパターンを比較できる。
- 主要なアーキテクチャパターンの特徴や制約、適するユースケースを網羅的に理解し、アーキテクチャ設計時の判断材料にできる。
詳細
- アーキテクチャの設計原則となる観点を理解し比較できる。
- システムの配置: 集約型、分散型
- システムの分割方法: layer 構造、tier 構造
- サブシステム間・コンポーネント間の機能制御・連携集約の方式
- 業務とデータの関係、ノード間のデータ共有/非共有の方式
- サブシステム呼び出しやデータ共有のタイミング: 同期、非同期
- サブシステム間・コンポーネント間の機能制御・連携集約に関する具体的なアーキテクチャパターンについて、その特徴、主従関係、適するユースケースなどを理解している。
- パイプライン (パイプ/フィルター)
- コーディネーション、オーケストレーション
- イベント駆動、コレオグラフィ
- メディエーター、ブローカーによる仲介: メッセージングキュー、Pub/Sub パターン
- サブシステム間のデータ連携や整合に関する具体的なアーキクチャパターンについて、その特徴や設計上の重要な観点、適するユースケースなどを理解している。
- 分散トランザクションとエラーハンドリングのパターン: TCC、Saga
- レプリケーション (非同期データ複製)
オーケストレーション:全体の処理の流れを制御する指揮者にあたるプログラムが存在し、識者からのリクエストによってサービスを実行し、実行結果をレスポンスとして指揮者に返して処理を継続させるプログラム方式。
コレオグラフィ:全体の処理の流れやサービスの呼び出しを制御する指揮者は存在せず、個々のサービスにあらかじめ与えられた動作条件や次にどのサービスを起動させるかといった振付に従って自律的に動作させるプログラム方式。
仮登録→本登録となるので時間がかかるが、キャンセル処理が容易。
Saga:分散トランザクションではロールバック(キャンセル)を意識しない。後続のサービスで不具合が発生した場合、前段のサービスのキャンセル処理(保証トランザクション)を呼び出す。
補償トランザクションの実現可能性を考慮する必要がある。(メール送信など、取り消しが容易でないものがある)
SA.01.2 柔軟性を高めるアーキテクチャパターン
重要度 5
概要
システムの複雑化を避け、要素ごとの独立した変更や拡張がしやすく柔軟性の高いシステムを実現するアーキテクチャパターンや通信プロトコル、設計技術を理解している。
詳細
- マイクロサービスアーキテクチャを用いた際のメリット・デメリットを理解し、具体的な設計シーンで導入可否判断ができる。
- サービス毎に独立した技術選択、スケーリング、デプロイ
- マイクロサービスで良く用いられるサービス間通信の基本構成を理解している。
- 同期通信: REST (OpenAPI)、GraphQL、gRPC/Protocol Buffer
- 非同期通信、キュー、ストリーム、トピック
- アプリケーション実装からシステム制御機能を分離する設計パターンを理解している。また、分離される主な機能とその効果を理解している。
- サービスプロキシ、サイドカーパターン
- コントロールプレーンとデータプレーンの分離
- サービスメッシュ
- API ゲートウェイ
- 分離される主な機能: トラフィック制御、通信障害の回復、認証、トレーシング
- イベント駆動とリソース動的確保を組み合わせたデザインパターンを理解している。
- FaaS (Serverless)
マイクロサービス:
メリット:機能の追加、変更がしやすく開発スピードが向上
デメリット:システム設計の難易度が上がる
機能間でデータの一貫性を維持しにくくなる
デバッグ、テストの実施が難しくなる
GraphQL:REST APIと違いエンドポイントが一つ。オーバーフェッチ、アンダーフェッチがない。(必要な情報が必要な分だけ得られる。REST APIでは過不足が起こり得うる)
単一のエンドポイントを利用するため、REST APIより高速。
クエリが複雑になりやすい。
gRPC:REST APIより高速な通信が可能(HTTP/2とProtocol Buffersを用いるため)
Protocol Buffer:構造化されたデータのシリアライズ方式の一種。gRPCを支える技術の一つ。
SA.02.1 拠点内のネットワーキング
重要度 3
概要
- 拠点内のネットワーク設計に必要な基本技術を理解している。
- 仮想マシンやコンテナを用いる際に使われるネットワーク技術を理解し、目的に応じて構成を選定できる。
詳細
- ネットワークを論理的に分割・接続するための技術の概要を理解している。
- VLAN
- トンネリング、カプセリング
- L2 over L3 オーバーレイネットワーク: VXLAN など
- 仮想マシンやコンテナのネットワークを構築する際の Linux ホストの動作を理解している。
- 仮想ブリッジの作成
- TAP/TUN デバイス、仮想 NIC、veth の作成
- NAT (NAPT) や DHCP 機能の提供
- 仮想マシンやコンテナで使われる主要なネットワーク設定の違いを理解している。
- libvirt デフォルト仮想ブリッジ (virbr0)
- Docker Bridge ドライバ (docker0)、Host ドライバ
- ホストをまたがるコンテナ間通信のための主要な実装について、動作原理の違いに基づいて比較できる。
- Docker overlay ネットワークドライバ
- flannel、Calico
VXLAN(Virtual eXtensible Local Area Network):L3ネットワーク上に論理的なL2ネットワークを構築するトンネリングプロトコルのこと
仮想ブリッジの作成:
nmcli connection add type bridge con-name bridge0 ifname bridge0
仮想ブリッジへのインタフェース追加
nmcli connection add type ethernet slave-type bridge con-name bridge0-port1 ifname enp7s0 master bridge0
nmcli connection add type ethernet slave-type bridge con-name bridge0-port2 ifname enp8s0 master bridge0
vethの作成:
レイヤー2の仮想ネットワークインタフェース。
作成すると2つのインタフェースがペアで作成され、この2つのインタフェース間で通信が可能。
つまりレイヤー2のトンネリング。
片方をホスト側、他方をコンテナ側に割り当てる。
ホスト側はホスト上に作成したブリッジに接続すると、ホスト外と通信可能。
ip link add name veth0-host type veth peer name veth0-ct # vethペアの作成
SA.02.2 拠点間のネットワーキング
重要度 3
概要
複数拠点を統合するシステムを設計・運用する際に特に課題となる要素を理解している。
詳細
- ネットワークの接続や暗号化に関する基本的な手法を理解している。
- PPPoE、IPoE
- VPN、IPsec、L2TP
- クラウド資源をオンプレミスの延長として使えるように接続環境を構築する。
- VPN ゲートウェイを用いたインターネット VPN による拠点間接続
- クラウドのプライベート接続サービスを用いた専用線による拠点間接続
- 通信帯域、ポート制限、名前解決などに関する問題解決
- 地理的に広範なシステムの効率化に関わる技術の目的を理解している。
- SD-WAN
- エッジコンピューティング
SA.02.3 ストレージとアクセスプロトコル
重要度 2
概要
用途に合わせてストレージの提供形態やアクセスプロトコルを選択できる。また、導入する際の主要な設定の方法や注意点を理解している。
詳細
- 各々のストレージ提供形態の特徴・制約条件を理解し、用途に応じて使い分ける。
- ブロックストレージ
- ファイルストレージ
- オブジェクトストレージ
- 主要なデータ共有プロトコルについて、ネットワークやセキュリティに関する機能・制約条件に基づいて比較・選定する。
- SMB: 暗号化機能など
- NFS
- WebDAV
- HTTPS + REST API のファイル転送: presigned URLなど
SA.02.4 集中型および分散型ストレージ
重要度 4
概要
- ファイルシステムの種類や論理ボリュームの仕組みを理解している。
- 同時アクセス要件やその他非機能要件に基づいて、Linux・OSS ベースの集中型ストレージや分散ストレージ環境を選定できる。
詳細
- EXT4、XFS、Btrfs について、データ構造、性能、耐障害性、操作性などの点で比較できる。
- B-Tree、ジャーナリング
- 重複排除、Copy on Write、スナップショット
- 論理ボリュームの割り当てについて、その仕組みや動作速度・障害復旧手順などに基づき比較できる。
- 事前割り当て (シックプロビジョニング)、動的割り当て (シンプロビジョニング)
- SAN によるブロックストレージを設計する。
- 接続方式の選択: Fibre Channel、iSCSI (ターゲット、イニシエーター)
- ボリュームレベルの排他制御: LUN マスキング、ゾーニング
- cLVM によって多ノードから利用できる仮想化ストレージを設計する。
- 物理ボリューム、ボリュームグループ、論理ボリュームの管理
- ボリュームレベルの排他制御
- スナップショットの領域確保、作成、管理
- 分散ストレージ・分散データベースの理論的な動作原理を理解している。
- 整合性 (強い整合性、結果整合性)、可用性、分断耐性、これらのトレードオフ
- 読み書きアルゴリズム: Read One Write All、Primary Copy ROWA、Read Repair
- Ceph の分散ストレージとしての特徴と基本的な構成方法を理解している。
- RADOS Gateway、RADOS Block Device、Ceph FS
- モニタ/メタデータ/OSD 各サーバーの役割と所在
SA.03.1 フェイルオーバークラスタ
重要度 3
概要
フェイルオーバークラスタによって単一障害点を解消する設計について、解決すべき課題や設計上の注意点、主要な実装を理解している。
詳細
- フェイルオーバークラスタの目的と基本構成、及び動作原理を理解している。
- アクティブ・スタンバイ、リソース制御、ハートビート
- スプリットブレインについて理解している。またこれを解消する方法を理解している。
- インターコネクト分断
- フェンシング
- Quorum に基づくリーダー選出
- 主要な冗長構成、及びフェイルオーバーを実現する具体的な実装の概要や設計上の注意点を理解している。
- VIP と VRRP による冗長構成: keepalived
- Pacemaker/Corosync によるプロセス監視、リソース制御: リソースエージェント、STONITH、IPMI
- 分散ストレージにおけるフェイルオーバーと復旧
- 個々のプロトコル・サービスに合わせた冗長設計: DHCP など
SA.03.2 負荷分散と障害の局所化
重要度 4
概要
- ロードバランサやメッセージングキューを用いた負荷の分散について、動作方式や制約に基づいて比較できる。
- 偶発的な障害や部分的な障害をシステム全体に伝播させないための手法を理解している。
詳細
- ロードバランサの主要な種類と、それぞれの基本的な設定を理解している。
- L4 ロードバランサ、及びそのパケット転送方式: NAT、Direct Server Return (Direct Routing)、Tunneling、Local Node
- L7 ロードバランサ、及びその振り分け規準: URI、リクエストパラメータ、HTTPヘッダ
- 接続スケジューリング: ラウンドロビン、最小接続、最小通信量
- バックエンドのヘルスチェック
- 具体的な OSS を用いて負荷分散クラスタの割り当て、スケジューリング、ヘルスチェックを行う。
- IPVS (LVS)
- HAProxy
- DNS ベースの負荷分散 (広域負荷分散) を用いて拠点間の冗長化を設計する。
- ルーティングポリシー: 重み付きラウンドロビン、最小接続、ジオロケーション、近接アルゴリズム
- 監視ツールと組み合わせによるルーティングの動的設定
- メッセージングキューを介した非同期処理によって負荷分散や偶発的なエラーへの対策を行う。
- 伝達方法: pull 方式、push 方式
- QoS: At-least-once、Exactly-once、At-most-once
- エラー検知とリトライ: ack、指数バックオフとジッターを用いたリトライ、デッドレターキュー
- 部分的な障害をシステム全体に伝播させないための設計パターンを理解し比較できる。
- タイムアウト、スロットリング、サーキットブレーカー
SA.03.3 データレプリケーションと災害対策
重要度 3
概要
- データレプリケーションによる冗長性確保の仕組みを理解している。
- 障害や災害時に迅速にサービスを復旧するために、復旧目標に応じて遠隔地へのデータコピーやサブサイトの構成・切替方法を選択できる。
詳細
- ブロックレベルレプリケーションについて理解し、DRBD を用いてデータを冗長化する。
- 同期/メモリ同期/非同期レプリケーション
- マルチノードレプリケーション
- フェイルオーバーの設計
- 主要なミドルウェアのレプリケーション機能を知っている。
- PostgreSQL: ストリーミングレプリケーション、ロジカルレプリケーション
- バックアップを効率的に取得・管理するための設計を行う。
- スナップショットを用いた静止点の確保
- 遠隔地サブサイトの構成と切替方法について、RPO、RTO や実装上の制約、コストを含むトレードオフに基づいて比較できる。
- データの扱い: バックアップ & リストア、レプリケーション
- 待機方法: 停止、縮退運転での待機、完全待機
- 切替方法: 手動切り替え、クラスタリングによるフェイルオーバー
SA.04.1 性能見積もりと評価
重要度 2
概要
- 機能特性や想定アクセスを加味して適切な性能見積もりとリソース選定ができる。
- プロトタイプなどを用いて初期設計の性能を評価・測定でき、性能未達時のボトルネックを調査できる。
詳細
- 性能に関わる要件を整理する。
- 業務特性: ユーザー数、負荷ピーク傾向、サービス提供時間、総データ量、データの増分傾向など
- 性能要件: アクセス数/秒、同時接続数、許容レスポンスタイム、I/O 速度 (IOPS、スループット、レイテンシ) など
- 制約条件: 排他制御の必要性、ロックの粒度など
- アプリケーションの特性: マルチコア活用、キャッシュ特性など
- 性能の見積もりとサイジングを行う。
- 業務機能ごとのリソース使用率の分析
- 性能要件 (許容レスポンスタイムなど) のコンポーネントへの割り振り検討
- リソースの (仮) 選定: CPU、メモリ、ディスク、ネットワーク
- 評価方法について理解している。
- 実機テスト (PoC)
- ベンチマークとの比較
- プロトタイプのシステムが意図通りの性能を発揮するかを測定・分析する。
- 各種リソースやカーネルの状態を調べるユーティリティ・コマンドの出力の解釈
- 各コンポーネントの性能指標とシステム全体の性能指標の関係分析
- 性能未達時のボトルネックとその原因を絞り込む。
- デフォルトの設定値、利用目的別推奨値、最適値
- タスクを実行するツールのバージョン選択
- 上限: セッション数、ファイル・ディスクリプタ、ソケット・ポート関連
SA.04.2 性能の改善
重要度 3
概要 業務特性に合わせて、処理や通信の方式を選定したり機能優先度やパラメータを調整したりすることで、性能のボトルネックを改善できる。
詳細
- 性能設計の視点で各種アルゴリズム・プロトコルの特徴や制約を比較できる。
- HTTP/3、QUIC
- 機能ごとの優先度調整を行う。
- 新規プロセスと既存プロセスのプロセス優先度の変更
- チューニングされたプロファイルを選択して設定
- cgroup によるシステムリソースの使用量の調整
- ノード内の CPU、メモリ、ディスク、ネットワーク性能の改善を行う。
- カーネル: shmmax の調整
- メモリ: 代替ページサイズ調整
- ディスク・ファイルシステム: I/O スケジューリングアルゴリズム選択、フィーチャ・オプションの選択、ブロックサイズ調整
- ネットワーク: バッファサイズの計算・設定
- ノード間のチューニングを行う。
- ネットワークホップ数の改善
- ボンディング (リンクアグリゲーション)
- リソース枯渇にたどり着きにくくするための設定を行う。
- ファイル・ディスクリプタ数の適正化
- ネットワークのソケット、ポート、キュー数の適正化
- セッション数の適正化: Connection pooling
SA.04.3 性能の拡張
重要度 4
概要
- アプリケーション層やデータベース層についての主要なスループット改善手法とその適用条件を理解している。
- ノードの追加や機能の分割により性能要求に合わせてシステムをバランスよく拡張する設計を導入できる。
詳細
- リードアクセスの外部化により負荷軽減とレスポンスタイム向上を図る。
- CDN
- キャッシュ、インメモリデータベース: redis、memcached
- ステートレスな設計を導入しアプリケーションサーバーを分散する。
- データの外部化
- セッション情報の外部化
- ログの外部化
- ロードバランサやメッセージングキューを用いてスケールアウト構成を設計する。
- 要件に合わせてデータベースを複数ノードに分散しスループットを改善する。
- 垂直シャーディング
- 水平シャーディング
- リードレプリカの導入
- 分散処理中のロックに関するボトルネックを回避する。
- 共有資源の制限
- ロックの分散や期間短縮