تحسين التنفيذ لمحرك قواعد تطبيقات المنطق Azure

ينطبق على: Azure Logic Apps (قياسي)

يصف هذا الدليل المفاهيم الأساسية التي تشرح كيفية عمل محرك قواعد تطبيقات المنطق في Azure عند تقييم الشروط، وتنفيذ الإجراءات، وحل التعارضات بين القواعد. يوفر محرك قواعد تطبيقات المنطق Azure سياق التنفيذ لمجموعة قواعد، والتي تنشؤها باستخدام Microsoft Rules Composer.

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

المكونات الأساسية

  • منفذ مجموعة القواعد

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

  • مترجم مجموعات القواعد

    يأخذ هذا المكون كائن مجموعة قواعد كمدخل وينتج تمثيلا تنفيذيا لمجموعة القواعد. ينشئ المترجم الافتراضي في الذاكرة شبكة تمييز مجمعة من تعريف مجموعة القواعد.

  • اعتراض تعقب مجموعة القواعد

    يتلقى هذا المكون الإخراج من منفذ مجموعة القواعد ويحيل هذا الإخراج إلى أدوات تعقب ومراقبة مجموعة القواعد.

تقييم الشرط وتنفيذ الإجراء

محرك قواعد Azure Logic Apps هو محرك استدلال عالي الكفاءة يمكنه ربط القواعد بكائنات .NET أو مستندات XML. يستخدم محرك القواعد خوارزمية من ثلاث مراحل لتنفيذ مجموعة القواعد مع المراحل التالية:

  • Match

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

  • حل النزاعات

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

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

  • Action

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

    Important

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

Example

يوضح المثال التالي كيفية عمل خوارزمية المطابقة وحل التعارض والإجراءات المكونة من ثلاث مراحل:

القاعدة 1: تقييم الدخل

  • التمثيل التصريحي

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

  • IF — ثم التمثيل باستخدام كائنات الأعمال

    IF Application.Income / Property.Price < 0.2
    THEN Assert new CreditRating( Application)
    

القاعدة 2: تقييم التصنيف الائتماني

  • التمثيل التصريحي

    الموافقة على مقدم الطلب فقط إذا كان التصنيف الائتماني لمقدم الطلب أكثر من 725.

  • IF — ثم التمثيل باستخدام كائنات العمل:

    IF Application.SSN = CreditRating.SSN AND CreditRating.Value > 725
    THEN SendApprovalLetter(Application)
    

يلخص الجدول التالي الحقائق:

Fact Description Fields
Application مستند XML يمثل طلب قرض منزل. - الدخل: 65,000 دولار
- رقم الضمان الاجتماعي: XXX-XX-XXXX
Property مستند XML يمثل الخاصية المراد شراؤها. - السعر: 225,000 دولار
CreditRating مستند XML يحتوي على التصنيف الائتماني لمقدم القرض. - القيمة: 0-800
- رقم الضمان الاجتماعي: XXX-XX-XXXX

تحديثات لذاكرة العمل وجدول الأعمال

في البداية، تكون ذاكرة العمل وجدول الأعمال لمحرك القواعد فارغة. بعد أن يضيف تطبيقك حقائق التطبيقوالخصائص ، يقوم محرك القواعد بتحديث ذاكرته العاملة وأجندته كما هو موضح:

الذاكرة العاملة Agenda
- التطبيق
- الملكية
القاعدة 1
  • يضيف محرك القواعد القاعدة 1 إلى جدول أعماله لأن الشرط، Application.Income / Property.Price < 0.2، يقيم إلى true أثناء مرحلة المطابقة.

  • لا توجد أي حقيقة تصنيف ائتماني في الذاكرة العاملة، لذا لا يتم تقييم شرط القاعدة 2.

  • القاعدة 1 هي القاعدة الوحيدة في جدول الأعمال، لذلك يتم تنفيذ القاعدة ثم تختفي من جدول الأعمال.

  • تعرف القاعدة 1 إجراء واحدا يؤدي إلى حقيقة جديدة، وهي وثيقة تصنيف الائتمان الخاصة بمقدم الطلب التي تضاف إلى الذاكرة العاملة.

  • بعد اكتمال تنفيذ القاعدة 1، يعود عنصر التحكم إلى مرحلة المطابقة.

    الشيء الجديد الوحيد للمطابقة هو حقيقة تصنيف الائتمان ، لذا فإن نتائج مرحلة المطابقة هي كما يلي:

    الذاكرة العاملة Agenda
    - التطبيق
    - الملكية
    - تصنيف الائتمان
    القاعدة 2
  • يتم الآن تنفيذ القاعدة 2، والتي تستدعي وظيفة ترسل خطاب موافقة إلى مقدم الطلب.

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

