Udostępnij za pośrednictwem


Optymalizacja wykonywania aparatu reguł usługi Azure Logic Apps (wersja zapoznawcza)

Dotyczy: Azure Logic Apps (Standardowa)

Ważne

Ta funkcja jest dostępna w wersji zapoznawczej i podlega dodatkowym warunkom użytkowania wersji zapoznawczej platformy Microsoft Azure.

Aparat reguł usługi Azure Logic Apps udostępnia kontekst wykonywania zestawu reguł, który można utworzyć za pomocą narzędzia Microsoft Rules Composer. W tym przewodniku wyjaśniono podstawowe pojęcia dotyczące działania aparatu reguł i przedstawiono zalecenia dotyczące optymalizacji dla operacji i wykonywania.

Podstawowe składniki

  • Funkcja wykonawcza zestawu reguł

    Ten składnik implementuje algorytm odpowiedzialny za ocenę warunku reguły i wykonywanie akcji. Domyślny wykonawca zestawu reguł to oparty na sieci dyskryminujący aparat wnioskowania łańcuchowego zaprojektowany pod kątem optymalizacji operacji w pamięci.

  • Translator zestawu reguł

    Ten składnik przyjmuje obiekt RuleSet jako dane wejściowe i tworzy wykonywalną reprezentację zestawu reguł. Domyślny translator w pamięci tworzy skompilowana sieć dyskryminacji na podstawie definicji zestawu reguł.

  • Przechwytnika śledzenia zestawu reguł

    Ten składnik odbiera dane wyjściowe z funkcji wykonawczej zestawu reguł i przekazuje dane wyjściowe do narzędzi do śledzenia i monitorowania zestawu reguł.

Ocena warunku i wykonywanie akcji

Aparat reguł usługi Azure Logic Apps to wysoce wydajny aparat wnioskowania, który może łączyć reguły z obiektami platformy .NET lub dokumentami XML. Aparat reguł używa algorytmu trzyetapowego do wykonywania zestawu reguł z następującymi etapami:

  • Zapałka

    Na etapie dopasowania aparat reguł pasuje do faktów względem predykatów używających typu faktów, które są odwołaniami do obiektów przechowywanymi w pamięci roboczej aparatu reguł, przy użyciu predykatów zdefiniowanych w warunkach reguły. W przypadku wydajności dopasowywanie wzorców odbywa się we wszystkich regułach w zestawie reguł, a warunki współużytkowane między regułami są dopasowywane tylko raz. aparat reguł może przechowywać częściowe dopasowania warunku w pamięci roboczej, aby przyspieszyć kolejne operacje dopasowywania wzorców. Dane wyjściowe z fazy dopasowywania wzorca zawierają aktualizacje programu aparatu reguł.

  • Konfliktów

    Na etapie rozwiązywania konfliktów aparat reguł sprawdza reguły, które są kandydatami do wykonania, aby określić następny zestaw akcji reguł do uruchomienia na podstawie wstępnie określonego schematu rozwiązywania. aparat reguł dodaje wszystkie reguły kandydatów znalezione na etapie dopasowywania do programu aparatu reguł.

    Domyślny schemat rozwiązywania konfliktów jest oparty na priorytetach reguł w zestawie reguł. Priorytetem jest właściwość reguły, którą można skonfigurować w narzędziu Microsoft Rules Composer. Im większa liczba, tym wyższy priorytet. Jeśli zostanie wyzwolonych wiele reguł, aparat reguł najpierw uruchamia akcje o wyższym priorytcie.

  • Akcja

    Na etapie akcji aparat reguł uruchamia akcje w rozpoznanej regule. Akcje reguły mogą potwierdzać nowe fakty w asilniku reguł, co powoduje kontynuowanie cyklu i jest również nazywane łańcuchem przesyłania dalej.

    Ważne

    Algorytm nigdy nie wywłaszcza aktualnie uruchomionej reguły. Aparat reguł wykonuje wszystkie akcje w aktualnie uruchomionej regule przed powtórzenie fazy dopasowania. Jednak inne reguły dotyczące programu aparatu reguł nie będą uruchamiane przed rozpoczęciem fazy meczu ponownie. Faza dopasowania może spowodować, że aparat reguł usunie te reguły z porządku obrad przed ich uruchomieniem.

