tencent cloud

フィードバック

アップロード品質最適化の実践

最終更新日:2023-10-26 17:26:52

    概要

    クライアントからのアップロードか、サーバーからのアップロードかを問わず、ファイル転送プロセスにおいては下記のいくつかのよくある品質問題が生じることがあります。

    1. ファイルのアップロードがこんなにも遅い理由は?
    2. アップロードの速度を上げる方法は?
    3. アップロード成功率が低い点についての解決方法は?
    4. モバイル端末では弱いネットワーク環境により、アップロードの失敗がよく発生しますが、その対処方法は?

    アップロードの品質を判断する指標:アップロードの速度および成功率です。

    • アップロードの速度がとても遅いと、往々にしてユーザーの直観的印象を悪くすることがあります。例えば、ユーザーが50Mのビデオを1個アップロードして、30分経ってもアップロードが完了しないと、ユーザーが我慢できなくなり、顧客を失う可能性が高くなります。
    • アップロードの成功率が高いか低いかは、サービス品質の拠り所となります。ネット事情によって最初のアップロードに失敗すると、ユーザーが再度アップロードを始める可能性は低くなり、ユーザーからのクレームという直接的な結果を被ることになるため、アップロードの成功率を保証することは最も基本的な要件になります。

    ここでは、VODを基本としたアップロードのシナリオを、原因分析および解決案の両面に重点を置いてご紹介します。ご自身の業務シナリオを基に比較して、適切なプランを選択してアップロードの品質を高めることができます。

    アップロードの品質に影響する原因

    ネットワーク帯域幅

    ネットワーク帯域幅は、時間単位内に転送できるデータ量を示します。帯域幅が広くなるほど、時間単位内にアップロードするデータ量も多くなり、アップロード速度が速くなることを示します。アップロードはエンドツーエンドの行為であるため、エンドツーエンドの帯域幅はアップロードの品質に影響します。そして、VODのバックエンドサーバーは現在帯域幅が十分にあるために、アップロードの品質は多くの場合ユーザー側の帯域幅に依存します。

    ユーザーとストレージセンターとの距離

    アップロードされたファイルは最終的にVODに保存する必要があります。保存する場所はストレージセンターになります。ユーザーはVODをアクティブにすると、VODはデフォルトで重慶リージョンをストレージセンターとしてアサインします。ユーザーとストレージセンターとの距離はネットワークのリンクの長さに影響します。

    例えば、北京から重慶にアップロードする場合、同じファイルを成都から重慶にアップロードするのと比較すると、中間で経由するリンクはさらに長くなり、距離が長くなるにつれて影響要因も多くなります。最終的にアップロード速度は遅くなってしまいます。長いリンク転送中で現れるネットワークジッター、パケットロスなどの問題のために、アップロード成功率にも影響を与えることになります。リンクが短い場合でもこれらの問題を避けることは不可能です。ただ長いリンクに比較すれば、出現する確率はかなり低下します。ユーザーとストレージセンターとの距離を短くすることは、アップロードの品質を高めるキーポイントの1つです。

    弱いネットワーク環境

    弱いネットワーク環境とは、遅延とパケットロスの頻度が高いネットワークの状態のことを指し、一般には「ネットアクセスが遅い」ということです。例えば、エレベータや地下鉄の中など、弱いネットワーク事情は現実生活の中でもよく現れます。その主な原因は受信状態が良好でないことです。影響を受ける環境ではデータパケットの転送が遅かったり失敗したりします。こうしたシナリオではクライアントからのアップロードが極めて多数であり、特に現在はモバイルインターネットが盛んな時代であることから、弱いネットワークは多くの開発者を困らせています。このことも、成功率の指標を高めるうえで最も難しい課題です。

    対処方法

    同時アップロード

    ネットワーク帯域幅が不足するシナリオについて、直接的な方法は帯域幅をさらに広げる申請を行うことですが、私たちが直面している問題は帯域幅ネットワークに制限があることである場合、帯域幅をいかに十分に活用してアップロードするか、これは私たちが解決すべきことです。同時アップロードは2つのカテゴリに分けられます。

    • ファイル別、複数のファイルを同時にアップロード。
    • パート別、1個のファイルを複数のパートに分けて同時にアップロード。

    前者でも、後者でも、対応する同時実行数を調整することで帯域幅の使用率を向上させることができます。

    ファイル同時アップロード

    ファイルの同時アップロードは、複数のプロセスまたはスレッドを使用して、同時にアップロード操作を開始することです。現在のVODは関連するSDKパッケージを提供していません。ユーザーは特定の言語を参照することで実現することができます。以下ではVODの Java SDK を基に1個の簡単な例を示します。

    import com.qcloud.vod.VodUploadClient;
    import com.qcloud.vod.model.VodUploadRequest;
    import com.qcloud.vod.model.VodUploadResponse;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class Main {
        public static void main(String[] args) throws Exception {
            // 同時実行数
            Integer threadNumber = 20;
            // アップロード待ちのファイルパスのリスト
            List<String> filePathList = new ArrayList<String>();
    
            // アップロード待ちのファイルパスの追加
            filePathList.add("/data/path1.mp4");
            filePathList.add("/data/path2.mp4");
            filePathList.add("/data/path3.mp4");
    
            // スレッドプールの作成
            ExecutorService pool = Executors.newFixedThreadPool(threadNumber);
            // アップロードClientの作成
            VodUploadClient client = new VodUploadClient("your secretId", "your secretKey");
    
            // 同時アップロード
            for (String path : filePathList) {
                // アップロードタスクの送信
                pool.submit(new UploadThread(client, path));
            }
        }
    }
    
    // スレッドのアップロード
    class UploadThread implements Runnable {
        //  Clientのアップロード
        private VodUploadClient uploadClient;
        // ファイルパス
        private String filePath;
    
        public UploadThread(VodUploadClient uploadClient, String filePath) {
            this.uploadClient = uploadClient;
            this.filePath = filePath;
        }
    
        public void run() {
            VodUploadRequest request = new VodUploadRequest();
            request.setMediaFilePath(filePath);
            try {
                // アップロードの実行
                VodUploadResponse response = uploadClient.upload("ap-guangzhou", request);
                System.out.println(response.getFileId());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    パートの同時アップロード

    パート同時アップロードは、大きなファイルに対応するもので、複数のパートに分割すると同時にアップロードするものです。パート同時アップロードのメリットは、1個のファイルのアップロードを素早く完了させられることで、VODが提供するSDKはファイルのサイズを基に、通常アップロードとパートアップロードを自動的に選択します。ユーザーは、パートアップロードの各手順に気を遣う必要もなく、パートでのアップロードを実現できます。こうしてファイルの同時パート数は、ConcurrentUploadNumberパラメータによって指定します。具体的なユースケースは対応するSDKをご参照ください。現在このパラメータをサポートしているSDKは以下のとおりです。

    近くでのアップロード

    近くでのアップロードは、アップロードする人の所在位置を検知して、アップロードする人から最も近いストレージセンターをアサインしてアップロードできることを指します。例えば、成都のユーザーは、上海リージョンではなく重慶リージョンにアサインされてアップロードします。

    近くでのアップロード機能の最大のメリットは、アップロードする人からサーバーまでの転送距離を短くしたことです。そのメリットは以下のとおりです。

    • 転送距離を短縮し、アップロード速度を向上。
    • 安定性を高め、成功率を保証。

    VODは近くでのアップロード機能をサポートしています。以下の2点だけ簡単に確認することが必要です。

    • 複数のストレージリージョンのアクティブ化
      VODがデフォルトで提供するストレージリージョンはシンガポールです。近くでのアップロード機能を十分に活用したい場合は、近くで保存したいリージョンをアクティブにする必要があります。コンソールでその他のストレージリージョンを自分で追加することができます。詳細は アップロードストレージ設定をご参照ください。複数リージョンでのストレージを有効にした後で、ユーザーがアップロードするときは、VODはIPでユーザーの リージョンを識別し、パスを通じて、アップロード用にアクティブになったリージョンリストを基に、ユーザーの最も近くのリージョンをインテリジェントにアサインします。
    • スケジューリングが正しいかどうかを検証
      重慶と上海のストレージリージョンをアクティブにしている場合、ユーザーが成都でアップロードを開始すると、理論上では近くのスケジューリングによって、重慶にアップロードされます。スケジューリングが適切か確認する方法は、アップロードの完了時に 返されたFileIdを取得し、メディア詳細情報インターフェース を通じて返された基本情報(basicInfo)を確認します。そこにはアップロードされたメディアファイルのストレージリージョンを示すStorageRegionフィールドが含まれます。

    途中でプロキシまたは転送を経由し、VODのIPによるリージョン識別が正しくない場合、ファイルアップロード用のストレージリージョンを強制的に指定できます。対象のリージョンにアップロードするための具体的な方法については以下をご参照ください。

    アップロード事前検出

    アップロードの事前検出は、ネットワーク接続障害、タイムアウト、DNSの乗っ取りなどのネットワークエラーのシナリオを最適化するための手段です。これは、弱いネットワークでのアップロードについてVODが提供する有効な軽減措置です。最適化ポリシーには以下の数点があります。

    • HTTPDNSを使用してドメイン名を解決してバックエンドアドレスを取得し、DNSの乗っ取りを防止。
    • 複数のリージョンの接続性およびアップロード速度を検出して、最適なアップロードリージョンを取得。
    • Tencent Cloudのアクセラレーションネットワークは、信頼性のある安定した転送コネクションを提供。

    アップロードの事前検出機能は現在、クライアントからのアップロードに適用されています。接続方式は簡単です。具体的な使用方法については、SDKの事前アップロードの説明をご参照ください。

    お問い合わせ

    カスタマーサービスをご提供できるため、ぜひお気軽にお問い合わせくださいませ。

    テクニカルサポート

    さらにサポートが必要な場合は、サポートチケットを送信して弊社サポートチームにお問い合わせください。24時間365日のサポートをご提供します。

    電話サポート(24 時間365日対応)