クライアントからのアップロードか、サーバーからのアップロードかを問わず、ファイル転送プロセスにおいては下記のいくつかのよくある品質問題が生じることがあります。
アップロードの品質を判断する指標:アップロードの速度および成功率です。
ここでは、VODを基本としたアップロードのシナリオを、原因分析および解決案の両面に重点を置いてご紹介します。ご自身の業務シナリオを基に比較して、適切なプランを選択してアップロードの品質を高めることができます。
ネットワーク帯域幅は、時間単位内に転送できるデータ量を示します。帯域幅が広くなるほど、時間単位内にアップロードするデータ量も多くなり、アップロード速度が速くなることを示します。アップロードはエンドツーエンドの行為であるため、エンドツーエンドの帯域幅はアップロードの品質に影響します。そして、VODのバックエンドサーバーは現在帯域幅が十分にあるために、アップロードの品質は多くの場合ユーザー側の帯域幅に依存します。
アップロードされたファイルは最終的にVODに保存する必要があります。保存する場所はストレージセンターになります。ユーザーはVODをアクティブにすると、VODはデフォルトで重慶リージョンをストレージセンターとしてアサインします。ユーザーとストレージセンターとの距離はネットワークのリンクの長さに影響します。
例えば、北京から重慶にアップロードする場合、同じファイルを成都から重慶にアップロードするのと比較すると、中間で経由するリンクはさらに長くなり、距離が長くなるにつれて影響要因も多くなります。最終的にアップロード速度は遅くなってしまいます。長いリンク転送中で現れるネットワークジッター、パケットロスなどの問題のために、アップロード成功率にも影響を与えることになります。リンクが短い場合でもこれらの問題を避けることは不可能です。ただ長いリンクに比較すれば、出現する確率はかなり低下します。ユーザーとストレージセンターとの距離を短くすることは、アップロードの品質を高めるキーポイントの1つです。
弱いネットワーク環境とは、遅延とパケットロスの頻度が高いネットワークの状態のことを指し、一般には「ネットアクセスが遅い」ということです。例えば、エレベータや地下鉄の中など、弱いネットワーク事情は現実生活の中でもよく現れます。その主な原因は受信状態が良好でないことです。影響を受ける環境ではデータパケットの転送が遅かったり失敗したりします。こうしたシナリオではクライアントからのアップロードが極めて多数であり、特に現在はモバイルインターネットが盛んな時代であることから、弱いネットワークは多くの開発者を困らせています。このことも、成功率の指標を高めるうえで最も難しい課題です。
ネットワーク帯域幅が不足するシナリオについて、直接的な方法は帯域幅をさらに広げる申請を行うことですが、私たちが直面している問題は帯域幅ネットワークに制限があることである場合、帯域幅をいかに十分に活用してアップロードするか、これは私たちが解決すべきことです。同時アップロードは2つのカテゴリに分けられます。
前者でも、後者でも、対応する同時実行数を調整することで帯域幅の使用率を向上させることができます。
ファイルの同時アップロードは、複数のプロセスまたはスレッドを使用して、同時にアップロード操作を開始することです。現在の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点だけ簡単に確認することが必要です。
FileId
を取得し、メディア詳細情報インターフェース を通じて返された基本情報(basicInfo)を確認します。そこにはアップロードされたメディアファイルのストレージリージョンを示すStorageRegion
フィールドが含まれます。 途中でプロキシまたは転送を経由し、VODのIPによるリージョン識別が正しくない場合、ファイルアップロード用のストレージリージョンを強制的に指定できます。対象のリージョンにアップロードするための具体的な方法については以下をご参照ください。
アップロードの事前検出は、ネットワーク接続障害、タイムアウト、DNSの乗っ取りなどのネットワークエラーのシナリオを最適化するための手段です。これは、弱いネットワークでのアップロードについてVODが提供する有効な軽減措置です。最適化ポリシーには以下の数点があります。
アップロードの事前検出機能は現在、クライアントからのアップロードに適用されています。接続方式は簡単です。具体的な使用方法については、SDKの事前アップロード
の説明をご参照ください。
この記事はお役に立ちましたか?