مشاركة عبر


ضبط الأداء للتحميلات والتنزيلات باستخدام JavaScript

عندما يقوم أحد التطبيقات بنقل البيانات باستخدام مكتبة عميل Azure Storage ل JavaScript، هناك العديد من العوامل التي يمكن أن تؤثر على سرعة الطلب واستخدام الذاكرة وحتى نجاح الطلب أو فشله. لتحقيق أقصى قدر من الأداء والموثوقية لنقل البيانات، من المهم أن تكون استباقيا في تكوين خيارات نقل مكتبة العميل استنادا إلى البيئة التي يعمل فيها تطبيقك.

تتناول هذه المقالة العديد من الاعتبارات لضبط خيارات نقل البيانات. عند ضبطها بشكل صحيح، يمكن لمكتبة العميل توزيع البيانات بكفاءة عبر طلبات متعددة، ما قد يؤدي إلى تحسين سرعة العملية واستخدام الذاكرة واستقرار الشبكة.

ضبط الأداء للتحميلات

ضبط خيارات نقل البيانات بشكل صحيح هو مفتاح الأداء الموثوق به للتحميلات. يتم تقسيم عمليات نقل التخزين إلى عدة تحويلات فرعية استنادا إلى قيم هذه الوسيطات. يختلف الحد الأقصى لحجم النقل المدعوم حسب إصدار العملية والخدمة، لذا تأكد من التحقق من الوثائق لتحديد الحدود. لمزيد من المعلومات حول حدود حجم النقل لتخزين Blob، راجع أهداف المقياس لتخزين Blob.

تعيين خيارات النقل للتحميلات

يمكنك تكوين الخصائص في BlockBlobParallelUploadOptions لتحسين الأداء لعمليات نقل البيانات. يسرد الجدول التالي الخصائص التي يمكنك تكوينها، بالإضافة إلى وصف:

الخاصية ‏‏الوصف
blockSize الحد الأقصى لحجم الكتلة المطلوب نقله لكل طلب كجزء من عملية التحميل. لمعرفة المزيد، راجع blockSize.
maxSingleShotSize إذا كان حجم البيانات أقل من هذه القيمة أو مساويا لها، يتم تحميلها في وضع واحد بدلا من تقسيمها إلى مجموعات. إذا تم تحميل البيانات في لقطة واحدة، يتم تجاهل حجم الكتلة. القيمة الافتراضية هي 256 ميغابايت. إذا قمت بتخصيص هذه الخاصية، يجب استخدام قيمة أقل من أو تساوي 256 ميغابايت. لمعرفة المزيد، راجع maxSingleShotSize.
concurrency الحد الأقصى لعدد الطلبات المتوازية التي يتم إصدارها في أي وقت كجزء من نقل مواز واحد.

إشعار

ستستخدم مكتبات العميل الإعدادات الافتراضية لكل خيار نقل بيانات، إذا لم يتم توفيرها. عادة ما تكون هذه الإعدادات الافتراضية ذات أداء في بيئة مركز البيانات، ولكن من غير المحتمل أن تكون مناسبة لبيئات المستهلك المنزلية. يمكن أن تؤدي خيارات نقل البيانات التي تم ضبطها بشكل سيئ إلى عمليات طويلة للغاية وحتى طلب مهلات. من الأفضل أن تكون استباقيا في اختبار هذه القيم، وضبطها بناء على احتياجات التطبيق والبيئة.

maxSingleShotSize

maxSingleShotSize القيمة هي الحد الأقصى لحجم الكائن الثنائي كبير الحجم بالبايت لتحميل طلب واحد.

إذا كان حجم البيانات أقل من أو يساوي maxSingleShotSize، يتم تحميل الكائن الثنائي كبير الحجم مع طلب Put Blob واحد. إذا كان حجم الكائن الثنائي كبير الحجم أكبر من maxSingleShotSize، أو إذا كان حجم الكائن الثنائي كبير الحجم غير معروف، يتم تحميل الكائن الثنائي كبير الحجم في مجموعات باستخدام سلسلة من استدعاءات Put Block متبوعة ب Put Block List.

من المهم ملاحظة أن القيمة التي تحددها blockSize لا تحد من القيمة التي تحددها ل maxSingleShotSize. maxSingleShotSize تحدد الوسيطة قيد حجم منفصل لطلب تنفيذ العملية بأكملها في وقت واحد، دون أي تحويلات فرعية. غالبا ما تريد أن maxSingleShotSize تكون كبيرا على الأقل مثل القيمة التي تحددها ل blockSize، إن لم تكن أكبر. اعتمادا على حجم نقل البيانات، يمكن أن يكون هذا النهج أكثر أداء، حيث يتم إكمال النقل بطلب واحد ويتجنب الحمل الزائد للطلبات المتعددة.

إذا لم تكن متأكدا من القيمة الأفضل لموقفك، فإن الخيار الآمن هو تعيين maxSingleShotSize إلى نفس القيمة المستخدمة ل blockSize.

حجم الكتلة

blockSize القيمة هي الحد الأقصى لطول النقل بالبايت عند تحميل كائن ثنائي كبير الحجم للكتلة في مجموعات.

كما ذكرنا سابقا، لا تحد هذه القيمة ، والتي يمكن أن تكون أكبر من blockSize.maxSingleShotSize

للحفاظ على نقل البيانات بكفاءة، قد لا تصل مكتبات العميل دائما إلى blockSize قيمة كل عملية نقل. اعتمادا على العملية، يمكن أن يختلف الحد الأقصى للقيمة المدعومة لحجم النقل. لمزيد من المعلومات حول حدود حجم النقل لتخزين Blob، راجع المخطط في أهداف المقياس لتخزين Blob.

