クラウド コンピューティング インフラストラクチャの概要

著者: 禅とコンピュータープログラミングの芸術

1 はじめに

クラウド コンピューティングは、高効率、柔軟性、低コストを実現する新しいサービス モデルであり、インターネットを通じてデータ センター インフラストラクチャ、アプリケーション ソフトウェア、およびサービスをユーザーに提供します。クラウドコンピューティングには次のような特徴があります。

1. オンデマンドでのアクセス: クラウド コンピューティングにより、ユーザーはいつでもどこからでも必要なデータやコンピューティング リソースにアクセスできるため、さまざまなビジネス ニーズを満たすことができます。

2. リソースの弾力的なスケーリング: クラウド コンピューティング プラットフォームは、ビジネス ニーズに応じてコンピューティング リソースのサイズを自動的に調整し、必要に応じて支払うことができます。つまり、ユーザーは多額の初期費用を前払いする必要はなく、実際に使用したリソースの料金のみを支払うことになります。

3. 高い信頼性: クラウド コンピューティング プラットフォームのオペレーターは、クラウド コンピューティング サービスの可用性を確保し、不可抗力やシステム障害によるデータ損失やサービス中断を防ぎます。

4. 柔軟性: クラウド コンピューティング プラットフォームを使用すると、ユーザーはさまざまな方法で独自のアプリケーションを展開できるため、ユーザーはさまざまなシナリオで同じサービスを使用できます。たとえば、クラウド プラットフォームを使用してデプロイされた仮想マシンはほぼどこでも実行でき、クラウド プラットフォームを使用して構築されたデータベースは複数のリージョンにデプロイでき、クラウド プラットフォームが提供するクラウド ストレージ サービスを使用すると、大量のデータを迅速に保存して移行できます。

5. 低コスト: クラウド コンピューティング プラットフォームは、ハードウェア コストの削減、IT 投資の削減、サービス プロバイダーの経費の削減により、サービス価格を引き上げ、コストを削減します。

クラウド コンピューティング プラットフォームには、パブリック クラウド、プライベート クラウド、コミュニティ クラウド、ホスティング サービスなど、さまざまな種類があります。その中で最も有名なのは、アマゾン ウェブ サービス (AWS)、Microsoft Azure、Google Cloud Platform などのパブリック クラウドです ( GCP)。他の種類のコンピューティング プラットフォームと比較して、クラウド コンピューティング プラットフォームには、オンデマンド アクセス、アプリケーションの柔軟な展開、コスト削減などの多くの利点があります。したがって、クラウド コンピューティング プラットフォームの開発は、大規模なユーザーの参加と参加者による継続的なイノベーションと切り離すことができません。

2. 中心となる概念と用語

2.1 クラウドコンピューティングモデル

クラウド コンピューティング モデルは、IaaS、PaaS、SaaS の 3 つのタイプに分類できます。

1.IaaS(Infra Structure as a Service):コンピューティング、ネットワーク、ストレージなどの基盤となるリソースのリースサービスを提供するサービスとしてのインフラストラクチャであり、開発者は基盤となるサーバーの保守管理を意識することなく、クラウドベースのアプリケーションシステムを構築できます。 。

2. PaaS (Platform as a Service): サービスとしてのプラットフォームは、開発者に完全なプラットフォームを提供します。サーバーを自分で購入したり保守したりする必要はありません。プラットフォームが提供するインターフェースに従って API を呼び出すだけで機能を実装できます。 。たとえば、開発者は、ミドルウェアやクラスターのインストールや構成を気にすることなく、リアルタイムの情報配信のために提供されたメッセージ キュー サービスを選択できます。

3. SaaS (Software as a Service): オフィススイート、CRM ソフトウェアなどの商用ソフトウェアサービスを提供するサービスとしてのソフトウェア。ユーザーは、Web サイトにログインしてアカウントを登録し、パスワードを入力するだけで、サービスを使用できます。ソフトウェア。

2.2 クラウドコンピューティングサービス

