تخزين أرشيف صور لموقع في تخزين Azure BLOB

تصف المقالة تجربة تنظيم تخزين الميزانية لأرشيف الصور لموقع يحتوي على ملايين الإعلانات.



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

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

يتم تحميل الصور التي يراها الزوار في اختيار الإعلانات أو في بطاقة الكائن في الواقع من موارد الجهات الخارجية.

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

يبلغ حجم البيانات التي سأخزنها في السحابة حوالي 3-4 تيرابايت. بالإضافة إلى مكسب يومي من عدة غيغابايت. بالنظر إلى أن هذا الابتكار لن يجلب المال بشكل مباشر ، فإنه يمكن أن يؤثر بشكل غير مباشر فقط على عملية اتخاذ القرار من قبل الزائر ، فالميزانية التي أردت أن أقابل بها ميزانية متواضعة للغاية هي 1000-2000 ص. شهريا. سيكون الأمر رائعًا على الإطلاق مجانًا ، لكنني لم أجد مثل هذه الفرصة.

أزور


لقد بحثت بطريقة ما على الفور تجاه Azure لأنني أعمل على .net ، وغالبًا ما أرى مقالات إعلانية جميلة حول هذا الموضوع. بالإضافة إلى ذلك ، لا بد لي من استخدام هذه المنصة لوظيفتي الرئيسية ، ولكن هناك قدراتي محدودة بمتطلبات العمل ورغبات الإدارة.

يوفر Azure تخزين BLOB مع ثلاثة مستويات تخزين: ساخن ، بارد ، وأرشيف. تختلف الأسعار على جميع المستويات. بشكل عام ، كلما كانت القراءة / الكتابة أكثر تكلفة كلما كانت رسوم التخزين الشهرية أغلى ، والعكس صحيح. على Hot - من المربح أن تكتب / تقرأ وتحذف الكثير ، ولكن تكلفة تخزينها لفترة طويلة. الأرشيف سهل التخزين ولكنه مكلف للقراءة / الكتابة. أيضًا ، على مستوى الأرشيف والبارد ، هناك رسوم للحذف المبكر - وهذا يعني أنه إذا قمت بحذف (أو نقل إلى مستوى آخر) كائن قبل فترة معينة ، فسيتم محاسبتي على هذه الفترة بأكملها. بالنسبة لمستوى الأرشيف ، هذا هو 180 يومًا ، للبرد - 30.

الأسعار


تبلغ تكلفة التخزين 0.0023 دولارًا لكل غيغابايت شهريًا على مستوى الأرشيف ، و 0.01 دولارًا للبرد و 0.0196 دولارًا للساعة. بالمعدل الحالي ، هذا هو ما يقرب من 0.15 و 0.65 و 1.28 روبل ، على التوالي.

قارنت التكلفة مع Amazon و Google ، اتضح أن Azure أرخص.

أزورأمازون (S3)جوجل
حار0.0196 دولار0.024 دولار0.026 دولار
رائع0.01 دولار0.01 دولار0.01 دولار
الأرشيف0.0023 دولار0.0045 دولار0.007 دولار


بالإضافة إلى تكلفة التخزين ، من الضروري مراعاة تكلفة العمليات - فهي أيضًا مختلفة على جميع المستويات. الأسعار لـ 10000 معاملة.

حار
قراءة: 0.0043 دولار ، كتابة: 0.054 دولار

رائع
قراءة: 0.01 دولار ، كتابة: 0.10 دولار

الأرشيف
قراءة: 6 دولارات ، كتابة: 0.12 دولارًا

منطق العمل



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

