إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
وزِّع المحتوى الثابت إلى خدمة التخزين المستندة إلى السحابة التي يمكنها تسليمها مباشرة إلى العميل. يمكن أن يقلل هذا من الحاجة إلى مثيلات حساب مكلفة محتملة.
السياق والمشكلة
تتضمن تطبيقات الويب عادة بعض عناصر المحتوى الثابت. قد يتضمن هذا المحتوى الثابت صفحات HTML وموارد أخرى مثل الصور والمستندات المتوفرة للعميل، إما كجزء من صفحة HTML (مثل الصور المضمنة وأوراق الأنماط وملفات JavaScript من جانب العميل) أو كتنزيلات منفصلة (مثل مستندات PDF).
على الرغم من تحسين خوادم الويب للعرض الديناميكي والتخزين المؤقت للإخراج، إلا أنه لا يزال يتعين عليها معالجة الطلبات لتنزيل المحتوى الثابت. يستهلك هذا دورات المعالجة التي يمكن استخدامها بشكل أفضل في كثير من الأحيان.
حل
في معظم بيئات الاستضافة السحابية، يمكنك وضع بعض موارد التطبيق والصفحات الثابتة في خدمة التخزين. يمكن لخدمة التخزين تقديم طلبات لهذه الموارد، ما يقلل الحمل على موارد الحساب التي تتعامل مع طلبات الويب الأخرى. عادة ما تكون تكلفة التخزين المستضاف على السحابة أقل بكثير من مثيلات الحساب.
عند استضافة بعض أجزاء تطبيق في خدمة تخزين، ترتبط الاعتبارات الرئيسية بنشر التطبيق وتأمين الموارد التي لا يقصد أن تكون متاحة للمستخدمين المجهولين.
المسائل والاعتبارات
راع النقاط التالية عند تحديد كيفية تنفيذ هذا النمط:
يجب أن تعرض خدمة التخزين المستضافة نقطة نهاية HTTP التي يمكن للمستخدمين الوصول إليها لتنزيل الموارد الثابتة. تدعم بعض خدمات التخزين أيضًا HTTPS، لذلك من الممكن استضافة الموارد في خدمات التخزين التي تتطلب SSL.
للحصول على أقصى أداء وتوافر، ضع في اعتبارك استخدام شبكة تسليم المحتوى (CDN) لتخزين محتويات حاوية التخزين مؤقتًا في مراكز بيانات متعددة في جميع أنحاء العالم. ومع ذلك، من المحتمل أن تضطر إلى الدفع مقابل استخدام CDN.
غالبا ما يتم نسخ حسابات التخزين جغرافيًا بشكل افتراضي لتوفير المرونة مقابل الأحداث التي قد تؤثر على مركز البيانات. وهذا يعني أن عنوان IP قد يتغير، ولكن عنوان الويب سيظل كما هو.
عندما يكون بعض المحتوى موجودًا في حساب تخزين ومحتوى آخر في مثيل حساب مستضاف، يصبح نشر التطبيق وتحديثه أكثر صعوبة. قد تحتاج إلى إجراء توزيعات منفصلة، وإصدار التطبيق والمحتوى لإدارته بسهولة أكبر - خاصة عندما يتضمن المحتوى الثابت ملفات البرنامج النصي أو مكونات واجهة المستخدم. ومع ذلك، إذا كان يجب تحديث الموارد الثابتة فقط، يمكن ببساطة تحميلها إلى حساب التخزين دون الحاجة إلى إعادة نشر حزمة التطبيق.
قد لا تدعم خدمات التخزين استخدام أسماء المجالات المخصصة. في هذه الحالة، من الضروري تحديد عنوان URL الكامل للموارد في الارتباطات لأنها ستكون في مجال مختلف عن المحتوى الذي تم إنشاؤه ديناميكيا الذي يحتوي على الارتباطات.
يجب تكوين حاويات التخزين للوصول للقراءة فقط، ولكن من الضروري التأكد من عدم تكوينها للوصول إلى الكتابة العامة لمنع المستخدمين من تحميل المحتوى.
ضع في اعتبارك استخدام مفتاح خادم أو رمز مميز للتحكم في الوصول إلى الموارد التي لا ينبغي أن تكون متوفرة بشكل مجهول. راجع نمط مفتاح Valet لمزيد من المعلومات.
موعد استخدام النمط
هذا النمط مفيد لـ:
تقليل تكلفة استضافة مواقع الويب والتطبيقات التي تحتوي على بعض الموارد الثابتة.
تقليل تكلفة استضافة مواقع الويب التي تتكون من محتوى وموارد ثابتة فقط. اعتمادًا على إمكانات نظام التخزين الخاص بموفر الاستضافة، قد يكون من الممكن استضافة موقع ويب ثابت بالكامل في حساب تخزين.
تعريض الموارد الثابتة والمحتوى للتطبيقات قيد التشغيل في بيئات استضافة أخرى أو خوادم داخلية.
تحديد موقع المحتوى في أكثر من منطقة جغرافية واحدة باستخدام شبكة تسليم محتوى تخزن محتويات حساب التخزين مؤقتًا في مراكز بيانات متعددة حول العالم.
مراقبة التكاليف واستخدام النطاق الترددي. يسمح استخدام حساب تخزين منفصل لبعض المحتوى الثابت أو كلها بفصل التكاليف بسهولة أكبر عن تكاليف الاستضافة ووقت التشغيل.
قد لا يكون هذا النمط مفيدا في الحالات التالية:
يحتاج التطبيق إلى إجراء بعض المعالجة على المحتوى الثابت قبل تسليمه إلى العميل. على سبيل المثال، قد يكون من الضروري إضافة طابع زمني إلى مستند.
حجم المحتوى الثابت صغير جدا. يمكن أن تفوق النفقات العامة لاسترداد هذا المحتوى من تخزين منفصل فائدة التكلفة لفصله عن مورد الحساب.
تصميم حمل العمل
يجب على المهندس المعماري تقييم كيفية استخدام نمط استضافة المحتوى الثابت في تصميم حمل العمل الخاص بهم لمعالجة الأهداف والمبادئ التي تغطيها ركائز Azure Well-Architected Framework. على سبيل المثال:
| الركيزة | كيف يدعم هذا النمط أهداف الركيزة |
|---|---|
| يركز تحسين التكلفة على الحفاظ على عائد حمل العمل على الاستثمار وتحسينه. | عادة ما تكون مضيفات التطبيقات الديناميكية أكثر تكلفة من المضيفين الثابتين لأن المضيفين الديناميكيين يمكنهم تشغيل منطق العمل المشفرة. استخدام نظام أساسي للتطبيق لتقديم محتوى ثابت ليس فعالا من حيث التكلفة. - تكاليف تدفق CO:09 - تكاليف بيانات CO:10 |
| تساعد كفاءة الأداء حمل العمل الخاص بك على تلبية الطلبات بكفاءة من خلال التحسينات في التحجيم والبيانات والرمز. | يساعد إلغاء تحميل المسؤولية إلى مضيف خارجي على التخفيف من الازدحام ويمكنك من استخدام النظام الأساسي للتطبيق الخاص بك فقط لتقديم منطق العمل. - PE:07 تعليمة برمجية للبنية الأساسية |
كما هو الحال مع أي قرار تصميم، ضع في اعتبارك أي مفاضلات ضد أهداف الركائز الأخرى التي يمكن إدخالها مع هذا النمط.
مثال
يدعم Azure Storage تقديم محتوى ثابت مباشرة من حاوية تخزين. يتم تقديم الملفات من خلال طلبات الوصول المجهولة. بشكل افتراضي، تحتوي الملفات على عنوان ويب في مجال فرعي من core.windows.net، مثل https://contoso.z4.web.core.windows.net/image.png. يمكنك تكوين اسم مجال مخصص، واستخدام Azure CDN للوصول إلى الملفات عبر HTTPS. لمعرفة المزيد، راجع استضافة مواقع الويب الثابتة في Azure Storage.