クラウド コンピューティング サービスとは、クラウド コンピューティング プラットフォームによって提供されるさまざまなコンピューティング、ストレージ、ネットワーク、セキュリティ、分析、ビッグ データ処理などのサービスを指します。これらのサービスはオンデマンドで購読でき、さまざまなプログラミング言語、オペレーティング システム、ツールをサポートしています。たとえば、次のようなオプション サービスがあります。

1. コンピューティング サービス: 仮想マシン、コンテナ サービス、ファンクション コンピューティングなどを含み、顧客がアプリケーションを迅速に展開、拡張、管理できるように支援します。

2. ネットワーク サービス: ロード バランサー、CDN サービス、ストリーミング メディア サービスなどを含み、安全で信頼性の高いネットワーク接続機能を提供します。

3. ストレージ サービス: オブジェクト ストレージ、ブロック ストレージ、ファイル ストレージなどを含み、信頼性が高く効率的なストレージ機能を顧客に提供します。

4. セキュリティサービス:暗号化通信、身元認証、認可、コンプライアンス管理などを含み、安全なインフラストラクチャを提供します。

5. 分析サービス: データ ウェアハウス、データ レイク、データ分析サービスなどを含み、大規模で高速なリアルタイムのビッグ データ処理機能を提供します。

6. ビッグ データ処理サービス: クラスター プランニング、クエリの最適化、データのインポートとエクスポート、ETL ツールなどを含み、顧客が大量のデータを迅速に処理できるようにします。

3. コアアルゴリズムの原理と操作手順

クラウド コンピューティングが解決する主な問題は、インターネット リソースを効果的に利用し、コンピューティング、ストレージ、ネットワーク、セキュリティ、分析、ビッグ データ処理、その他のサービスを使用して、高可用性を提供できるクラウド コンピューティング プラットフォームを構築する方法です。クラウド コンピューティング プラットフォームの最も重要なタスクの 1 つは、ユーザーにコンピューティング リソースを提供することです。この目標を達成するために、クラウド コンピューティング プラットフォームはサーバー クラスターを使用します。サーバー クラスターは物理的にさまざまな場所に分散され、ネットワークを通じて接続されます。各サーバーはノードと呼ばれ、ノードはネットワークを通じて通信して、クラウド コンピューティング プラットフォームのリソース プールを形成します。ユーザーはタスク リクエストを送信することで計算が必要なタスクをプラットフォームに送信でき、プラットフォームはタスクを実行するためにノード リソースを割り当て、最終的に結果を返します。

次の図に示すように、ユーザーがジョブ リクエストを送信すると、プラットフォームはタスクを実行するノードを決定する必要があります。このプロセスでは、ノード リソースの使用率、リクエスト キューの長さ、ジョブの優先順位、実行時間、など。最後に、プラットフォームは実行のために適切なノードにタスクをスケジュールし、タスクの完了後に結果をユーザーに返します。

3.1 分散コンピューティング

分散コンピューティングは、複数のコンピューターを使用して連携し、タスクを異なるコンピューターに割り当て、結果を要約する並列コンピューティング手法です。分散コンピューティングの鍵は、ユーザーが各ノードを簡単に制御しながら、タスクをさまざまなノードに分解する方法です。現在、分散コンピューティング フレームワークには主に Apache Hadoop、Spark などが含まれます。

3.2 分散ストレージ

分散ストレージとは、データをさまざまなデータセンターに分散してデータの保存と処理を実現することを指します。分散ストレージは通常、分散ファイル システム、分散データベース、分散メッセージ キューなどに分類されます。

3.3 分散メッセージキュー

分散メッセージ キュー (分散メッセージ キュー) は、メッセージ パッシング メカニズムに基づく分散システムであり、複数のプロセスおよびコンピューター間で非同期通信を実現するために使用されます。

3.4 分散マルチマスタープロトコル