يمكن وصف عملية معالجة الصور في الخطوات التالية:

  1. بمجرد اختفاء الإعلان من ملف استيراد الشريك ، أي توقف الشريك عن نشره ، ويتم تكوين إدخال في قائمة انتظار الأولوية ، حيث تكون الأولوية هي عدد المشاهدات من قبل الزوار - كلما زادت المشاهدات ، زادت احتمالية أن يتم أرشفة الكائن.
  2. عند معالجة سجل من قائمة الانتظار ، يتم تكوين كائن BLOB يحتوي على صور مخفضة (حتى 800x600) للإعلان. يرجع أيضًا استخدام العناصر المركبة بدلاً من الصور الفوتوغرافية المباشرة إلى الوفورات - بدلاً من 8 عمليات تسجيل (في المتوسط ​​8 صور لكل كائن) ، يتم تنفيذ واحدة ، وتكلف كل عملية أموالًا.
  3. يتم تحميل BLOB أولاً في Hot ، ثم يتم نقله على الفور إلى الأرشيف. لا توجد إمكانية للكتابة مباشرة إلى الأرشيف ، وبما أن Cool لديها رسوم للحذف المبكر ، فمن الأرخص استخدام Hot كنقطة عبور.
  4. أرشيف BLOB طالما أن الروابط إلى الصور الأصلية نشطة (يتم عرض الصور حتى الآن بواسطة الروابط من الشركاء).
  5. يتم التحقق من الروابط للحصول على الوظائف عندما يزور الزائر بطاقة الكائن - إذا ذهبوا إليها ، فإن الكائن يكون شائعًا ومن المنطقي استعادة الصور من الأرشيف.
  6. إذا ماتت الروابط إلى الصور الأصلية ، أتحقق مما إذا كانت هناك نسخة من الأرشيف ، وإذا كان الأمر كذلك ، فأرسل طلبًا للاستعادة من الأرشيف إلى Cool (قد يستغرق الأمر ما يصل إلى 15 ساعة لاستعادة نقطة من الأرشيف - وهذا يسمى الإماهة من Microsoft).
  7. بمجرد استعادة BLOB من الأرشيف ، يتم نسخه إلى التخزين المحلي وتقسيمه إلى صور عادية. التخزين المحلي هو محرك الأقراص الثابت لخادمي.
  8. الصور الموجودة على بطاقة الإعلان معطاة بالفعل من التخزين المحلي.
  9. يتم تخزين الصور في التخزين المحلي لعدة أيام. إذا كانت هناك عمليات مسح خلال هذا الوقت ، يتم تمديد فترة التخزين المحلية. إذا لم تكن هناك مشاهدات ، يتم حذف الصور من التخزين المحلي ، ولكنها تظل في مستوى Cool في Azure.
  10. من Cool إلى Archive يتم نسخها إذا لم يكن هناك مشاهدات لمدة شهرين - من الواضح أن الكائن ليس شائعًا ، وبالتالي ، لا معنى للدفع الزائد للتخزين في Cool.


الإطلاق الأول


عندما تمت كتابة العملية واختبارها ، حان وقت التشغيل التجريبي ، وكانت هناك مشاكل متوقعة. في قائمة الانتظار في ذلك الوقت كان هناك حوالي 10 مليون كائن ، قررت أن أبدأ الترحيل من 30000 كائن في اليوم. قم بإعداد رسومات جميلة على لوحة القيادة وبدأت في المراقبة. في الإحصائيات ، رأيت "غارات" غريبة مع طلبات GetBlobProperties. تحدث بفاصل زمني متساوٍ تقريبًا مدته ساعة واحدة ، وتبدأ دائمًا بعد ساعة ونصف تقريبًا من بداية الترحيل ، وتستمر لبعض الوقت بعد اكتمالها.



كان عدد هذه الطلبات أكبر من أن يتم تجاهلها. نظرت إلى السجلات ورأيت أن هذه الطلبات لا تأتي من خادمي بل من عناوين IP أجنبية. لم أرد أن أدفع لهم على الإطلاق.

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

هناك فارق بسيط مثير للاهتمام هو أن سؤالي حول Stackoverflow تم الإجابة عليه لا يشرح الأسباب ، ولكن فقط يؤكد أنني سأدفع مقابل هذه الطلبات ، لكن الشخص الذي أعطى الإجابة طلب مني بإصرار وضع علامة عليها على أنها صحيحة. كما ألمح إلي أنه لم يكن (في الدعم) مرحبًا بهم لنشر الخلل في منتجاتهم الخاصة. أخبرته أنني لن أفعل ذلك حتى يكتب الحقيقة. يمكنني كتابة هذا بنفسي ، لكنني اعتقدت أن موظفي الدعم الفني ربما قاموا بقياس عدد الإجابات المؤكدة ، لذلك طلبت منه أن يكتب السبب الحقيقي وفي هذه الحالة أضع علامة على إجابته على أنها صحيحة. بعد بعض التردد ، وافق على تعليقه واستكمله بتقرير خطأ. بشكل عام ، أحببت كيف يعمل الدعم الفني - حتى تم نقلي إلى فتاة روسية لا تزال تبقيني على علم بالتغييرات في هذه المشكلة.

إن حقيقة أن الخطأ تم التعرف عليه لا يرضي إلا أخلاقيا ، لكنني أردت تشغيل الآلية ، وفي الوقت نفسه لم أدفع المال للطلبات اليسرى. خاصة بالنظر إلى أنني عادة ما أكون مرتبكًا لتقليل عدد الطلبات وبالتالي التكلفة.

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

الخلاصة


تكلفة 30000 قطعة يوميا لا تزال 900 ص. في الشهر - وهذا مقبول تمامًا. معظم النفقات هي عمليات الكتابة. لذلك عندما تتم معالجة قائمة الانتظار بالكامل وتبدأ مرحلة العمل المخطط لها ، سيكون من الواضح التكلفة الحقيقية لمثل هذا التخزين. ولكن وفقًا لحساباتي ، سيحدث هذا في غضون عام تقريبًا.

عندما يكون هناك إصدار في Azure Blob-storage ، سأضيف هنا ما إذا تمكنت من الحصول على تعويض. فيما يتعلق بالمصروفات الشهرية ، فإن هذا يمثل حوالي 10٪ من التكلفة.

Source: https://habr.com/ru/post/ar424841/


All Articles