توفر استضافة موقع الويب الثابت الملفات للوصول المجهول. إذا كنت بحاجة إلى التحكم في من يمكنه الوصول إلى الملفات، يمكنك تخزين الملفات في تخزين Azure blob ثم إنشاء توقيعات وصول مشتركة محدودة للوقت والنطاق لتقييد الوصول. يجب أن تستخدم توقيعات الوصول التي تم إنشاؤها الرموز المميزة المفوضة لمستخدم Microsoft Entra وأن تكون قصيرة الأجل.
يجب أن تحدد الارتباطات الموجودة في الصفحات التي تم تسليمها إلى العميل عنوان URL الكامل للمورد. إذا كان المورد محميًا بمفتاح خادم، مثل توقيع وصول مشترك، فيجب تضمين هذا التوقيع في عنوان الويب.
يتوفر نموذج تطبيق يوضح استخدام التخزين الخارجي للموارد الثابتة على GitHub. يستخدم هذا النموذج ملف تكوين لتحديد عنوان URL لحساب التخزين والحاوية التي تحتوي على المحتوى الثابت العام.
تعرض الفئة StaticContentUrlHtmlHelper الموجودة في الملف StaticContentUrlHtmlHelper.cs أسلوبًا يسمى StaticContentUrl ينشئ عنوان ويب يحتوي على المسار إلى حساب التخزين على السحابة إذا كان عنوان الويب الذي تم تمريره إليه يبدأ بحرف مسار الجذر ASP.NET (~).
public static class StaticContentUrlHtmlHelper
{
public static string StaticContentUrl(this HtmlHelper helper, string contentPath)
{
if (contentPath.StartsWith("~"))
{
contentPath = contentPath.Substring(1);
}
contentPath = string.Format("{0}/{1}", Settings.StaticContentBaseUrl.TrimEnd('/'),
contentPath.TrimStart('/'));
var url = new UrlHelper(helper.ViewContext.RequestContext);
return url.Content(contentPath);
}
}
يحتوي الملف Index.cshtml في المجلد Views\Home على عنصر صورة يستخدم الأسلوب StaticContentUrl لإنشاء عنوان ويب للسمة src الخاصة به.
<img src="@Html.StaticContentUrl("~/media/orderedList1.png")" alt="Test Image" />
الخطوات التالية
- عينة استضافة المحتوى الثابت. نموذج التطبيق الذي يوضح هذا النمط.
الموارد ذات الصلة
- نمط مفتاح الخادم. إذا لم يكن من المفترض أن تكون الموارد الهدف متاحة للمستخدمين المجهولين، فاستخدم هذا النمط لتقييد الوصول المباشر.
- تطبيق ويب بلا خادم على Azure. تصميم مرجعي يستخدم استضافة موقع ويب ثابت مع Azure Functions لتنفيذ تطبيق ويب بلا خادم.