システム設計コンポーネントの構成要素の概要 – システム設計 05

システム設計-システム設計05-システム設計コンポーネント-ビルディングブロック-ホーガンテック

序文

システム コンポーネントはシステム設計の基本的な構成要素であり、それらを組み合わせて複雑なソフトウェア システムを構築できます。ここでは、システム設計の基本概念についても説明します。システム設計はソフトウェア エンジニアリングにおける重要な要素であり、ソフトウェア システムの全体的なアーキテクチャと設計が関係します。優れたシステム設計により、ソフトウェア システムの信頼性、拡張性が向上し、保守が容易になります。

もちろん、これらのコンポーネントを使用してシステムを設計したい場合は、まずどのような設計コンポーネントがあるのかを理解する必要があります。それぞれのデザイン要素は何を表しているのでしょうか?この記事では、各システム コンポーネントを紹介し、次の章で各コンポーネントの詳細と用途について詳しく説明します。

システムコンポーネントを使用する理由

通常、システム設計の問題にはいくつかの類似点がありますが、詳細は異なることがよくあります。したがって、システムコンポーネントを使用して、これらのシステム間設計の問題間の類似点に対処します。たとえば、ロード バランサーは一般的なシステム コンポーネントです。ロード バランシングが必要な状況が発生した場合は、このコンポーネントを直接使用してください。

モジュール化によってシステムのコンポーネントを分離する理由は、「機能だけを議論すればよく、実装について議論する必要がない」ためです。これは、前章で述べた「抽象化」の概念でもあります。これには、面接官が特定の部分を最適化してほしいと要求した場合、他のシステム コンポーネントを考慮せずに、特定のシステム コンポーネントを最適化する方法を説明するだけで済むという利点もあります。

システム設計における一般的なシステム コンポーネントは、アマゾン ウェブ サービス (AWS)、Azure、Google Cloud Platform (GCP) などのよく知られたパブリック クラウド サービスでも使用できます。前述のよく知られたクラウド サービスは、通常、ユーザーが使用できる対応するシステム コンポーネントを提供します。

システム設計コンポーネントの構成要素

システム設計では、システムのコンポーネントが非常に重要です。システム設計に必要なリソースとパフォーマンスを見積もることに加えて、システム設計プロセスで最も重要なことは、既存のシステム設計コンポーネントを使用してソフトウェア システムを構築する方法です。さまざまなシステム コンポーネントの紹介もここに記載されており、今後の記事でこれらのシステム コンポーネントについて詳しく紹介します。

ドメイン ネーム システム (DNS)

ドメイン ネーム システム (DNS) システム コンポーネントは、さまざまなインターネット プロトコルを介してインターネットに接続されているコンピューター用の階層的で分散型の命名システムを設計する方法に焦点を当てています。また、IP とドメイン名の問題に対処するために DNS を使用する必要もあります。

ロードバランサ

ロード バランサーは、主にサーバー側のサービス リクエストを受信クライアント リクエストに分散するために使用されるシステム コンポーネントであり、負荷を軽減し、障害が発生したサーバーをバイパスすることもできます。率直に言うと、特定のサーバーが大量のリクエストによって麻痺するのを防ぐために、サーバーとクライアントの間で行き来するリクエストのバランスを取る必要があります。

データベース

データベースは、データの保存、検索、変更、削除を可能にするリレーショナル データベースであるシステム コンポーネントです。次の章では、データベースを説明する際に、SQL が適している状況と NoSQL が適している状況についても詳しく説明し、最適化とバックアップの方法についても紙面を割いて説明します。

キーバリューストア

Key-Value ストアは、データをキー値の形式で保存する非連想データベースです。このデータベースを説明する際には、キーバリュー ストアの設計や、スケーラビリティ、永続性、構成可能性などを実現するための重要な概念についても説明します。

コンテンツ配信ネットワーク (CDN)

コンテンツ配信ネットワーク (CDN) は、データ集約型アプリケーションの Web ページの読み込みを高速化する、相互接続されたサーバーのネットワークです。ユーザーが Web サイトにアクセスすると、Web サイトのサーバーからのデータがインターネット経由でユーザーのコンピュータに送信される必要があります。ユーザーがサーバーから遠く離れた場所にいる場合、大きなファイル (ビデオや Web サイトの画像など) のロードに時間がかかることがあります。対照的に、CDN サーバーでホストされている Web サイトのコンテンツは地理的にユーザーに近く、ユーザーのコンピュータにより速く到達します。 CDN を使用すると、遅延とサーバー負荷を軽減しながら、コンテンツをエンド ユーザーに効果的に配信できます。

シーケンサー