Przykład

W poniższym przykładzie pokazano, jak działa algorytm trójetapowy dopasowania, rozwiązywania konfliktów i akcji:

Reguła 1. Ocena dochodu

  • Reprezentacja deklaratywna

    Uzyskaj rating kredytowy wnioskodawcy tylko wtedy, gdy stosunek dochodów do pożyczki wnioskodawcy jest mniejszy niż 0,2.

  • IF — reprezentacja przy użyciu obiektów biznesowych

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

Reguła 2. Ocena ratingu kredytowego

  • Reprezentacja deklaratywna

    Zatwierdź wnioskodawcę tylko wtedy, gdy ocena kredytowa wnioskodawcy przekracza 725.

  • IF — NASTĘPNIE reprezentacja przy użyciu obiektów biznesowych:

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

Poniższa tabela zawiera podsumowanie faktów:

Fakt opis Pola
Aplikacja Dokument XML reprezentujący aplikację pożyczki domowej. - Dochód: $65,000
- SSN: XXX-XX-XXXX
Właściwości Dokument XML reprezentujący właściwość do zakupu. - Cena: $225,000
CreditRating Dokument XML zawierający rating kredytowy wnioskodawcy pożyczki. - Wartość: 0-800
- SSN: XXX-XX-XXXX

Aktualizacje pamięci roboczej i programu

Początkowo pamięć robocza aparatu reguł i program są puste. Po dodaniu przez aplikację faktów dotyczących aplikacji i właściwości aparat reguł aktualizuje jego pamięć roboczą i plan działania, jak pokazano poniżej:

Pamięć robocza Terminarz
-Aplikacja
-Własność
Reguła 1
  • Aparat reguł dodaje regułę 1 do porządku obrad, ponieważ warunek Application.Income / Property.Price < 0.2 daje wartość true w fazie dopasowania.

  • Brak faktu CreditRating w pamięci roboczej, więc warunek reguły 2 nie jest oceniany.

  • Reguła 1 jest jedyną regułą w porządku obrad, więc reguła wykonuje, a następnie znika z porządku obrad.

  • Reguła 1 definiuje pojedyncze działanie, które powoduje nowy fakt, który jest dokumentem CreditRating wnioskodawcy, który jest dodawany do pamięci roboczej.

  • Po zakończeniu wykonywania reguły 1 kontrolka powraca do fazy dopasowania.

    Jedynym nowym obiektem do dopasowania jest fakt CreditRating , więc wyniki fazy dopasowania są następujące:

    Pamięć robocza Terminarz
    -Aplikacja
    -Własność
    - CreditRating
    Reguła 2
  • Reguła 2 jest teraz wykonywana, która wywołuje funkcję, która wysyła do wnioskodawcy list zatwierdzenia.

  • Po zakończeniu wykonywania reguły 2 kontrolka powraca do fazy dopasowania. Jednak żadne nowe fakty nie są dostępne do dopasowania, a program jest pusty, więc przekazywanie łańcuchowe kończy się, a wykonywanie zestawu reguł jest zakończone.

Program i priorytet

Aby zrozumieć, w jaki sposób aparat reguł usługi Azure Logic Apps ocenia reguły i wykonuje akcje, musisz również poznać koncepcje programu i priorytetu.

Terminarz

Plan aparatu reguł to harmonogram, który kolejkuje reguły wykonywania. Program istnieje dla wystąpienia aparatu i działa na jednym zestawie reguł, a nie na serii zestawów reguł. Gdy fakt jest potwierdzany w pamięci roboczej, a warunki reguły są spełnione, aparat umieszcza regułę w porządku obrad i wykonuje daną regułę na podstawie priorytetu. Aparat wykonuje akcje reguły od góry do dolnego priorytetu, a następnie wykonuje akcje dla następnej reguły w porządku obrad.

Aparat reguł traktuje akcje w regule jako blok, więc wszystkie akcje są uruchamiane przed przejściem aparatu do następnej reguły. Wszystkie akcje w bloku reguły są wykonywane niezależnie od innych akcji w bloku. Aby uzyskać więcej informacji na temat asercji, zobacz Optymalizowanie aparatu reguł za pomocą funkcji sterujących .