مثال على التعليمات البرمجية

يوضح مثال التعليمات البرمجية التالي كيفية تعيين قيم BlockBlobParallelUploadOptions وتضمين الخيارات كجزء من استدعاء أسلوب التحميل. لا يقصد بالقيم المقدمة في العينات أن تكون توصية. لضبط هذه القيم بشكل صحيح، تحتاج إلى مراعاة الاحتياجات المحددة لتطبيقك.

// Specify data transfer options
const uploadOptions = {
  blockSize: 4 * 1024 * 1024, // 4 MiB max block size
  concurrency: 2, // maximum number of parallel transfer workers
  maxSingleShotSize: 8 * 1024 * 1024, // 8 MiB initial transfer size
} 

// Create blob client from container client
const blockBlobClient = containerClient.getBlockBlobClient(blobName);

// Upload blob with transfer options
await blockBlobClient.uploadFile(localFilePath, uploadOptions);

في هذا المثال، قمنا بتعيين الحد الأقصى لعدد عمال النقل المتوازيين إلى 2 باستخدام الخاصية concurrency . كما قمنا بتعيين maxSingleShotSize إلى 8 ميبي بايت. إذا كان حجم الكائن الثنائي كبير الحجم أصغر من 8 ميبي بايت، فمن الضروري طلب واحد فقط لإكمال عملية التحميل. إذا كان حجم الكائن الثنائي كبير الحجم أكبر من 8 ميجابايت، يتم تحميل الكائن الثنائي كبير الحجم في مجموعات بحد أقصى لحجم القطعة 4 ميجابايت، والتي نحددها في الخاصية blockSize .

اعتبارات الأداء للتحميلات

أثناء التحميل، تقوم مكتبات عميل التخزين بتقسيم دفق تحميل معين إلى تحميلات فرعية متعددة استنادا إلى خيارات التكوين المحددة بواسطة BlockBlobParallelUploadOptions. كل تحميل فرعي له استدعاء مخصص خاص به لعملية REST. في هذا المثال، العملية هي Put Block. تدير مكتبة عميل التخزين عمليات REST هذه بالتوازي (اعتمادا على خيارات النقل) لإكمال التحميل الكامل.

إشعار

تحتوي الكائنات الثنائية كبيرة الحجم للكتلة على حد أقصى لعدد الكتل يبلغ 50,000 كتلة. الحد الأقصى لحجم الكائن الثنائي كبير الحجم للكتلة، ثم، هو 50000 مرة block_size.

التخزين المؤقت أثناء التحميلات

لا تدعم طبقة Storage REST التقاط عملية تحميل REST من حيث توقفت؛ يتم إكمال عمليات النقل الفردية أو فقدها. لضمان مرونة عمليات تحميل الدفق، تقوم مكتبات عميل التخزين بالتخزين المؤقت للبيانات لكل استدعاء REST فردي قبل بدء التحميل. بالإضافة إلى قيود سرعة الشبكة، يعد سلوك التخزين المؤقت هذا سببا للنظر في قيمة أصغر ل blockSize، حتى عند التحميل بالتسلسل. يؤدي تقليل قيمة blockSize إلى تقليل الحد الأقصى لمقدار البيانات المخزن مؤقتا على كل طلب وكل إعادة محاولة لطلب فاشل. إذا كنت تواجه مهلات متكررة أثناء عمليات نقل البيانات بحجم معين، فإن تقليل قيمة يقلل من blockSize وقت التخزين المؤقت، وقد يؤدي إلى أداء أفضل.

ضبط الأداء للتنزيلات

يتوفر ضبط خيارات نقل البيانات للتنزيلات فقط عند استخدام أسلوب downloadToBuffer . يقوم هذا الأسلوب بتنزيل كائن ثنائي كبير الحجم بالتوازي مع مخزن مؤقت استنادا إلى القيم المعرفة في BlobDownloadToBufferOptions. لا تدعم طرق التنزيل الأخرى ضبط خيارات نقل البيانات.

تعيين خيارات النقل للتنزيلات

يمكن ضبط القيم التالية للتنزيلات عند استخدام downloadToBuffer الأسلوب :

  • blockSize: الحد الأقصى لحجم الكتلة المطلوب نقله لكل طلب.
  • التزامن: الحد الأقصى لعدد الطلبات المتوازية الصادرة في أي وقت كجزء من نقل مواز واحد.

اعتبارات الأداء للتنزيلات

أثناء التنزيل باستخدام downloadToBuffer، تقوم مكتبات عميل التخزين بتقسيم طلب تنزيل معين إلى تحميلات فرعية متعددة استنادا إلى خيارات التكوين المحددة بواسطة BlobDownloadToBufferOptions. كل تحميل فرعي له استدعاء مخصص خاص به لعملية REST. اعتمادا على خيارات النقل، تدير مكتبات العميل عمليات REST هذه بالتوازي لإكمال التنزيل الكامل.

مثال على التعليمات البرمجية

يوضح مثال التعليمات البرمجية التالي كيفية تعيين قيم BlobDownloadToBufferOptions وتضمين الخيارات كجزء من استدعاء أسلوب downloadToBuffer . لا يقصد بالقيم المقدمة في العينات أن تكون توصية. لضبط هذه القيم بشكل صحيح، تحتاج إلى مراعاة الاحتياجات المحددة لتطبيقك.

// Specify data transfer options
const downloadToBufferOptions = {
    blockSize: 4 * 1024 * 1024, // 4 MiB max block size
    concurrency: 2, // maximum number of parallel transfer workers
}

// Download data to buffer
const result = await client.downloadToBuffer(offset, count, downloadToBufferOptions);