シーケンサー システムのコンポーネントの中で、一意の ID を持つジェネレーターを生成する方法に主な焦点が当てられており、これらのジェネレーターの原理についてはある程度のスペースを割いて説明します。では、ID ジェネレーターとは何でしょうか?ユーザー番号を例に挙げます。ユーザーが登録するとき、このユーザー番号は重複しないように、対応するユーザー番号を割り当てます。そのため、ランダムに生成することはできません。特殊な加工を施して初めて生み出される透明感。

サービス監視

監視システムはシステムの分析に役立ち、問題が発生したときにエンジニア、プロジェクト マネージャー、顧客に通知できるため、分散システムでは非常に役立ちます。監視は通常、早期警告のために使用されます。これにより、システム管理者は問題が再び発生する前に事前に措置を講じ、今後の小さな問題が大きな問題に発展するのを防ぐことができます。エラーのないシステムは世界に存在しないため、問題を報告するにはサービスの監視が必要であることを忘れないでください。

分散キャッシュ

いわゆるキャッシュは、データを一時的に保存することでパフォーマンスを最適化します。分散キャッシュ システムでは、複数のキャッシュ サーバーがさまざまな種類のストレージ メカニズムと連携して、頻繁に検索されるデータを返し、システムを最適化します。

分散メッセージングキュー

分散システム キューは、複数のサーバーで構成されるキュー設計です。これにより、システムのさまざまな部分が非同期で通信および操作を処理できるようになり、ソフトウェア システムの拡張性が実現され、信頼性が向上します。

パブリッシュ・サブスクライブ・システム

パブリッシュとサブスクライブは文字通りの意味と同じで、パブリッシャーはメッセージをパブリッシュし、他のメッセージ受信者はサブスクライバーと呼ばれます。このパブリッシュ/サブスクライブ仕様では、パブリッシャーはパブリッシュを担当している限りサブスクライバーが誰であるかを気にする必要はなく、サブスクライバーはサブスクライブを担当するだけで済みます。

レートリミッター

レート リミッターは主に、サービスの受信リクエストを制限するために使用されます。大量のリクエスト フローがシステムに流入した場合、このシステム コンポーネントを使用してフローを制限し、リクエストをゆっくりと処理してシステムの麻痺を回避できます。また、通常、意図的または非意図的な高トラフィック アクセスを回避するために、システム サービスの防御層としてレート リミッターを使用します。

ブロブストア

「Blob」はバイナリ ラージ オブジェクトの略で、バイナリ形式の大量のデータであり、必ずしもファイル形式に準拠しているわけではありません。 BLOB ストレージは、これらの大量のデータを「データ レイク」と呼ばれる非階層ストレージ領域に保存します。俗に言うと、このコンポーネントは、マルチメディア ファイルやバイナリ実行可能ファイルなどの非構造化データの保存方法に焦点を当てています。

分散検索

検索システムはユーザーからクエリ文字列を取得し、関連するコンテンツを数秒以内に返します。数千のデータを効果的かつ迅速にユーザーに返す方法が、このシステム コンポーネントの役割です。

分散ロギング

ロギングは I/O 集中型の操作であり、時間がかかり、時間がかかります。このコンポーネントの主な役割は、分散システム サービスがプログラムの実行記録を効果的に記録できるようにすることです。エラーが発生して修正する必要がある場合、この記録コンポーネントを使用して問題のプロセスを追跡する必要もあります。

分散タスクのスケジューリング

分散タスク スケジューリングは、主にタスクとリソース間の調整に使用されます。タスクレベルおよびシステムレベルの要件を満たすために、タスクにリソースを効率的に割り当てます。つまり、このシステムコンポーネントを通じて、システムはリソースとタスクを効果的にスケジュールし、スケジュールすることができます。

シャードカウンター

名前が示すように、カウンターはユーザーによるビュー、コメント、いいねの数などの数量をカウントするために使用されます。小規模なシステムであれば簡単なプログラムで完成しますが、大規模なシステムとなると数百万件のリクエストを処理する効率的な分散計数システムが必要になります。

結語

この記事は 2024 年 3 月に書かれたものであるため、この記事に記載されているシステム コンポーネントは現在判明している内容に基づいています。今後のいくつかの記事でもこれらのシステム コンポーネントを紹介します。

皆さんもこのコンテンツを気に入っていただければ幸いです!

引用

CDNとは何ですか?

関連記事

封筒の裏の計算 – システム設計04

ソフトウェア設計の非機能的特徴 – システム設計 03

システム設計における抽象化の適用 – システム設計 02

最新のシステム設計入門 – システム設計 01

2023 Yahoo! ソフトウェア・エンジニア・インタビュー

投稿メッセージ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ja日本語