لا توجد لدى Home Assistant إجابة واحدة ذات معنى عن سؤال «كم عدد المهام المتزامنة التي يمكنه التعامل معها؟». فقد تكون عشر مهام قصيرة غير متزامنة أقل تكلفة من تكامل واحد يحظر حلقة الأحداث، بينما قد تظل خمسون عملية تلقائية في قائمة الانتظار غير ضارة إذا كان معظم وقتها يُقضى في انتظار عمليات إدخال وإخراج مستقلة.
الحد المفيد هو النقطة التي يؤدي عندها العمل الإضافي إلى تأخير متكرر في مسار التحكم المهم: ينتظر حدث مدة أطول قبل معالجته، أو تنمو قائمة انتظار العمليات التلقائية، أو تفوّت استدعاءات الخدمات توقيتها المستهدف، أو يتعرض مورد مشترك مثل وحدة المعالجة المركزية أو الذاكرة أو التخزين أو الشبكة لضغط. لذلك، فالتزامن مشكلة تتعلق بزمن الاستجابة وقوائم الانتظار قبل أن تكون مشكلة تتعلق بعدد المهام.
يبدأ التزامن في Home Assistant بحلقة أحداث Asyncio
يعتمد Home Assistant Core على Python asyncio. وتجدول المكوّنات العمل على هيئة مهام، بينما تتنازل الشيفرة غير المتزامنة التعاونية عن التنفيذ أثناء انتظار عمليات الإدخال والإخراج، ما يتيح للأعمال الأخرى التقدم بدل تخصيص خيط نظام تشغيل واحد لكل تكامل.
توضح وثائق مطوري Home Assistant الحالية أن Core يجدول مهام المكوّنات عبر حلقة أحداث مركزية، ويعتمد على تعليق المهام لتنفيذ الانتظار بصورة سليمة. لذلك، لا يعني «التزامن» أن كل مهمة تنفذ تعليمات وحدة المعالجة المركزية في اللحظة نفسها.
ويُجري تحليل عملي للتزامن التمييز نفسه: يمكن للمهام غير المتزامنة أن تتداخل زمنيًا، بينما يظل التنفيذ الفعلي لحلقة الأحداث متسلسلًا بين نقاط await. وتعتمد السعة على المدة التي تشغل فيها كل مهمة الحلقة وما تنتظره.
يمكن للعمل الحاجب أن يضعف أداء مهام كثيرة دفعة واحدة
غالبًا لا يكون فشل التزامن الأكثر ضررًا ناتجًا عن «عدد كبير جدًا من العمليات التلقائية»، بل عن عملية واحدة تحظر حلقة الأحداث مدة كافية تمنع تحديثات الحالة وعمليات الاستدعاء غير المرتبطة من التنفيذ.
يحذّر Home Assistant صراحة من أن العمليات الحاجبة داخل حلقة الأحداث توقف النظام بأكمله طوال مدة الاستدعاء. ويشمل ذلك عمليات الإدخال والإخراج على الملفات التي لم تُعالج جيدًا، ومكتبات الشبكة، وعمليات السكون، أو الأعمال المتزامنة الثقيلة داخل أحد التكاملات.
وهذا يغيّر طريقة تفسير اختبار السعة. فإذا ارتفع زمن استجابة التحكم المحلي عند تفعيل تكامل معين، رغم بقاء استخدام وحدة المعالجة المركزية منخفضًا عمومًا، فقد تكون المشكلة حجبًا لحلقة الأحداث لا نقصًا في قدرة المعالج.
يحدد نمط التشغيل التلقائي كيفية تحول المشغلات المتكررة إلى عمل
تضيف العمليات التلقائية طبقة أخرى من سياسات التزامن. إذ يمكن للقاعدة رفض مشغل ثانٍ، أو إعادة تشغيل التنفيذ الحالي، أو وضع العمل في قائمة انتظار، أو إنشاء عمليات تنفيذ متوازية. وتغيّر هذه الخيارات كلًا من الصحة الوظيفية والطلب على الموارد.
تعرّف وثائق أنماط التشغيل التلقائي الحالية في Home Assistant الأنماط single وrestart وqueued وparallel، مع حد أقصى قابل للضبط لعمليات التنفيذ الموضوعة في قائمة الانتظار أو المتوازية. والحد الأقصى الافتراضي للأنماط الموضوعة في قائمة الانتظار والمتوازية هو 10، لكن قيمة الضبط هذه ليست تقييمًا عامًا لسعة المنصة.
ليست عملية تلقائية لمستشعر باب تنتظر ثانيتين قبل إرسال إشعار مكافئة لعملية تلقائية للإضاءة تجري خمس استدعاءات شبكية. حدّد نمط التشغيل التلقائي أولًا بناءً على الترتيب والصحة الوظيفية، ثم راقب ما إذا كانت قائمة الانتظار أو التداخل الناتج يؤثر في زمن استجابة التحكم.
قِس نمو قوائم الانتظار وزمن الاستجابة في الحالات الطرفية، لا نسبة استخدام وحدة المعالجة المركزية فقط
استخدم عملية تلقائية محلية مهمة باعتبارها مسبارًا لزمن الاستجابة. سجّل وصول المشغل، وبدء العملية التلقائية، واستدعاء الخدمة، واستجابة الجهاز الفعلية، مع زيادة متغير تزامن واحد فقط في كل مرة: المشغلات المتكررة، أو عملاء لوحة التحكم، أو التكاملات التي تعمل في الخلفية، أو الخدمات المجاورة.
تقدم مقالة ZimaSpace حول العمل القائم على الأحداث وحمل الخادم الخامل خط الأساس المناسب: فالأنظمة القائمة على الأحداث تتسم بالكفاءة عندما لا تستيقظ الأعمال إلا عند الحاجة، لكن الاندفاعات لا تزال تحتاج إلى هامش كافٍ من الجدولة والموارد لتصريفها دون بقاء قوائم الانتظار ممتلئة.
راقب زمن الاستجابة الوسيط وأبطأ عمليات التنفيذ الطبيعية. فقد يستخدم النظام وحدة المعالجة المركزية بنسبة 10% في المتوسط، بينما تتسبب الاندفاعات القصيرة في توقفات مدتها ثانية واحدة. ويظهر حد السعة المفيد عندما تستمر قوائم الانتظار في النمو، أو تتكرر تحذيرات بلوغ الحد الأقصى للتنفيذ، أو لا يعود زمن الاستجابة في الحالات الطرفية إلى خط الأساس بعد انتهاء الاندفاعة.
افصل بين تزامن Home Assistant وتنافس المضيف على الموارد
قد يكون Home Assistant يجدول العمل بصورة صحيحة، بينما تعمل حاوية أخرى على استنفاد وحدة المعالجة المركزية أو الذاكرة أو التخزين أو الشبكة. وفي هذه الحالة، قد لا يؤدي رفع أو خفض max الخاص بالعمليات التلقائية إلى تغيير المشكلة، لأن المضيف المشترك فقد بالفعل هامش الموارد.
كرّر اختبار التزامن مرة أخرى مع إيقاف عبء العمل المجاور. فإذا تعافى توقيت حلقة الأحداث وزمن استجابة التحكم المحلي فورًا، فتعامل مع الحد باعتباره مشكلة سعة في المضيف المشترك. وإذا لم يتعافيا، فافحص العمليات الحاجبة أو سلوك التكامل أو تصميم قائمة انتظار العمليات التلقائية داخل Home Assistant.
استخدم شرط توقف بدلًا من نشر رقم للمهام
| الإشارة المرصودة | ما تعنيه | الاختبار التالي |
|---|---|---|
| بلغت عمليات التنفيذ المتوازية أو الموضوعة في قائمة الانتظار الحد الأقصى المكوّن | حد قائمة انتظار على مستوى العملية التلقائية | تحقق من النمط والترتيب ومعدل المشغلات |
| تحذير في حلقة الأحداث أو توقف واسع في واجهة المستخدم والتحكم | عمل حاجب محتمل | حدّد التكامل أو الاستدعاء المتزامن |
| يرتفع زمن الاستجابة فقط عند تشغيل خدمة أخرى | تنافس المضيف المشترك على الموارد | قِس ضغط وحدة المعالجة المركزية والذاكرة والإدخال والإخراج والشبكة |
| مسار جهاز واحد بطيء بينما تبقى المسارات الأخرى سريعة | حد خاص بتبعية معينة | افحص مسار ذلك التكامل أو الشبكة |
| تُصرَّف قوائم الانتظار ويبقى زمن الاستجابة في الحالات الطرفية ضمن الهدف | لا يزال هناك هامش تزامن مفيد | توقف عن إضافة الحمل عند الذروة المخطط لها |
لذلك، ينبغي التعبير عن سعة Home Assistant باعتبارها عبء عمل مُختبرًا ذا هدف محدد لزمن الاستجابة، لا رقمًا عالميًا لعدد المهام المتزامنة. والسؤال الصحيح هو: ما مقدار العمل المتداخل الذي يستطيع مزيج التكاملات الحالي والمضيف تحمّله قبل أن يتوقف مسار التحكم المحلي المهم عن الوفاء بموعده النهائي؟
مركز التكنولوجيا والذكاء الاصطناعي
المزيد للقراءة

الحالة أثناء التشغيل مقابل الحالة المستمرة في Home Assistant: ما الذي يجب أن يبقى بعد إعادة التشغيل؟
لا يحتفظ Home Assistant بكل قيمة مباشرة؛ إذ تؤدي الإعدادات والسجلات والحالات المحددة المستعادة وبيانات النشر أدوارًا مختلفة عند إعادة التشغيل.

كيف يُجري Home Assistant مصادقة الجلسات المحلية وعن بُعد؟
تستخدم جلسات Home Assistant المحلية وعن بُعد نموذج الهوية نفسه من جهة الخادم؛ إذ يغيّر الوصول عن بُعد المسار وحدود TLS، وليس تدفق الرموز...

لماذا قد تصبح استعلامات سجل Home Assistant بطيئة مع نمو بيانات المسجّل؟
يمكن أن يؤدي نمو بيانات Recorder إلى زيادة تكلفة استعلامات History عندما يشمل النطاق المطلوب عددًا أكبر من الصفوف، أو تزداد حالات فقدان ذاكرة...