جدول الأعمال والأولوية

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

Agenda

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

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

يوضح المثال التالي كيفية عمل جدول الأعمال:

القاعدة 1

IF
Fact1 == 1
THEN
Action1
Action2

القاعدة 2

IF
Fact1 > 0
THEN
Action3
Action4

عندما يتم تأكيد حقيقة الحقيقة1 ، التي لها قيمة 1، في المحرك، يتم استيفاء شروطهما لكل من القاعدة 1 والقاعدة 2. لذلك، ينقل المحرك كلتا القاعئتين إلى جدول الأعمال لتنفيذ إجراءاتهما.

الذاكرة العاملة Agenda
الحقيقة 1 (القيمة =1) القاعدة 1:
- أكشن1
- أكشن2

القاعدة 2:
- أكشن3
- أكشن4

Priority

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

يوضح المثال التالي كيفية تأثير الأولوية على تنفيذ الطلب للقواعد:

القاعدة 1 (الأولوية = 0)

IF
Fact1 == 1
THEN
Discount = 10%

القاعدة 2 (الأولوية = 10)

IF
Fact1 > 0
THEN
Discount = 15%

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

الذاكرة العاملة Agenda
الحقيقة 1 (القيمة=1) القاعدة 2:
الخصم: 15%

القاعدة 1:
الخصم: 10%

الآثار الجانبية للفعل وسلوك التخزين المؤقت

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

على سبيل المثال، افترض أن لديك القواعد التالية:

القاعدة 1

IF OrderForm.ItemCount > 100
THEN OrderForm.Status = "Important"

القاعدة 2

IF OrderList.IsFromMember = true
THEN OrderForm.UpdateStatus("Important")

في هذا المثال، لدى OrderForm.UpdateStatus "تأثير جانبي" على OrderForm.Status، مما يعني أن OrderForm.Status قد يتأثر بإجراء واحد أو أكثر.

خاصية SideEffects لأعضاء فئة .NET مضبوطة على true كقيمة افتراضية، مما يمنع محرك القواعد من تخزين العضو الذي يحتوي على تأثيرات جانبية. في هذا المثال، محرك القواعد لا يقوم بتخزين OrderForm.Status في ذاكرة العمل مؤقتا. بدلا من ذلك، يحصل المحرك على أحدث قيمة هي OrderForm.Status في كل مرة يقيم فيها المحرك القاعدة 1. إذا كانت قيمة خاصية SideEffectsخاطئة، يقوم محرك القواعد بتخزين القيمة مؤقتا عندما يقوم المحرك بتقييم OrderForm.Status لأول مرة. ومع ذلك، بالنسبة للتقييمات اللاحقة في سيناريوهات التسلسل الأمامي، يستخدم المحرك القيمة المخزنة مؤقتا.

حاليا لا يوفر برنامج Microsoft Rules Composer طريقة لتعديل قيمة خاصية SideEffects . ومع ذلك، يمكنك ضبط قيمة خاصية SideEffects برمجيا من خلال إطار قواعد الأعمال، وهو من Microsoft . مكتبة الفئات المتوافقة مع NET. تقوم بتعيين هذه القيمة عند الربط باستخدام فئة ClassMemberBinding لتحديد طرق الكائنات، الخصائص، والحقول المستخدمة في شروط القواعد والإجراءات. فئة ClassMemberBinding لها خاصية تسمى SideEffects، والتي تحتوي على قيمة بولينية تشير إلى ما إذا كان الوصول إلى العضو يغير قيمته.

الاعتبارات الخاصة بالأداء

يناقش هذا القسم كيفية أداء Azure Logic Apps Rules Engine في سيناريوهات مختلفة ومع قيم مختلفة لمعلمات التكوين والضبط.

أنواع الحقائق

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

أولوية القواعد

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

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

لمزيد من المعلومات، راجع إنشاء قواعد باستخدام Microsoft Rules Composer.

عوامل التشغيل المنطقية OR

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

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

توفر القائمة التالية الحلول البديلة المحتملة لهذه المشكلة:

  • قم بتحويل القاعدة إلى شكل نورمال منفصل بحيث يكون عامل OR فقط في المستوى الأعلى.

    ضع في اعتبارك إنشاء القاعدة برمجيا لأنك قد تجد أن إنشاء قاعدة في نموذج عادي مفكك في Microsoft Rules Composer قد يكون صعبا.

  • تطوير مكون مساعد يقوم بعمليات OR ويعيد قيمة بوليانية، ثم استخدم المكون في القاعدة.

  • قم بتقسيم القاعدة إلى قواعد متعددة وافحص القواعد علامة تم تعيينها بواسطة قاعدة تم تنفيذها مسبقا، أو استخدم كائن أكدته قاعدة تم تنفيذها مسبقا، على سبيل المثال:

    • القاعدة 1: IF (a == 1 OR a == 3) THEN b = true

      القاعدة 2: IF (b == true) THEN …

    • القاعدة 1: IF (a == 1 OR a == 3) THEN Assert(new c())

      القاعدة 2: IF (c.flag == true) THEN …