W poniższym przykładzie pokazano, jak działa program:

Reguła 1

IF
Fact1 == 1
THEN
Action1
Action2

Reguła 2

IF
Fact1 > 0
THEN
Action3
Action4

Gdy fakt Fact1, który ma wartość 1, jest potwierdzany w asilniku, zarówno reguła 1, jak i reguła 2 mają spełnione warunki. W związku z tym aparat przenosi obie reguły do porządku obrad, aby wykonywać swoje działania.

Pamięć robocza Terminarz
Fakt 1 (wartość=1) Reguła 1:
- Akcja1
- Akcja2

Reguła 2:
- Akcja3
- Akcja4

Priorytet

Domyślnie wszystkie reguły są ustawione na 0 jako priorytet wykonywania. Można jednak zmienić ten priorytet dla każdej reguły. Priorytet może mieścić się w obu stronach 0, a większe liczby mają wyższy priorytet. Aparat wykonuje akcje z najwyższego priorytetu do najniższego priorytetu.

W poniższym przykładzie pokazano, jak priorytet wpływa na wykonywanie zamówienia dla reguł:

Reguła 1 (priorytet = 0)

IF
Fact1 == 1
THEN
Discount = 10%

Reguła 2 (priorytet = 10)

IF
Fact1 > 0
THEN
Discount = 15%

Chociaż warunki obu reguł są spełnione, reguła 2 jest wykonywana jako pierwsza ze względu na wyższy priorytet. Ostateczny rabat wynosi 10 procent ze względu na wynik akcji wykonanej dla reguły 1, jak pokazano w poniższej tabeli:

Pamięć robocza Terminarz
Fact1 (wartość=1) Reguła 2:
Rabat: 15%

Reguła 1:
Rabat: 10%

Działania niepożądane

Jeśli wykonanie akcji wpływa na stan obiektu lub termin używany w warunkach, mówi się, że ta akcja ma "efekt uboczny" dla tego obiektu lub terminu. Ta fraza nie oznacza, że akcja ma skutki uboczne, ale raczej obiekt lub termin jest potencjalnie dotknięty co najmniej jedną akcją.

Załóżmy na przykład, że masz następujące reguły:

Reguła 1

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

Reguła 2

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

W tym przykładzie element OrderForm.UpdateStatus ma "efekt uboczny" dla elementu OrderForm.Status, co oznacza, że element OrderForm.Status może mieć wpływ na co najmniej jedną akcję.

Właściwość SideEffects dla składowych klas platformy .NET jest ustawiona na wartość true jako wartość domyślną, co uniemożliwia aparatowi reguł buforowanie elementu członkowskiego z efektami ubocznymi. W tym przykładzie aparat reguł nie buforuje elementu OrderForm.Status w pamięci roboczej. Zamiast tego aparat pobiera najnowszą wartość OrderForm.Status za każdym razem, gdy aparat oblicza regułę 1. Jeśli wartość właściwości SideEffects ma wartość false, aparat reguł buforuje wartość, gdy aparat oblicza właściwość OrderForm.Status po raz pierwszy. Jednak w przypadku późniejszych ocen w scenariuszach tworzenia łańcucha dalej aparat używa wartości buforowanej.

Program Microsoft Rules Composer obecnie nie umożliwia modyfikowania wartości właściwości SideEffects . Można jednak programowo ustawić wartość właściwości SideEffects za pomocą struktury reguł biznesowych, która jest firmą Microsoft . Biblioteka klas zgodna z platformą NET. Tę wartość można ustawić przy użyciu klasy ClassMemberBinding , aby określić metody obiektów, właściwości i pola używane w warunkach i akcjach reguły. Klasa ClassMemberBinding ma właściwość o nazwie SideEffects, która zawiera wartość logiczną wskazującą, czy dostęp do składowej zmienia jego wartość.

Zagadnienia dotyczące wydajności

W tej sekcji omówiono, jak aparat reguł usługi Azure Logic Apps działa w różnych scenariuszach i z różnymi wartościami parametrów konfiguracji i dostrajania.

Typy faktów

