خفف العبء عن ووردبريس: أسند الوسائط إلى S3 والـ Edge.
جعفر أبازيد
يقوم ووردبريس بقدرٍ مدهشٍ من العمل مع كلّ رفع صورة: يولّد عند الرفع مجموعة من النسخ بمقاساتٍ مختلفة (thumbnail وmedium وlarge وغيرها)، ويُخزّنها كلّها، ومعظمها لا نحتاجه أبداً. النظام السابق الذي استبدلناه لمؤسّسةٍ إعلامية كان يولّد أكثر من عشرين نسخةً لكلّ صورة ويُخزّنها جميعًا. قِس ذلك على أرشيفٍ من مئات آلاف الصور، فإذا أنت تدفع تكاليف إضافية للتخزين والمعالجة، تكاليف لعملٍ لن يطلبه أحد.
هذه نسخةٌ موجزة بالعربية؛ والتفصيل الكامل، مع الكود والمخطّطات، في النسخة الإنجليزية.
الفكرة باختصار
نُسند العمل الصعب إلى الطرفين. بداية، يرفع المتصفّح الملفات الكبيرة مباشرةً إلى S3. وعند الطلب، تولّد الـ Edge المقاسات المطلوبة فقط. ويعود ووردبريس إلى ما يُتقنه: التحرير، لا معالجة الصور.
في S3 نحتفظ بنسختين فقط لكلّ صورة:
- نسخةٌ أصلية كاملة الدقّة في تخزينٍ بارد (S3 Glacier Instant Retrieval)، أرشيفٌ طويل الأمد نادراً ما نحتاجه.
- نسخة عملية (working master) محسّنة للويب في تخزينٍ ساخن (S3 Standard): مولّدة على أكبر مقاسٍ يحتاجه الموقع (لا 4K)، وبصيغةٍ مثالية (WebP للصور، WebM للفيديو)، مع إبقاء الجودة شبه كاملة lossless، فتُشتقّ منها كلّ المقاسات المطلوبة.
وهذه المقاسات المولّدة فلا تُخزَّن في S3 أبدًا: تولّدها خدمة AWS Serverless Image Handler عند الطلب وتبقى في ذاكرة الـ CDN. ولأنّ الـ Edge يولّد أيّ مقاسٍ عند الطلب، نُوقف توليد الصور المصغّرة في ووردبريس تمامًا، فنوفّر معالجةً وتخزينًا لنسخٍ لا يطلبها أحد.
والفيديو يلعب بقواعد معاكسة: يُرفَع من المتصفّح مباشرةً إلى S3 عبر رابطٍ موقَّع (presigned) دون أن يمرّ بالخادم، ومن هناك يُوزَّع مباشرةً من S3 إلى YouTube وDailymotion وVimeo دون الحاجة لرفعه مرة ثانية. وعند تشغيله على الموقع، نولّد الفيديو مرّةً واحدة عبر AWS Elemental MediaConvert إلى صيغ HLS ونُخزّنها، لأنّ ترميز الفيديو مكلِّف فنقوم به مرّةً واحدة ونحتفظ بالنتيجة، على عكس الصور تمامًا.
القصّة الكاملة
كلّ التفاصيل، أسماء الملفات المرفوعة المولّدة (بلا أحرف عربية في المفتاح)، وصيغ WebP وWebM، وطبقات تخزين S3 وسياسات دورة الحياة lifecycle policy، والكود، والمخطّطات، في النسخة الإنجليزية الكاملة:
← Make WordPress do less: offloading media to S3 and the edge
نبني ونُشغّل هذا النوع من البُنى على ووردبريس وAWS. وإن كنت تُعاني من مكتبة وسائط ثقيلة على ووردبريس، لنتحدّث.