مكالمات تحديث

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

على سبيل المثال، ضع في اعتبارك القواعد التالية:

القاعدة 1

IF PurchaseOrder.Amount > 5
THEN StatusObj.Flag = true; Update(StatusObj)

القاعدة 2

IF PurchaseOrder.Amount <= 5
THEN StatusObj.Flag = false; Update(StatusObj)

جميع القواعد المتبقية في مجموعة القواعد تستخدم StatusObj.Flag في شروطها. عندما تستدعي دالة التحديث على كائن StatusObj ، يتم إعادة تقييم جميع القواعد. مهما كانت القيمة في حقل المبلغ ، يتم تقييم جميع القواعد باستثناء القاعدة 1والقاعدة 2 مرتين: مرة قبل استدعاء التحديث ومرة بعد استدعاء التحديث .

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

الآثار الجانبية سلوك الخصائص وسلوك التخزين المؤقت

في فئتي XmlDocumentFieldBinding و ClassMemberBinding ، تحدد خاصية SideEffects ما إذا كان يجب تخزين قيمة الحقل أو العضو أو العمود المقيد مؤقتا.

في فئة XmlDocumentFieldBinding، القيمة الافتراضية لخاصية SideEffects خاطئة. ومع ذلك، في فئة ClassMemberBinding ، تكون القيمة الافتراضية لخاصية SideEffectsصحيحة.

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

هذا السلوك يعني أنه إذا قمت بضبط خاصية SideEffects في ملف .NET ClassMemberBinding على false، يمكنك تحسين الأداء لأن المحرك يحصل على قيمة العضو من الذاكرة المؤقتة بدءا من المرة الثانية وما بعدها. ومع ذلك، يمكنك فقط برمجة قيمة الخاصية لأن Microsoft Rules Composer لا يكشف خاصية SideEffects .

المثيلات والانتقائية

لكل من فئتي XmlDocumentBindingوClassBinding الخصائص التالية، والتي يستخدم محرك القواعد قيمها لتحسين تقييم الحالة. تسمح قيم الخصائص هذه للمحرك باستخدام أقل المثيلات الممكنة أولا في تقييمات الحالة ثم استخدام المثيلات المتبقية.

  • المثلات: العدد المتوقع لمثيلات الفئة في ذاكرة العمل.

    إذا كنت تعرف عدد حالات الكائنات مسبقا، يمكنك تعيين خاصية Instances لهذا الرقم لتحسين الأداء.

  • الانتقائية: نسبة الحالات الفئة التي تجتاز شروط القاعدة بنجاح.

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

يمكنك فقط تعيين قيم الخصائص هذه برمجيا لأن Microsoft Rules Composer لا يعرضها.

دعم توريث الفئة

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

يدعم Azure Logic Apps Rules Engine الأنواع التالية من توريث الفئة:

  • وراثة التنفيذ: القدرة على استخدام خصائص وطرق الفئة الأساسية بدون ترميز آخر.

  • وراثة الواجهة: القدرة على استخدام أسماء الخصائص وأسماء الطرق فقط، لكن يجب أن توفر الفئة الفرعية التنفيذ.

باستخدام محرك القواعد، يمكنك كتابة القواعد من حيث فئة أساسية مشتركة، ولكن الكائنات المؤكدة في محرك القواعد يمكن أن تأتي من فئات مشتقة.

المثال التالي يحتوي على فئة أساسية تسمى Employee، بينما تسمى الفئات المشتقة RegularEmployee و ContractEmployee:

class Employee
{
    public string Status()
    {
        // member definition
    }
    public string TimeInMonths()
    {
        // member definition
    }
}

class ContractEmployee : Employee
{
   // class definition
}
class RegularEmployee : Employee
{
   // class definition
}

على سبيل المثال، افترض أن لديك القواعد التالية:

القاعدة 1

IF Employee.TimeInMonths < 12
THEN Employee.Status = "New"

At run time, if you assert two objects, a **ContractEmployee** instance and a **RegularEmployee** instance, the engine evaluates both objects against the Rule 1.

You can also assert derived class objects in actions by using an **Assert** function. This function causes the engine to reevaluate rules that contain the derived object and the base type in their conditions as shown in the following example, which demonstrates implementation inheritance:

**Rule 2**

```text
IF Employee.Status = "Contract"
THEN Employee.Bonus = false
Assert(new ContractEmployee())

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