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

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

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

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

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

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

يمكنك تكوين القيم في ParallelTransferOptions لتحسين الأداء لعمليات نقل البيانات. يمكن ضبط القيم التالية للتحميلات استنادا إلى احتياجات تطبيقك:

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

إشعار

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

maxSingleUploadSize

maxSingleUploadSize القيمة هي الحد الأقصى لحجم الكائن الثنائي كبير الحجم بالبايت لتحميل طلب واحد. يمكن تعيين هذه القيمة باستخدام الأسلوب التالي:

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

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

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

حجم الكتلة

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

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

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

maxConcurrency

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

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

تأكد من أن لديك التوجيه التالي import لاستخدامه ParallelTransferOptions في التحميل:

import com.azure.storage.blob.models.*;

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

ParallelTransferOptions parallelTransferOptions = new ParallelTransferOptions()
        .setBlockSizeLong((long) (4 * 1024 * 1024)) // 4 MiB block size
        .setMaxConcurrency(2)
        .setMaxSingleUploadSizeLong((long) 8 * 1024 * 1024); // 8 MiB max size for single request upload

BlobUploadFromFileOptions options = new BlobUploadFromFileOptions("<localFilePath>");
options.setParallelTransferOptions(parallelTransferOptions);

Response<BlockBlobItem> blockBlob = blobClient.uploadFromFileWithResponse(options, null, null);

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

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

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

إشعار

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

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

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

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

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

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

يمكن ضبط القيم التالية للتنزيلات استنادا إلى احتياجات تطبيقك:

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

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

تأكد من أن لديك التوجيه التالي import لاستخدامه ParallelTransferOptions للتنزيل:

import com.azure.storage.common.*;

يوضح مثال التعليمات البرمجية التالي كيفية تعيين قيم ParallelTransferOptions وتضمين الخيارات كجزء من مثيل BlobDownloadToFileOptions .

ParallelTransferOptions parallelTransferOptions = new ParallelTransferOptions()
        .setBlockSizeLong((long) (4 * 1024 * 1024)) // 4 MiB block size
        .setMaxConcurrency(2);

BlobDownloadToFileOptions options = new BlobDownloadToFileOptions("<localFilePath>");
options.setParallelTransferOptions(parallelTransferOptions);

blobClient.downloadToFileWithResponse(options, null, null);

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

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

الخطوات التالية