Aparat reguł zajmuje mniej czasu na dostęp do faktów platformy .NET niż uzyskiwanie dostępu do faktów XML. Jeśli masz wybór między używaniem faktów platformy .NET lub faktów XML w zestawie reguł, rozważ użycie faktów platformy .NET w celu uzyskania lepszej wydajności.

Priorytet reguły

Ustawienie priorytetu dla reguły może zawierać zakres do jednej ze stron 0 , a większe liczby mają wyższy priorytet. Akcje są wykonywane w kolejności od najwyższego priorytetu do najniższego priorytetu. Gdy zestaw reguł implementuje zachowanie łańcucha przesyłania dalej za pomocą wywołań asercyjnych lub aktualizacji , można zoptymalizować łańcuch przy użyciu właściwości Priority .

Załóżmy na przykład, że reguła 2 ma zależność od wartości ustawionej przez regułę 1. Jeśli reguła 1 ma wyższy priorytet, reguła 2 jest wykonywana tylko po wyzwoleniu reguły 1 i zaktualizowaniu wartości. Z drugiej strony, jeśli reguła 2 ma wyższy priorytet, reguła może być uruchamiana raz, a następnie ponownie uruchamiana po wyzwoleniu reguły 1 i zaktualizowaniu faktu w warunku reguły 2. Ten scenariusz może lub nie może wygenerować prawidłowych wyników, ale wyraźnie, dwukrotne wypalanie ma wpływ na wydajność i wypalanie tylko raz.

Aby uzyskać więcej informacji, zobacz Tworzenie reguł przy użyciu programu Microsoft Rules Composer.

Operatory logiczne OR

Aparat reguł jest zoptymalizowany pod kątem wykonywania operatorów logicznych AND i rekonstruuje regułę, że aparat analizowany w postaci normalnej rozdzielanej tak, aby operator logiczny OR był używany tylko na najwyższym poziomie.

Jeśli używasz większej liczby operatorów logicznych OR w warunkach, zwiększenie powoduje zwiększenie permutacji, które rozszerzają sieć analizy aparatu reguł. W związku z tym aparat reguł może zająć dużo czasu, aby znormalizować regułę.

Poniższa lista zawiera możliwe obejścia tego problemu:

  • Zmień regułę na rozłączną formę normalną, tak aby operator OR był tylko na najwyższym poziomie.

    Rozważ utworzenie reguły programowo, ponieważ może się okazać, że tworzenie reguły w postaci normalnej rozłącznej w narzędziu Microsoft Rules Composer może być trudne.

  • Utwórz składnik pomocnika, który wykonuje operacje OR i zwraca wartość logiczną, a następnie użyj składnika w regule.

  • Podziel regułę na wiele reguł i sprawdź reguły dla flagi ustawionej przez wcześniej wykonaną regułę lub użyj obiektu, który wcześniej wykonanej reguły, na przykład:

    • Reguła 1: IF (a == 1 OR a == 3) THEN b = true

      Reguła 2: IF (b == true) THEN …

    • Reguła 1: IF (a == 1 OR a == 3) THEN Assert(new c())

      Reguła 2: IF (c.flag == true) THEN …

Aktualizowanie wywołań

Funkcja Update aktualizuje fakt, że istnieje w pamięci roboczej aparatu reguł, co powoduje ponowne oceny dla wszystkich reguł, które używają zaktualizowanego faktu w warunkach. To zachowanie oznacza, że wywołania funkcji Update mogą być kosztowne, zwłaszcza jeśli wiele reguł wymaga ponownej oceny ze względu na zaktualizowane fakty. W niektórych sytuacjach można uniknąć konieczności ponownego oceny reguł.

Rozważmy na przykład następujące reguły:

Reguła 1

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

Reguła 2

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

Wszystkie pozostałe reguły w zestawie reguł używają elementu StatusObj.Flag w ich warunkach. Po wywołaniu funkcji Update w obiekcie StatusObj wszystkie reguły są ponownie oceniane. Niezależnie od wartości w polu Amount (Kwota) wszystkie reguły z wyjątkiem Reguła 1 i Reguła 2 są oceniane dwa razy: raz przed wywołaniem aktualizacji i raz po wywołaniu aktualizacji.

