سؤال

أنا على وشك التعمق في مشروع موجه نحو القواعد (باستخدام قواعد ILOGs لـ .NET - الآن IBM).ولقد قرأت عدة وجهات نظر مختلفة فيما يتعلق بكيفية إعداد معالجة القواعد وكيفية التفاعل مع محرك القواعد.

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

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

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

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

سؤال: من خلال تجاربك، ما هي أفضل طريقة لبدء دمج القواعد في تطبيق ويب يستند إلى ‎.net لمتجر لم يقضِ بعد الكثير من الوقت في العمل في عالم تحكمه القواعد؟

هل كانت مفيدة؟

المحلول

نحن نستخدم ilog ل dotnet والحصول على مشروع تجريبي منتشر.

إليك ملخصا بنية قواعد غير ناضجة:

  1. جميع البيانات المنجزة خارج القواعد.
  2. يتم نشر القواعد بنفس الطريقة مثل التعليمات البرمجية (التحكم المصدر، عملية الإصدار، YADA YAAAA).
  3. المشاريع (الخدمات) التي تستخدم القواعد لها إشارة إلى ILOG.Rules.dll وحددت الدروس الجديد عبر فئة تجمع مخصصة. يتم تجميع RBEENEGING لأنها مكلفة لربط الجواستر على ردينغين.
  4. تتم كتابة جميع القواعد تقريبا لتوقع كائنات تأكيد، بدلا من معلمات Rockflow.
  5. نظرا لأن القواعد تعمل في نفس مساحة الذاكرة، فإن الحالات التي تم تعديلها بالقواعد هي نفس الحالات في البرنامج - وهو الانتشار الفوري للدولة.
  6. يتم تشغيل جميع القواعد تقريبا عبر Sureflow (حتى لو كان حلايا واحدا في Sureflow).

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

العقبة الأساسية في جميع مساعي القاعدة لدينا هي النمذجة والقاعدة في المهارات المهنية.

نصائح أخرى

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

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

هذا لديه الاستفادة الإضافية لتقسيم مساحة القواعد. تصبح مجموعة القاعدة أصعب للحفاظ عليها لأنها تنمو؛ من الأفضل أن تبقيهم بحجم قابل للإدارة.

إذا تمت مشاركتها أجزاء من مجموعة القواعد، فسوف أفضل نهج DI في البيانات حيث يمكن أن تحتوي الخدمة على مثيلها الخاص بمحرك القواعد وتحميل القواعد الشائعة من قاعدة بيانات عند بدء التشغيل. قد لا يكون هذا ممكنا إذا كان ترخيص ILOG الخاص بك يجعل تكاليف مثيلات متعددة. سيكون ذلك حالة حيث من المفترض أن يكون المنتج الذي من المفترض أن يساعد في الواقع الخيارات المعمارية التي ستجلب الحزن. ستكون حجة جيدة بديلا أقل تكلفة (على سبيل المثال، قواعد JBOSS في Java-Land).

ماذا عن نهج شجرة القرار الذي يحركه البيانات؟ هل محرك قواعد المنقاد ضروريا حقا، O هو قرار "أداة المؤسسات" التي يقود اختيارك؟

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

ليس لدي الكثير لأقوله بشأن سؤال "أي خادم" ولكنني أحثك ​​على تطوير خدمات اتخاذ القرار - وهي خدمات قابلة للاستدعاء تستخدم القواعد لاتخاذ القرارات ولكنها لا تغير حالة العمل.إن السماح لتطبيق/خدمة/عملية الاستدعاء بتحديد تغييرات البيانات التي سيتم إجراؤها نتيجة لاستدعاء خدمة القرار وجعل مكون الاتصال يبدأ فعليًا الإجراء (الإجراءات) التي تقترحها خدمة القرار، مما يسهل استخدام خدمة القرار مرارًا وتكرارًا مرة أخرى (عبر القنوات والعمليات وما إلى ذلك).كلما كانت خدمة القرار أنظف وأقل ارتباطًا ببقية البنية التحتية، أصبحت أكثر قابلية لإعادة الاستخدام والإدارة.المناقشة هنا على ebizQ قد يكون من المفيد القراءة في هذا الصدد.

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

  • التنفيذ عن بعد لخدمة الويب - بنفس الطريقة التي حددتها في سؤالك، نقوم بإجراء مكالمات للخدمات القائمة على الصابون التي يوفرها منتج محرك القواعد. ضمن عالم خدمة الويب، وصلنا إلى العديد من الخيارات: (1) "boxcar" الطلبات، مما يسمح للتطبيق في قائمة انتظار طلبات معالجة القواعد وإرسالها في القطع بدلا من رسائل لمرة واحدة؛ (2) ضبط خيارات الخيوط والعملية التي يوفرها البائع. يتضمن ذلك السماح بفصل خدمات القرارات عن طريق الدالة وتخصيص كل W3WP و / أو استخدام حدائق الويب. هناك الكثير من التغيير والتبديل الذي يمكنك القيام به مع Boxcars و NESS
  • استدعاء عن بعد محرك القواعد في العملية - خدعة أسلوب الدفعة الكلاسيكية لتجنب النفقات العامة للتسلسل وإزالة التسلسل. وعلى عن بعد مكالمة تطلق مكالمة أثناء العملية بمحرك القواعد. يمكن إجراء هذا إما المجدولة (مثل دفعة) أو بناء على الطلب (أي "boxcars" للطلبات). وفي كلتا الحالتين يمكن تجنب الكثير من النفقات العامة لمكالمات الخدمة عن طريق التفاعل مباشرة مع العملية وقاعدة البيانات. الجانب السلبي لهذه العملية هو أنه ليس لديك IIS أو حاوية EJB / Servlet الخاصة بك تدير مؤشرات الترابط لك ولديك القيام بذلك بنفسك.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top