説明、実践的な例、包括的なリソースでシステム設計面接に合格するために必須の用語をマスターしよう
システム設計の用語トップ50のワードクラウド
システム設計面接での成績は、候補者がスケーラブルで効率的なシステムを考案できるかどうかを検証する重要な要素です。主要な用語の知識は、これらに合格するのに間違いなく役立ちます。以下は、知っておくべきシステム設計面接の用語トップ50です。定義と実例を説明し、さらに学習のための追加リソースも紹介します。
1. スケーラビリティ
- 定義: リソースを追加することで、増加した負荷をサポートするシステムの能力。
- 例: Webトラフィックの増加に対応するためのサーバーの追加。
- 詳細: スケーラビリティとは何か、そしてそれをどのように達成するか?
2. ロードバランサー
- 定義: 1台のサーバーが大量の負荷を処理しないように、複数のサーバー間で受信ネットワークトラフィックを分散すること。
- 例: AWS Elastic Load Balancer(ELB)サービスを使用して、複数のEC2インスタンス間でWebトラフィックを分散させる。
- 詳細: ロードバランサーを理解する
3. マイクロサービス
- 定義: アプリケーションを疎結合のサービスの集合として構造化することを強制するアーキテクチャパターン。
- 例: モノリシックアプリケーションをユーザー管理、決済処理、通知送信を担当する独立したサービスに分解する。
- 詳細: マイクロサービスとは?
4. CAPの定理
- 定義: 分散システムでは、一貫性、可用性、分断耐性の3つの保証のうち、最大でも2つしか得られないと述べています。
- 例: 分散データベース設計において、一貫性と可用性をトレードオフする場合とその逆の場合。
- 詳細: CAPの定理を理解する
5. シャーディング
- 定義: より良い管理のために、大規模なデータベースをシャードと呼ばれる小さな部分に分割すること。
- 例: 地理的地域に基づいてユーザーデータベースをシャーディングする。
- 詳細: データベースシャーディングの説明
6. レイテンシ
- 定義: データがポイントAからポイントBに移動するのにかかる時間として定義されます。
- 例: チャットアプリケーションでのメッセージ配信の遅延を測定する。
- 詳細: レイテンシの説明!
7. スループット
- 定義: システムが一定時間内に処理するデータ量の測定
- 例: Webサーバーが1秒間に処理するリクエスト数。
- 詳細: コンピューターネットワークにおけるスループット
8. キャッシュ
- 定義: 同じデータの将来のリクエストを回避するためにデータを保存し、迅速に提供するハードウェアまたはソフトウェアのコンポーネント。
- 例: 繰り返されるデータベースクエリにRedisキャッシュを実装する。
- 詳細: キャッシュの説明
9. コンテンツデリバリーネットワーク (CDN)
- 定義: ユーザーがアクセスしている地理的位置に基づいてWebコンテンツを表示する、地理的に分散したサーバーシステム。
- 例: Webページの高速ロードにCloudflare CDNを使用する。
- 詳細: CDNとは?
10. REST API
- 定義: HTTPリクエストを使用してデータにアクセスし操作するWebサービスを構築するために設計されたアーキテクチャスタイルの一種。
- 例: REST(Representational State Transfer)原則によるソーシャルメディアAPIの設計。
- 詳細: REST APIチュートリアル
11. GraphQL
- 定義: データをクエリするために設計された言語で、RESTよりもはるかに強力で効率的、柔軟です。
- 例: GraphQLを使用して単一のリクエストでユーザー情報をクエリする。
- 詳細: GraphQL入門
12. ACID
- 定義: データベーストランザクションの信頼性の高い処理を保証する一連の特性。特性は原子性、一貫性、分離性、耐久性です。
- 例: 銀行取引にACID特性を確保することで、データの破損を防ぐ。
- 詳細: データベースにおけるACID特性
13. BASE
- 定義: 厳密な一貫性よりも可用性と分断耐性を重視するACIDの代替案。基本的に利用可能、ソフトステート、最終的に一貫性のあるシステム。
- 例: 高可用性で最終的に一貫性のあるNoSQLデータベースの設計。
- 詳細: BASEとACIDの比較
14. NoSQL
- 定義: リレーショナルデータベースで使用される表形式の関係以外の方法でモデル化されたデータの保存と取得を促進するように設計されたデータベースの種類。
- 例: ドキュメントベースのデータストアにMongoDBを使用する。
- 詳細: NoSQLデータベースとは?
15. SQL
- 定義: リレーショナルデータベースでデータを保存、操作、取得するために使用される標準言語です。
- 例: リレーショナルデータベースからデータを取得するためのSQLクエリの作成。
- 詳細: SQLチュートリアル
16. データベースインデックス
- 定義: データベースからのデータの高速な検索とアクセスを可能にするデータ構造技術です。
- 例: 検索速度向上のためにユーザーIDの列にインデックスを作成する。
- 詳細: データベースインデックス
17. レプリケーション
- 定義: 分散データベースシステムを構成する複数のデータベースにデータベースオブジェクトをコピーし維持するプロセス。
- 例: レプリケーションを使用して、異なる地理的位置で高可用性のデータベースを実現する。
- 詳細: データベースレプリケーション
18. フェイルオーバー
- 定義: プライマリシステムコンポーネントが失われた場合に、他のシステムコンポーネントがシステムコンポーネントの機能を引き継ぐバックアップ運用モード。
- 例: インターネットアプリケーションのサーバー障害時に、スタンバイサーバーへの自動フェイルオーバーを組み込む。
- 詳細: フェイルオーバーvs災害復旧
19. APIゲートウェイ
- 定義: APIの前面に位置し、APIリクエストを受信し、スロットリングとセキュリティポリシーを適用し、バックエンドサービスに転送するサーバー。
- 例: APIを管理するためにAWS API Gatewayを使用する。
- 詳細: APIゲートウェイとは?
20. サービスメッシュ
- 定義: マイクロサービス間のサービス間通信を容易にするための専用インフラストラクチャレイヤー。
- 例: マイクロサービス間の相互作用を管理するためにIstioをサービスメッシュとして統合する。
- 詳細: サービスメッシュ入門
21. サーバーレスコンピューティング
- 定義: クラウドプロバイダーが「動的にマシンリソースを割り当てる」クラウドコンピューティングの実装。
- 例: AWS Lambdaを使用して、サーバーのプロビジョニングなしでバックエンドコードを実行する。
- 詳細: サーバーレスコンピューティングとは?
22. イベント駆動アーキテクチャ
- 定義: 一般的にイベントの生成、検出、消費、および反応を奨励するソフトウェアアーキテクチャパラダイム。
- 例: Apache Kafkaを使用してマイクロサービス間のイベント通信を行うシステムを設計する。
- 詳細: イベント駆動アーキテクチャ
23. モノリシックアーキテクチャ
- 定義: すべての要素が単一のアプリケーションに組み込まれ、単一のサービスとして実行されるソフトウェアアーキテクチャ。
- 例: 単一の大規模ユニットとして構築された従来の企業アプリケーション。
- 詳細: モノリシックvsマイクロサービスアーキテクチャ
24. 分散システム
- 定義: ネットワーク上のコンピューターに配置されたコンポーネントがメッセージを交換して互いに通信し、行動を調整するモデル。
- 例: Hadoopのような分散ファイルシステムの設計。
- 詳細: 分散システム入門
25. メッセージキュー
- 定義: サーバーレスおよびマイクロサービスアーキテクチャの両方で非同期のサービス間通信を可能にする方法。
- 例: RabbitMQを使用してサービス間でメッセージをキューイングする。
- 詳細: メッセージキューの説明
26. パブ/サブモデル
- 定義: 送信者(パブリッシャー)がメッセージを抽象的に公開し、送信者が宛先の受信者(サブスクライバー)の身元を知る必要なく、任意の受信者がアクセスできるメッセージングパターン。
- 例: Google Cloud Pub/Subを使用する通知システム。
- 詳細: パブ/サブメッセージング
27. データパーティショニング
- 定義: データベースをより小さく管理しやすい部分に分割すること。
- 例: 超高速クエリ実行を可能にするために、データベース内のテーブルを日付でパーティショニングする。
- 詳細: データベースパーティショニング
28. 水平スケーリング
- 定義: システム内にマシンやノードを追加することで容量を増やすこと。
- 例: 増加するユーザートラフィックを処理するためにWebサーバーを追加する。
- 詳細: 水平スケーリングvs垂直スケーリング
29. 垂直スケーリング
- 定義: CPUやRAMの形で既存のマシンをより強力にアップグレードすること。
- 例: サーバーのRAMをアップグレードして、一度により多くのリクエストを処理できるようにする。
- 詳細: 水平スケーリングvs垂直スケーリング
30. レート制限
- 定義: ネットワークインターフェースコントローラーが送受信しているトラフィックの速度を制御すること。
- 例: 悪用を防ぐためにAPIをスロットリングする。
- 詳細: レート制限を理解する
31. サーキットブレーカーパターン
- 定義: 現代のソフトウェア開発で使用される設計パターンで、障害を検出し、障害が常に再発するのを防ぐロジックをカプセル化するために適用される。
- 例: マイクロサービスアーキテクチャでサーキットブレーカーを使用して失敗したリモートサービス呼び出しを処理する。
- 詳細: サーキットブレーカーパターン
32. データ一貫性
- 定義: 複数のインスタンス間でデータが同じであり、破損していないことを確保すること。
- 例: データベースの複数のレプリカを通じてユーザーデータの一貫性を維持する。
- 詳細: データ一貫性モデル
33. 最終的一貫性
- 定義: 高可用性を目指して分散コンピューティングで使用される一貫性モデルで、システムへの更新が最終的に伝播し、すべてのノードに反映されることが期待されるモデル。
- 例: Amazon DynamoDBは読み取り操作に対して最終的な一貫性モデルを提供しています。
- 詳細: 最終的な一貫性
34. 強い一貫性
- 定義: 特定のデータ単位に対する最新の書き込みが、すべての読み取りで反映されることを保証する一貫性モデル。
- 例: 金融取引システムでの強い一貫性の使用。
- 詳細: 強い一貫性
35. コンテナ化
- 定義: アプリケーションとその依存関係をコンテナにカプセル化し、任意の計算環境で実行できるようにすること。
- 例: 開発、テスト、本番などの様々な環境へのデプロイメントのためにDockerを使用してアプリケーションをコンテナ化する。
- 詳細: コンテナ化とは?
36. Kubernetes
- 定義: アプリケーションコンテナのデプロイメント、スケーリング、運用を自動化するオープンソースプラットフォーム。
- 例: Kubernetesを使用してコンテナ化されたアプリケーションを実行およびデプロイする。
- 詳細: Kubernetesドキュメント
37. オートスケーリング
- 定義: ユーザー負荷に基づいて計算リソースの数を自動的に調整すること。
- 例: AWS EC2 Auto Scaling機能を利用して、インスタンス数を動的に調整する。
- 詳細: オートスケーリングの説明
38. マルチテナンシー
- 定義: ソフトウェアアプリケーションの単一インスタンスが複数の消費者/顧客にサービスを提供するアーキテクチャ。
- 例: SalesforceなどのSaaSアプリケーションは、異なる顧客カテゴリーへのサービス提供にマルチテナンシーを利用しています。
- 詳細: シングルテナンシーvsマルチテナンシー?
39. ロードシェディング
- 定義: 高負荷時にシステム全体の健全性を維持するために、一部の要求を拒否したりサービスを低下させたりすること。
- 例: ピークトラフィック時に非重要なサービスをすべてオフにする。
- 詳細: ロードシェディング
40. べき等性
- 定義: 数学やコンピューターサイエンスの一部の操作に関する特性で、1回以上繰り返しても同じ効果があることを示す。
- 例: HTTP DELETEリクエストはべき等です。
- 詳細: APIにおけるべき等性
41. クォーラム
- 定義: 分散トランザクションをコミットするために必要な最小投票数。
- 例: クォーラムベースのレプリケーションは、分散データベースの一貫性を確保します。
- 詳細: クォーラムシステム
42. オーケストレーション
- 定義: 中央のコーディネーターがサービス間の相互作用を制御するサービス相互作用パターン。
- 例: ワークフローエンジンを使用して複数ステップのビジネスプロセスを管理する。
- 詳細: オーケストレーション
43. コレオグラフィ
- 定義: 各サービスが自己完結型で、イベントを通じて他のサービスと相互作用するサービス相互作用パターン。コーディネーターやオーケストレーターは存在しません。
- 例: コレオグラフィパターンでイベントバスを介して通信するマイクロサービス。
- 詳細: コレオグラフィvsオーケストレーション
44. サービスレジストリ
- 定義: マイクロサービスのインスタンスを追跡するデータベース。
- 例: マイクロサービスアーキテクチャでEurekaサービスレジストリを使用する。
- 詳細: サービスレジストリとディスカバリ
45. APIレート制限
- 定義: 一定の時間枠内でクライアントがAPIに対して行えるリクエスト数を制御すること。
- 例: 乱用を防ぐためにAPIへのリクエストを1分間に100回に制限する。
- 詳細: APIレート制限
46. データウェアハウス
- 定義: レポートの生成とビジネスデータ分析を支援するシステム。ビジネスインテリジェンスのハブ。
- 例: Amazon Redshiftをデータウェアハウジングに実装できます。
- 詳細: データウェアハウスを理解する
47. データレイク
- 定義: データをネイティブ/生の形式で保持するシステムまたはリポジトリ。一般的にオブジェクトBLOBまたはファイルとして保存される。
- 例: データレイクで構造化および非構造化データを保存および管理するためのペタバイトスケーリング。
- 詳細: データレイク
48. OLAP
- 定義: オンライン分析処理:データベースに保存されたデータの分析を可能にするソフトウェアカテゴリ。
- 例: 分析的で任意のクエリのためのOLAPキューブの使用。
- 詳細: OLAPの説明
49. OLTP
- 定義: オンライントランザクション処理:トランザクション指向のアプリケーションを管理するシステムのクラス。
- 例: 銀行システムなどでトランザクションデータ管理にOLTPシステムを使用する。
- 詳細: OLTPの説明
50. ビッグデータ
- 定義: 従来のデータ処理ソフトウェアでは効率的に管理できない大規模で複雑なデータセット。
- 例: ファッショントレンドを予測するためのソーシャルメディアの相互作用の分析。
- 詳細: ビッグデータ入門
システム設計においては、継続的な学習と実践が重要であることを覚えておいてください。これらのリソースを活用し、議論に参加し、プロジェクトでこれらの概念を実践してください。リソースや議論を通じて、概念の語彙や使用法に触れることができます。
読んでいただきありがとうございます!もしこのガイドが少しでも役立ったと感じたら、他の人も練習できるようにシェアしてください。考え、質問、リソースがある場合は、コメントセクションをご覧ください。
システム設計を楽しんでください!
こちらは、「Top 50 System Design Terminologies You Must Know」の記事を日本語に翻訳したものです。