مشاركة عبر


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

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

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

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

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

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

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

يمكن تكوين الخصائص التالية وضبطها استنادا إلى احتياجات تطبيقك:

  • BlockSize: الحد الأقصى لطول النقل بالبايت عند تحميل كائن ثنائي كبير الحجم للكتلة في مجموعات. الافتراضيات إلى 4 ميغابايت.
  • Concurrency: الحد الأقصى لعدد التحويلات الفرعية التي يمكن استخدامها بالتوازي. الإعدادات الافتراضية إلى 5.

تتوفر خيارات التكوين هذه عند التحميل باستخدام الطرق التالية:

لا يدعم أسلوب Upload هذه الخيارات، ويحمل البيانات في طلب واحد.

إشعار

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

حجم الحظر

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

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

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

يوضح مثال التعليمات البرمجية التالي كيفية تعريف القيم لمثيل UploadFileOptions وتمرير خيارات التكوين هذه كمعلمة إلى UploadFile.

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

func uploadBlobWithTransferOptions(client *azblob.Client, containerName string, blobName string) {
    // Open the file for reading
    file, err := os.OpenFile("path/to/sample/file", os.O_RDONLY, 0)
    handleError(err)

    defer file.Close()

    // Upload the data to a block blob with transfer options
    _, err = client.UploadFile(context.TODO(), containerName, blobName, file,
        &azblob.UploadFileOptions{
            BlockSize:   int64(8 * 1024 * 1024), // 8 MiB
            Concurrency: uint16(2),
        })
    handleError(err)
}

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

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

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

يمكنك معرفة كيفية معالجة مكتبة العميل للتخزين المؤقت في الأقسام التالية.

إشعار

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

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

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

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

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

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

يمكن ضبط الخصائص التالية بناء على احتياجات تطبيقك:

  • BlockSize: الحد الأقصى لحجم المجموعة المستخدمة لتنزيل كائن ثنائي كبير الحجم. الافتراضيات إلى 4 ميغابايت.
  • Concurrency: الحد الأقصى لعدد التحويلات الفرعية التي يمكن استخدامها بالتوازي. الإعدادات الافتراضية إلى 5.

تتوفر هذه الخيارات عند التنزيل باستخدام الطرق التالية:

لا يدعم أسلوب DownloadStream هذه الخيارات، وينزل البيانات في طلب واحد.

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

يوضح مثال التعليمات البرمجية التالي كيفية تعريف القيم لمثيل DownloadFileOptions وتمرير خيارات التكوين هذه كمعلمة إلى DownloadFile.

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

func downloadBlobTransferOptions(client *azblob.Client, containerName string, blobName string) {
    // Create or open a local file where we can download the blob
	file, err := os.Create("path/to/sample/file")
	handleError(err)

	// Download the blob to the local file
	_, err = client.DownloadFile(context.TODO(), containerName, blobName, file,
		&azblob.DownloadFileOptions{
			BlockSize:   int64(4 * 1024 * 1024), // 4 MiB
			Concurrency: uint16(2),
		})
	handleError(err)
}

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

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