分散マルチマスター プロトコルは、分散調整および同期プロトコルに基づく分散システムであり、マルチマスター制御の問題を解決するために使用されます。分散システムでは、複数のノードが同時に自分たちがマスター ノードであると認識することがありますが、実際には 1 つのノードだけが実際の制御を持っています。マルチマスター プロトコルの設計目標は、可用性、一貫性、耐障害性を維持しながらシステム パフォーマンスを向上させることです。現在、分散型マルチマスター プロトコルに関する研究は比較的人気があり、関連する研究には Paxos、Zookeeper、Raft などが含まれます。

3.5 負荷分散

負荷分散は、各サーバーの負荷を分散するためにワークロードを動的に再分散するテクノロジーです。負荷分散は、ソフト負荷分散、ハード負荷分散などに分類できます。

3.6 データセンターネットワーク

データセンターネットワークとは、データセンター内およびデータセンター間の接続方法を指します。データセンターのネットワークは通常、専用のスイッチとルーティング装置で構成され、スター構造とリング構造の2つのアーキテクチャを採用できます。

4.コード例

4.1 Python コードの例

import boto3

def create_ec2():
    client = boto3.client('ec2')

    # Create an EC2 instance
    response = client.run_instances(
        ImageId='ami-0ff8a91507f77f867',
        MinCount=1,
        MaxCount=1,
        InstanceType='t2.micro'
    )

    return response['Instances'][0]['InstanceId']

if __name__ == '__main__':
    ec2_id = create_ec2()
    print("EC2 created with ID:", ec2_id)

4.2 Java コードの例

package com.example;

import software.amazon.awssdk.services.ec2.Ec2Client;
import software.amazon.awssdk.services.ec2.model.*;

public class App {
  public static void main(String[] args) throws Exception {
      Ec2Client ec2 = Ec2Client.builder().build();

      RunInstancesRequest request = RunInstancesRequest.builder()
         .imageId("ami-0ff8a91507f77f867") // Amazon Linux AMI
         .minCount(1)
         .maxCount(1)
         .instanceType(InstanceType.T2_MICRO)
         .build();

      RunInstancesResponse response = ec2.runInstances(request);

      System.out.println("Instance created with ID: " + response.reservation().instances().get(0).instanceId());
  }
}

4.3 C++ コード例

#include <aws/core/Aws.h>
#include <aws/ec2/EC2Client.h>
#include <iostream>

int main(int argc, char** argv)
{
    Aws::SDKOptions options;
    Aws::InitAPI(options);

    const std::string region = "us-east-1";
    auto ec2 = Aws::MakeShared<Aws::EC2::EC2Client>(
            "", Aws::Region::Create(region));

    RunInstancesRequest run_request;
    run_request.SetImageId("ami-0ff8a91507f77f867");
    run_request.SetMinCount(1);
    run_request.SetMaxCount(1);
    run_request.SetInstanceType("t2.micro");

    auto outcome = ec2->RunInstances(run_request);

    if (!outcome.IsSuccess())
    {
        std::cerr << "Error running instances: "
                  << outcome.GetError().GetMessage() << "\n";

        return 1;
    }

    const auto& reservation = outcome.GetResult().GetReservation();
    const auto& instance = reservation.GetInstances()[0];

    std::cout << "Instance created with ID: "
              << instance.GetInstanceId() << "\n";

    Aws::ShutdownAPI(options);

    return 0;
}

5. 今後の開発動向

クラウド コンピューティングは徐々にエンタープライズ アプリケーションの標準になってきましたが、統一された標準がないため、各メーカー自体がクラウド コンピューティングの開発に対して異なるソリューションや方向性を提供していることがよくあります。クラウド コンピューティングの発展に伴い、ますます多くのメーカーがクラウド コンピューティングに参加し、この多様化によりクラウド コンピューティングの範囲はさらに広がりました。技術分野に加えて、クラウド コンピューティングは、法律、経済、政策などの側面にも複数の影響を及ぼします。クラウド コンピューティングの普及に伴い、データ プライバシー保護、コンピューティング コストの最適化、法規制順守などの一連の問題に直面する可能性があります。これらすべての変化には、クラウド コンピューティング プラットフォーム ベンダーの共同の取り組みと進歩が必要です。

おすすめ

転載: blog.csdn.net/universsky2015/article/details/133504354