نمط مخزن التكوين الخارجي

Azure App Configuration
Azure Blob Storage

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

السياق والمشكلة

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

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

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

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

حل

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

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

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

نظرة عامة على نمط مخزن التكوين الخارجي مع ذاكرة التخزين المؤقت المحلية الاختيارية

المسائل والاعتبارات

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

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

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

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

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

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

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

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

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

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

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

موعد استخدام النمط

هذا النمط مفيد لـ:

  • إعدادات التكوين التي تتم مشاركتها بين العديد من التطبيقات وطبعات التطبيق، أو حيث يجب فرض تكوين قياسي عبر العديد من التطبيقات ومثيلات التطبيق.

  • نظام تكوين قياسي لا يدعم جميع إعدادات التكوين المطلوبة، مثل تخزين الصور أو أنواع البيانات المعقدة.

  • كمخزن مكمل لبعض إعدادات التطبيقات، ربما يسمح للتطبيقات بتجاوز بعض أو كل الإعدادات المخزنة مركزياً.

  • كوسيلة لتبسيط إدارة التطبيقات المتعددة، واختيارياً لمراقبة استخدام إعدادات التكوين عن طريق تسجيل بعض أو كل أنواع الوصول إلى مخزن التكوين.

تصميم حمل العمل

يجب على المهندس المعماري تقييم كيفية استخدام نمط مخزن التكوين الخارجي في تصميم حمل العمل الخاص به لمعالجة الأهداف والمبادئ التي تغطيها ركائز Azure Well-Architected Framework. على سبيل المثال:

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

- تصميم OE:10 Automation
- OE:11 ممارسات النشر الآمنة

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

مثال مخزن دعم مخصص

في تطبيق مستضاف على Microsoft Azure، يكون أحد الخيارات الممكنة لتخزين معلومات التكوين خارجياً هو استخدام Azure Storage. هذا مرن، ويقدم أداءً عالياً، ويتم تكراره ثلاث مرات مع تجاوز الفشل التلقائي لتقديم إتاحة عالية. يوفر تخزين Azure Table مخزن مفتاح / قيمة مع القدرة على استخدام مخطط مرن للقيم. يوفر موقع تخزين Azure Blob مخزناً هرمياً مستنداً إلى حاوية يمكنه الاحتفاظ بأي نوع من البيانات في blobs ذات أسماء فردية.

عند تنفيذ هذا النمط، ستكون مسؤولاً عن تجريد موقع تخزين Azure Blob وكشف إعداداتك داخل تطبيقاتك، بما في ذلك التحقق من وجود تحديثات في وقت التشغيل وتحديد كيفية الرد عليها.

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

public interface ISettingsStore
{
    Task<ETag> GetVersionAsync();
    Task<Dictionary<string, string>> FindAllAsync();
}

تحدد هذه الواجهة طرقاً لاسترداد إعدادات التكوين الموجودة في مخزن التكوين وتتضمن رقم إصدار يمكن استخدامه لاكتشاف ما إذا كان قد تم تعديل أي من إعدادات التكوين مؤخراً. يمكن لفئة BlobSettingsStore استخدام خاصية ETag في blob لتنفيذ الإصدار. يتم تحديث الخاصية ETag تلقائياً في كل مرة تتم فيها كتابة blob.

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

يمكن أن توفر فئة ExternalConfigurationManager بعد ذلك غلافاً حول مثيل BlobSettingsStore. يمكن للتطبيق استخدام هذه الفئة لاسترداد معلومات التكوين. قد تستخدم هذه الفئة شيئاً مثل Microsoft Reactive Extensions لنشر أي تغييرات تم إجراؤها على التكوين أثناء تشغيل النظام. سيكون مسؤولاً أيضاً عن تنفيذ نمط ذاكرة التخزين المؤقت للإعدادات لتوفير مرونة وأداء إضافيين.

قد يبدو الاستخدام كالتالي.

static void Main(string[] args)
{
    // Start monitoring configuration changes.
    ExternalConfiguration.Instance.StartMonitor();

    // Get a setting.
    var setting = ExternalConfiguration.Instance.GetAppSetting("someSettingKey");
    …
}

استخدام Azure App Configuration

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

مكتبات العميل

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

وقت التشغيل مكتبة العميل ملاحظات تشغيل سريع
.NET Microsoft.Extensions.Configuration.AzureAppConfiguration مزود لـ Microsoft.Extensions.Configuration التشغيل السريع
ASP.NET Microsoft.Azure.AppConfiguration.AspNetCore مزود لـ Microsoft.Extensions.Configuration التشغيل السريع
Azure Functions في .NET Microsoft.Extensions.Configuration.AzureAppConfiguration تُستخدم مع ملحقات وظيفة Azure لدعم التكوين في Startup.cs التشغيل السريع
.NET Framework Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration منشئ التكوين لـ System.Configuration التشغيل السريع
Java Spring com.azure.spring > azure-spring-cloud-appconfiguration-config يدعم الوصول إلى Spring Framework عبر ConfigurationProperties التشغيل السريع
Python azure.appconfiguration يوفر AzureAppConfigurationClient التشغيل السريع
JavaScript/Node.js @azure/app-configuration يوفر AppConfigurationClient التشغيل السريع

بالإضافة إلى مكتبات العميل، هناك أيضا Azure App Configuration Sync GitHub Action وAzure App Configuration Pull وAzure App Configuration Push Azure DevOps tasks لدمج خطوات التكوين في عملية الإنشاء الخاصة بك.

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