أفضل الممارسات لبناء تطبيق مع Azure Database لـ MySQL

ينطبق على:قاعدة بيانات Azure لـ MySQL - خادم فردي قاعدة بيانات Azure لـ MySQL - خادم مرن

هام

قاعدة بيانات Azure لخادم MySQL الفردي على مسار الإيقاف. نوصي بشدة بالترقية إلى قاعدة بيانات Azure لخادم MySQL المرن. لمزيد من المعلومات حول الترحيل إلى خادم Azure Database for MySQL المرن، راجع ما الذي يحدث لقاعدة بيانات Azure لخادم MySQL الفردي؟

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

تكوين مَوارد التطبيق وقاعدة البيانات

حِفظ التطبيق وقاعدة البيانات في نفس المنطقة

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

حافظ على أمان خادم MySQL

كوّن خادم MySQL ليكون آمنا ولا يمكن الوصول إليه بشكل عام. استخدم أحد هذه الخيارات لتأمين الخادم الخاص بك:

للأمان، يجب عليك دائما الاتصال بخادم MySQL عبر SSL وتهيئة خادم MySQL وتطبيقك لاستخدام TLS 1.2. راجع كيفية تكوين SSL/TLS.

قم باستخدام الشبكات المتقدمة مع AKS

عند تمكين الشبكات المتسارعة على جهاز ظاهري، يكون هناك زمن انتقال أقل، وتشويه منخفض، وانخفاض استخدام وحدة المعالجة المركزية على الجهاز الظاهري. لمعرفة المزيد، راجع أفضل الممارسات لخدمة Azure Kubernetes وقاعدة بيانات Azure ل MySQL.

اضبط معلمات الخادم

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

لحساب أكبر حجم ممكن لـ tmp_table_size و max_heap_table_size، استخدم الصيغة التالية:

(total memory - (base memory + (sum of per-connection memory * # of connections)) / # of connections

إشعار

يُشير إجمالي الذاكرة إلى إجمالي مقدار الذاكرة التي يمتلكها الخادم عبر vCores المتوفرة. على سبيل المثال، في قاعدة بيانات Azure للأغراض العامة ثنائية vCore لخادم MySQL، سيكون إجمالي الذاكرة 5 GB* 2. يُمكنك العثور على مزيد من التفاصيل حول الذاكرة لكل مستوى في وثائق مستوى التسعير.

تشير الذاكرة الأساسية إلى متغيرات الذاكرة، مثل query_cache_size و innodb_buffer_pool_size، التي سيقوم MySQL بتهيئةها وتخصيصها عند بدء تشغيل الخادم. الذاكرة لكل اتصال، مثل sort_buffer_size و join_buffer_size، هي الذاكرة المخصصة فقط عندما يحتاجها الاستعلام.

إنشاء مستخدمين غير مسؤولين

إنشاء مستخدمين غير مسؤولين لكل قاعدة بيانات. عادة ما يتم تعريف أسماء المُستخدمين على أنها أسماء قاعدة البيانات.

إعادة تعيين كلمة المرور

يمكنك إعادة تعيين كلمة المرور الخاصة بك لخادم MySQL باستخدام مدخل Microsoft Azure.

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

الأداء والمرونة

فيما يلي بعض الأدوات والممارسات للمساعدة في تصحيح مشكلات أداء التطبيق.

قم بتمكين سجلات الاستعلام البطيئة لتحديد مشكلات الأداء

يمكنك تمكين سجلات الاستعلام بطيئةوسجلات التدقيق على الخادم الخاص بك. يُمكن أن يساعد تحليل سجلات الاستعلام البطيئة في تحديد اختناقات الأداء لاستكشاف الأخطاء وإصلاحها.

تتوفر سجلات التدقيق أيضا من خلال سجلات تشخيص Azure في سجلات Azure Monitor ومراكز الأحداث وحسابات التخزين. راجع كيفية استكشاف مُشكلات أداء الاستعلام وإصلاحها.

استخدم تجميع الاتصال

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

يمكنك استخدام تجمع اتصال ProxySQL لإدارة الاتصالات بكفاءة. يمكن أن يؤدي استخدام تجمع الاتصال إلى تقليل الاتصالات الخاملة وإعادة استخدام الاتصالات الموجودة، مما يساعد على تجنب المشكلات. راجع كيفية إعداد ProxySQL لمَعرفة المزيد.

منطق إعادة المحاولة لمُعالجة الأخطاء المؤقتة

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

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

تمكين النسخ المتماثل للقراءة للتخفيف من حالات تجاوز الفشل

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

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

توزيع قاعدة البيانات

تكوين قاعدة بيانات Azure لمُهمة MySQL في البنية الأساسية لبرنامج ربط العمليات التجارية لتوزيع CI/CD

في بعض الأحيان، تحتاج إلى نشر التغييرات على قاعدة البيانات الخاصة بك. في مثل هذه الحالات، يمكنك استخدام التكامل المستمر (CI) والتسليم المستمر (CD) من خلال Azure Pipelines واستخدام مهمة لخادم MySQL لتحديث قاعدة البيانات عن طريق تشغيل برنامج نصي مُخصص مقابلها.

استخدام عملية فعالة لتوزيع قاعدة البيانات اليدوية

أثناء التوزيع اليدوي لقاعدة البيانات، اتبع هذه الخطوات لتقليل وقت التعطل أو تقليل مخاطر فشل التوزيع:

  1. إنشاء نُسخة من قاعدة بيانات إنتاج على قاعدة بيانات جديدة باستخدام mysqldump أو MySQL Workbench.
  2. تحديث قاعدة البيانات الجديدة مع تغييرات المخطط الجديد أو التحديثات المطلوبة لقاعدة البيانات الخاصة بك.
  3. ضَع قاعدة بيانات الإنتاج في حالة للقراءة فقط. سيكون من الأفضل إذا لم يكن لديك عمليات كتابة على قاعدة بيانات الإنتاج حتى اكتمال النشر.
  4. اختبر التطبيق الخاص بك مع قاعدة البيانات المحدثة حديثا من الخطوة 1.
  5. انشر تغييرات التطبيق وتأكد من أن التطبيق يستخدم الآن قاعدة البيانات الجديدة مع آخر التحديثات.
  6. احتفظ بقاعدة بيانات الإنتاج القديمة للعودة إلى الحالة السابقة للتغييرات. يمكنك بعد ذلك تقييم لحذف قاعدة بيانات الإنتاج القديمة أو تصديرها على Azure Storage إذا لزم الأمر.

إشعار

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

تأكد من أن التعليمات البرمجية للتطبيق الخاص بك تعالج أيضا أي طلبات فاشلة.

استخدم مقاييس MySQL الأصلية لمَعرفة ما إذا كان حمل العمل يتجاوز أحجام الجداول المؤقتة في الذاكرة

مع حمل عمل ثقيل القراءة، قد تتجاوز الاستعلامات مقابل خادم MySQL أحجام الجدول المؤقتة في الذاكرة. يمكن أن يتسبب حمل العمل الثقيل للقراءة في تبديل الخادم الخاص بك إلى كتابة جداول مؤقتة إلى القرص، مما يؤثر على أداء التطبيق الخاص بك. لتحديد ما إذا كان الخادم الخاص بك يكتب إلى القرص نتيجة تجاوز حَجم الجدول المؤقت، انظر إلى المقاييس التالية:

show global status like 'created_tmp_disk_tables';
show global status like 'created_tmp_tables';

يُشير المقياس created_tmp_disk_tables إلى عدد الجداول التي تم إنشاؤها على القرص. نظرا لحمل العمل الخاص بك، يخبرك المقياس created_tmp_table بعدد الجداول المؤقتة التي يجب تكوينها في الذاكرة. لتحديد ما إذا كان استعلام معين يستخدم جداول مؤقتة، قم بتشغيل عبارة EXPLAIN على الاستعلام. تشير التفاصيل الموجودة في extra العمود إلى Using temporary ما إذا كان الاستعلام يعمل باستخدام جداول مؤقتة.

لحساب النسبة المئوية لحمل العمل الخاص بك مع الاستعلامات المُتسربة إلى الأقراص، استخدم قيم القياس في الصيغة التالية:

(created_tmp_disk_tables / (created_tmp_disk_tables + created_tmp_tables)) * 100

من الناحية المثالية، يجب أن تكون هذه النسبة أقل من 25٪. إذا كانت النسبة المئوية 25٪ أو أكبر، فإننا نقترح تعديل معلمتين للخادم، tmp_table_size، max_heap_table_size.

مخطط قاعدة البيانات والاستعلامات

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

استخدام نوع البيانات الصحيح لأعمدة الجدول

يمكن أن يؤدي استخدام نوع البيانات الصحيح استنادا إلى نوع البيانات التي تريد تخزينها إلى تحسين التخزين وتقليل الأخطاء بسبب أنواع البيانات غير الصحيحة.

استخدم الفهارس

لتجنب الاستعلامات البطيئة، يُمكنك استخدام الفهارس. يُمكن أن تساعد الفهارس في العثور على صفوف ذات أعمدة معينة بسرعة. انظركيفية استخدام الفهارس في MySQL.

استخدم EXPLAIN للاستعلامات SELECT

قم باستخدام العبارة EXPLAIN للحصول على رؤى حول ما يفعله MySQL لتشغيل الاستعلام الخاص بك. يُمكن أن يساعدك في اكتشاف الاختناقات أو المشكلات في الاستعلام الخاص بك. انظر كيفية استخدام EXPLAIN لأداء استعلام ملف التعريف.