Zamiast tego można ustawić wartość Flaga na false przed wywołaniem zestawu reguł, a następnie użyć tylko reguły 1 w zestawie reguł, aby ustawić flagę. W takim przypadku funkcja Update jest wywoływana tylko wtedy, gdy wartość Amount jest większa niż 5. Funkcja Update nie jest wywoływana, jeśli kwota jest mniejsza lub równa 5. W ten sposób wszystkie reguły z wyjątkiem Reguły 1 i Reguły 2 są oceniane dwa razy tylko wtedy, gdy wartość Amount jest większa niż 5.

Zachowanie właściwości SideEffects

W klasach XmlDocumentFieldBinding i ClassMemberBinding właściwość SideEffects określa, czy buforować wartość pola powiązanego, elementu członkowskiego lub kolumny.

W klasie XmlDocumentFieldBinding wartość domyślna właściwości SideEffects to false. Jednak w klasie ClassMemberBinding wartość domyślna właściwości SideEffects ma wartość true.

Jeśli zatem aparat uzyskuje dostęp do pola w dokumencie XML po raz drugi lub później w zestawie reguł, aparat pobiera wartość pola z pamięci podręcznej. Jeśli jednak aparat uzyskuje dostęp do elementu członkowskiego obiektu platformy .NET po raz drugi lub później w zestawie reguł, aparat pobiera wartość z obiektu platformy .NET, a nie z pamięci podręcznej.

To zachowanie oznacza, że jeśli ustawisz właściwość SideEffects w elemencie ClassMemberBinding platformy .NET na wartość false, możesz zwiększyć wydajność, ponieważ aparat pobiera wartość elementu członkowskiego z pamięci podręcznej, zaczynając od drugiego i nowszego. Można jednak ustawić wartość właściwości tylko programowo, ponieważ narzędzie Microsoft Rules Composer nie uwidacznia właściwości SideEffects .

Wystąpienia i wybór

Klasy XmlDocumentBinding i ClassBinding mają następujące właściwości, które aparat reguł używa ich wartości do optymalizacji oceny warunków. Te wartości właściwości umożliwiają aparatowi użycie najmniejszych możliwych wystąpień w ocenach warunków, a następnie użycie pozostałych wystąpień.

  • Wystąpienia: oczekiwana liczba wystąpień klas w pamięci roboczej.

    Jeśli znasz wcześniej liczbę wystąpień obiektów, możesz ustawić właściwość Instances na tę liczbę, aby zwiększyć wydajność.

  • Selectivity: procent wystąpień klas, które pomyślnie przechodzą warunki reguły.

    Jeśli znasz procent wystąpień obiektów, które przeszły wcześniej warunki, możesz ustawić właściwość Selectivity na tę wartość procentową, aby zwiększyć wydajność.

Te wartości właściwości można ustawić tylko programowo, ponieważ narzędzie Microsoft Rules Composer nie uwidacznia tych wartości.

Obsługa dziedziczenia klas

Dziedziczenie to możliwość używania wszystkich funkcji z istniejącej klasy i rozszerzania tych możliwości bez ponownego zapisywania oryginalnej klasy, która jest kluczową funkcją w językach programowania obiektowego (OOP).

Aparat reguł usługi Azure Logic Apps obsługuje następujące rodzaje dziedziczenia klas:

  • Dziedziczenie implementacji: możliwość używania właściwości i metod klasy bazowej bez innego kodowania.

  • Dziedziczenie interfejsu: możliwość używania tylko nazw właściwości i nazw metod, ale klasa podrzędna musi zapewnić implementację.

Aparat reguł umożliwia pisanie reguł pod względem wspólnej klasy bazowej, ale obiekty asertywne w a aparatie reguł mogą pochodzić z klas pochodnych.

Poniższy przykład zawiera klasę bazową o nazwie Employee, podczas gdy klasy pochodne mają nazwy RegularEmployee i ContractEmployee:

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

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

W tym przykładzie przyjęto założenie, że masz następujące reguły:

Reguła 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())

Po asercji aparat ponownie przeszacuje wszystkie reguły, które zawierają typ Employee lub Typ ContractEmployee w ich warunkach. Mimo że tylko klasa pochodna jest asercyjna, klasa bazowa jest również potwierdzana, jeśli reguły są zapisywane przy użyciu metod w klasie bazowej, a nie w klasie pochodnej.