Pengoptimalan eksekusi untuk Mesin Aturan Azure Logic Apps

Berlaku pada: Azure Logic Apps (Standar)

Panduan ini menjelaskan konsep inti yang menjelaskan cara kerja Mesin Aturan Azure Logic Apps saat mengevaluasi kondisi, menjalankan tindakan, dan menyelesaikan konflik antar aturan. Mesin Aturan Azure Logic Apps menyediakan konteks eksekusi untuk set aturan, yang Anda buat dengan Microsoft Rules Composer.

Anda akan mempelajari tentang algoritma eksekusi tiga tahap mesin pemrosesan, bagaimana sistem agenda dan prioritas menentukan urutan eksekusi aturan, dan bagaimana efek samping memengaruhi perilaku penyimpanan sementara. Panduan ini juga menyediakan strategi pengoptimalan performa, termasuk tips untuk mengelola jenis fakta, operator logis, panggilan pembaruan, dan dukungan pewarisan kelas, sehingga Anda dapat membangun set aturan yang berjalan secara efisien.

Komponen inti

  • Eksekutor ruleset

    Komponen ini menerapkan algoritma yang bertanggung jawab atas evaluasi kondisi aturan dan eksekusi tindakan. Pelaksana ruleset default adalah mesin inferensi rantai maju berbasis jaringan diskriminasi yang dirancang untuk mengoptimalkan operasi dalam memori.

  • Penerjemah aturan

    Komponen ini mengambil objek RuleSet sebagai input dan menghasilkan representasi set aturan yang dapat dieksekusi. Penerjemah standar dalam memori membuat jaringan diskriminasi yang dikompilasi dari set aturan definisi.

  • Pencegat pelacakan set aturan

    Komponen ini menerima output dari pelaksana set aturan dan meneruskan output tersebut ke alat pelacakan dan pemantauan ruleset.

Evaluasi kondisi dan eksekusi tindakan

Mesin Aturan Azure Logic Apps adalah mesin inferensi yang sangat efisien yang dapat menautkan aturan ke objek .NET atau dokumen XML. Mesin aturan menggunakan algoritma tiga tahap untuk eksekusi ruleset dengan tahapan berikut:

  • Pencocokan

    Pada tahap pencocokan, mesin aturan mencocokkan fakta terhadap predikat yang menggunakan tipe fakta, yang merupakan referensi objek yang disimpan dalam memori kerja mesin aturan, dengan menggunakan predikat yang ditetapkan dalam kondisi aturan. Untuk efisiensi, pencocokan pola terjadi di semua aturan dalam set aturan, dan kondisi yang dibagikan di seluruh aturan hanya dicocokkan sekali. mesin aturan mungkin menyimpan kecocokan kondisi parsial dalam memori kerja untuk mempercepat operasi pencocokan pola berikutnya. Output dari fase pencocokan pola berisi pembaruan pada agenda mesin inferensi aturan.

  • Resolusi konflik

    Dalam tahap resolusi konflik, mesin aturan memeriksa aturan yang merupakan kandidat eksekusi untuk menentukan serangkaian tindakan aturan berikutnya yang akan dijalankan, berdasarkan skema resolusi yang telah ditentukan. mesin pemroses aturan menambahkan semua aturan kandidat yang ditemukan selama tahap pencocokan ke dalam agenda mesin pemroses aturan.

    Skema resolusi konflik default didasarkan pada prioritas aturan dalam set aturan. Prioritasnya adalah properti aturan yang dapat Anda konfigurasi di Microsoft Rules Composer. Semakin besar jumlahnya, semakin tinggi prioritasnya. Jika beberapa aturan dipicu, mesin aturan menjalankan tindakan berprioritas lebih tinggi terlebih dahulu.

  • Perbuatan

    Pada tahap tindakan, mesin aturan menjalankan tindakan dalam aturan yang telah diselesaikan. Tindakan aturan dapat menambahkan fakta baru ke mesin aturan, yang menyebabkan siklus berlanjut dan juga dikenal sebagai forward chaining.

    Penting

    Algoritma tidak pernah mendahului aturan yang sedang berjalan. Mesin aturan menjalankan semua tindakan dalam aturan yang sedang aktif sebelum fase pencocokan diulang. Namun, aturan lain pada agenda mesin aturan tidak akan berjalan sebelum fase pertandingan dimulai lagi. Fase pencocokan mungkin menyebabkan mesin aturan menghapus aturan-aturan tersebut dari agenda sebelum aturan-aturan itu dijalankan.

Contoh

Contoh berikut menunjukkan cara kerja algoritma tiga tahap kecocokan, resolusi konflik, dan tindakan:

Aturan 1: Mengevaluasi pendapatan

  • Representasi deklaratif

    Dapatkan peringkat kredit pemohon hanya jika rasio pendapatan ke pinjaman pemohon kurang dari 0,2.

  • Representasi IF—THEN menggunakan objek bisnis

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

Aturan 2: Mengevaluasi peringkat kredit

  • Representasi deklaratif

    Setujui pemohon hanya jika peringkat kredit pemohon lebih dari 725.

  • Jika—Maka representasi menggunakan objek bisnis:

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

Tabel berikut ini meringkas fakta:

Fakta Deskripsi Bidang
Aplikasi Dokumen XML yang mewakili aplikasi pinjaman rumah. - Penghasilan: $ 65.000
- SSN: XXX-XX-XXXX
Properti Dokumen XML yang mewakili properti untuk dibeli. - Harga: $225,000
CreditRating Dokumen XML yang berisi peringkat kredit pemohon pinjaman. - Nilai: 0-800
- SSN: XXX-XX-XXXX

Pembaruan memori dan agenda kerja

Awalnya, memori dan agenda kerja mesin aturan kosong. Setelah aplikasi Anda menambahkan fakta Aplikasi dan fakta Properti, mesin aturan akan memperbarui memori kerjanya dan menyusun agenda sesuai yang ditunjukkan.

Memori kerja Jadwal
-Aplikasi
-Harta benda
Aturan 1
  • Mesin aturan menambahkan Aturan 1 ke agendanya karena kondisinya, Application.Income / Property.Price < 0.2, mengevaluasi ke true selama fase pertandingan.

  • Tidak ada fakta CreditRating dalam memori kerja, sehingga kondisi untuk Aturan 2 tidak dievaluasi.

  • Aturan 1 adalah satu-satunya aturan dalam agenda, sehingga aturan dijalankan dan kemudian menghilang dari agenda.

  • Aturan 1 mendefinisikan satu tindakan yang menghasilkan fakta baru, yang merupakan dokumen CreditRating pemohon yang ditambahkan ke memori kerja.

  • Setelah Aturan 1 menyelesaikan eksekusi, kontrol kembali ke fase pencocokan.

    Satu-satunya objek baru yang perlu dicocokkan adalah fakta CreditRating, sehingga hasil dari fase pencocokan adalah sebagai berikut:

    Memori kerja Jadwal
    -Aplikasi
    -Harta benda
    - Peringkat Kredit
    Aturan 2
  • Aturan 2 sekarang dijalankan, yang memanggil fungsi yang mengirim surat persetujuan kepada pemohon.

  • Setelah Aturan 2 selesai, pengendalian kembali ke tahap pencocokan. Namun, tidak ada lagi fakta baru yang tersedia untuk dicocokkan, dan agenda kosong, sehingga penelusuran ke depan berakhir, dan eksekusi aturan selesai.

Agenda dan prioritas

Untuk memahami bagaimana Mesin Aturan Azure Logic Apps mengevaluasi aturan dan menjalankan tindakan, Anda juga harus mempelajari tentang konsep agenda dan prioritas.

Jadwal

Agenda mesin aturan adalah jadwal yang mengantre aturan untuk eksekusi. Agenda ada untuk instans mesin dan beroperasi pada satu aturan, bukan serangkaian aturan. Ketika fakta ditegaskan ke dalam memori kerja, dan kondisi aturan terpenuhi, mesin menempatkan aturan pada agenda dan menjalankan aturan tersebut berdasarkan prioritas. Mesin menjalankan tindakan aturan dari prioritas atas ke bawah, lalu menjalankan tindakan untuk aturan berikutnya pada agenda.

Mesin aturan memperlakukan tindakan dalam aturan sebagai blok, sehingga semua tindakan berjalan sebelum mesin berpindah ke aturan berikutnya. Semua tindakan dalam blok aturan dieksekusi tanpa dipengaruhi oleh tindakan lain di blok tersebut. Untuk informasi selengkapnya tentang pernyataan, lihat Mengoptimalkan mesin aturan Anda dengan fungsi kontrol.

Contoh berikut menunjukkan cara kerja agenda:

Aturan 1

IF
Fact1 == 1
THEN
Action1
Action2

Aturan 2

IF
Fact1 > 0
THEN
Action3
Action4

Ketika fakta Fact1, yang memiliki nilai 1, ditegaskan ke dalam mesin, Baik Aturan 1 maupun Aturan 2 telah memenuhi syaratnya. Jadi, mesin memindahkan kedua aturan ke agenda untuk menjalankan tindakan mereka.

Memori kerja Jadwal
Fakta 1 (nilai=1) Aturan 1:
- Tindakan1
- Tindakan2

Aturan 2:
- Tindakan3
- Aksi4

Prioritas

Secara default, semua aturan diatur ke 0 sebagai prioritas untuk eksekusi. Namun, Anda dapat mengubah prioritas ini pada setiap aturan individual. Prioritas dapat berkisar ke salah satu sisi 0 dengan angka yang lebih besar memiliki prioritas yang lebih tinggi. Mesin menjalankan tindakan dari prioritas tertinggi ke prioritas terendah.

Contoh berikut menunjukkan bagaimana prioritas memengaruhi urutan eksekusi dalam aturan:

Aturan 1 (prioritas = 0)

IF
Fact1 == 1
THEN
Discount = 10%

Aturan 2 (prioritas = 10)

IF
Fact1 > 0
THEN
Discount = 15%

Meskipun kondisi untuk kedua aturan terpenuhi, Aturan 2 dijalankan terlebih dahulu karena prioritasnya yang lebih tinggi. Diskon akhir adalah 10 persen karena hasil dari tindakan yang dijalankan untuk Aturan 1 seperti yang ditunjukkan dalam tabel berikut:

Memori kerja Jadwal
Fakta1 (nilai=1) Aturan 2:
Diskon: 15%

Aturan 1:
Diskon: 10%

Efek samping tindakan dan perilaku cache

Jika eksekusi tindakan memengaruhi status objek atau istilah yang digunakan dalam kondisi, tindakan ini dikatakan memiliki "efek samping" pada objek atau istilah tersebut. Frasa ini tidak berarti bahwa tindakan memiliki efek samping, melainkan, objek atau istilah berpotensi dipengaruhi oleh satu atau beberapa tindakan.

Misalnya, Anda memiliki aturan berikut:

Aturan 1

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

Aturan 2

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

Dalam contoh ini, OrderForm.UpdateStatus memiliki "efek samping" pada OrderForm.Status, yang berarti bahwa OrderForm.Status berpotensi dipengaruhi oleh satu atau beberapa tindakan.

Properti SideEffects pada anggota kelas .NET disetel ke true sebagai nilai default, yang mencegah mesin aturan menyimpan dalam cache anggota yang memiliki efek samping. Dalam contoh ini, mesin aturan tidak menyimpan Cache OrderForm.Status dalam memori kerja. Sebagai gantinya, mesin mendapatkan nilai terbaru OrderForm.Status setiap kali mesin mengevaluasi Aturan 1. Jika nilai properti SideEffects salah, mesin aturan akan menyimpan nilai saat mesin mengevaluasi OrderForm.Status untuk pertama kalinya. Namun, untuk evaluasi nanti dalam skenario penyimpulan maju, mesin menggunakan nilai yang di-cache.

Microsoft Rules Composer saat ini tidak menyediakan cara bagi Anda untuk mengubah nilai properti SideEffects . Namun, Anda dapat secara terprogram mengatur nilai properti SideEffects melalui Kerangka Kerja Aturan Bisnis, yang merupakan pustaka kelas yang sesuai dengan Microsoft .NET. Anda mengatur nilai ini saat mengikat dengan menggunakan kelas ClassMemberBinding untuk menentukan metode objek, properti, dan bidang yang digunakan dalam kondisi dan tindakan aturan. Kelas ClassMemberBinding memiliki properti bernama SideEffects, yang berisi nilai Boolean yang menunjukkan apakah mengakses anggota mengubah nilainya.

Pertimbangan performa

Bagian ini membahas performa Mesin Aturan Azure Logic Apps dalam berbagai skenario dan dengan nilai yang berbeda untuk parameter konfigurasi dan penyetelan.

Jenis fakta

Mesin aturan membutuhkan lebih sedikit waktu untuk mengakses fakta .NET daripada mengakses fakta XML. Jika Anda memiliki pilihan antara menggunakan fakta .NET atau fakta XML dalam set aturan, pertimbangkan untuk menggunakan fakta .NET untuk performa yang lebih baik.

Prioritas aturan

Pengaturan prioritas untuk aturan dapat berada di salah satu sisi 0, di mana angka yang lebih besar memiliki prioritas lebih tinggi. Tindakan dijalankan secara berurutan mulai dari prioritas tertinggi hingga prioritas terendah. Saat set aturan menerapkan perilaku pencarian maju dengan menggunakan Assert atau Update, Anda dapat mengoptimalkan pengaitan dengan menggunakan properti Prioritas.

Misalnya, anggaplah bahwa Aturan 2 memiliki dependensi pada nilai yang ditetapkan oleh Aturan 1. Jika Aturan 1 memiliki prioritas yang lebih tinggi, Aturan 2 hanya dijalankan setelah Aturan 1 diaktifkan dan memperbarui nilai. Sebaliknya, jika Aturan 2 memiliki prioritas yang lebih tinggi, aturan dapat diaktifkan sekali, lalu aktifkan lagi setelah Aturan 1 diaktifkan dan memperbarui fakta dalam kondisi untuk Aturan 2. Skenario ini mungkin atau mungkin tidak menghasilkan hasil yang benar, tetapi jelas, menembak dua kali berdampak pada performa versus menembak hanya sekali.

Untuk informasi selengkapnya, lihat Membuat aturan menggunakan Microsoft Rules Composer.

Operator logika OR.

Mesin aturan dioptimalkan untuk mengeksekusi operator logis AND dan membangun ulang aturan yang diurai mesin ke dalam bentuk normal disjungtif sehingga operator logis OR hanya digunakan di tingkat atas.

Jika Anda menggunakan operator logis OR dalam kondisi, peningkatan tersebut akan menciptakan lebih banyak permutasi yang memperluas jaringan analisis mesin aturan. Akibatnya, mesin aturan mungkin membutuhkan waktu lama untuk menormalkan aturan.

Daftar berikut ini menyediakan kemungkinan solusi untuk masalah ini:

  • Ubah aturan menjadi bentuk normal disjungtif sehingga operator OR hanya berada di tingkat atas.

    Pertimbangkan untuk membuat aturan secara terprogram karena Anda mungkin menemukan bahwa membangun aturan dalam bentuk normal disjunctive di Microsoft Rules Composer bisa rumit.

  • Kembangkan komponen pembantu yang melakukan operasi OR dan mengembalikan nilai Boolean, lalu gunakan komponen dalam aturan.

  • Pisahkan aturan menjadi beberapa aturan dan minta aturan memeriksa bendera yang ditetapkan oleh aturan yang dijalankan sebelumnya, atau gunakan objek yang ditegaskan oleh aturan yang dijalankan sebelumnya, misalnya:

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

      Aturan 2: IF (b == true) THEN …

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

      Aturan 2: IF (c.flag == true) THEN …

Memperbarui panggilan

Fungsi Pembaruan memperbarui fakta yang ada dalam memori kerja mesin aturan, yang menyebabkan evaluasi ulang untuk semua aturan yang menggunakan fakta yang diperbarui dalam kondisi. Perilaku ini berarti Panggilan fungsi pembaruan bisa mahal, terutama jika banyak aturan memerlukan evaluasi ulang karena fakta yang diperbarui. Dalam beberapa situasi, Anda dapat menghindari harus mengevaluasi ulang aturan.

Misalnya, pertimbangkan aturan berikut:

Aturan 1

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

Aturan 2

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

Semua aturan yang tersisa dalam set aturan menggunakan StatusObj.Flag dalam kondisinya. Saat Anda memanggil fungsi Perbarui pada objek StatusObj , semua aturan dievaluasi ulang. Apa pun nilainya di bidang Jumlah , semua aturan kecuali Aturan 1 dan Aturan 2 dievaluasi dua kali: sekali sebelum panggilan Perbarui dan sekali setelah panggilan Perbarui .

Sebagai gantinya, Anda dapat mengatur Bendera ke false sebelum memanggil ruleset, dan kemudian hanya menggunakan Aturan 1 dalam ruleset untuk mengatur Bendera. Dalam hal ini, fungsi Pembaruan hanya dipanggil jika nilai Jumlah lebih besar dari 5. Fungsi Pembaruan tidak dipanggil jika jumlahnya kurang dari atau sama dengan 5. Dengan cara ini, semua aturan kecuali Aturan 1 dan Aturan 2 dievaluasi dua kali hanya jika nilai Jumlah lebih besar dari 5.

Perilaku properti SideEffects dan perilaku pencachingan

Di kelas XmlDocumentFieldBinding dan ClassMemberBinding, properti SideEffects menentukan apakah akan menyimpan nilai bidang, anggota, atau kolom terikat.

Di kelas XmlDocumentFieldBinding, nilai default properti SideEffects adalah false. Namun, di kelas ClassMemberBinding , nilai default properti SideEffects adalah true.

Jadi, jika mesin mengakses bidang dalam dokumen XML untuk kedua kalinya atau berikutnya dalam aturan yang sama, mesin mendapatkan nilai bidang dari cache. Namun, jika mesin mengakses anggota objek .NET untuk kedua kalinya atau lebih baru dalam set aturan, mesin mendapatkan nilai dari objek .NET, bukan dari cache.

Perilaku ini berarti bahwa jika Anda mengatur properti SideEffects di .NET ClassMemberBinding ke false, Anda dapat meningkatkan kinerja karena mesin mendapatkan nilai anggota dari cache mulai dari akses kedua dan seterusnya. Namun, Anda hanya dapat mengatur nilai properti secara terprogram karena Microsoft Rules Composer tidak mengekspos properti SideEffects .

Instans dan selektivitas

Kelas XmlDocumentBinding dan ClassBinding masing-masing memiliki properti berikut, yang digunakan mesin aturan nilainya untuk mengoptimalkan evaluasi kondisi. Nilai properti ini memungkinkan mesin untuk menggunakan instans sekecil mungkin terlebih dahulu dalam evaluasi kondisi lalu menggunakan instans yang tersisa.

  • Instans: Jumlah instans kelas yang diharapkan dalam memori kerja.

    Jika Anda mengetahui jumlah instans objek sebelumnya, Anda dapat mengatur properti Instans ke nomor ini untuk meningkatkan performa.

  • Selektivitas: Persentase instans kelas yang berhasil memenuhi kondisi aturan.

    Jika Anda mengetahui persentase instans objek yang melewati kondisi sebelumnya, Anda dapat mengatur properti Selectivity ke persentase ini untuk meningkatkan performa.

Anda hanya dapat mengatur nilai properti ini secara terprogram karena Microsoft Rules Composer tidak mengeksposnya.

Mendukung pewarisan kelas

Pewarisan adalah kemampuan untuk menggunakan semua fungsionalitas dari kelas yang ada dan memperluas kemampuan tersebut tanpa menulis ulang kelas asli, yang merupakan fitur utama dalam bahasa Object Oriented Programming (OOP).

Mesin Aturan Azure Logic Apps mendukung jenis pewarisan kelas berikut:

  • Pewarisan implementasi: Kemampuan untuk menggunakan properti dan metode kelas dasar tanpa pengodean lain.

  • Pewarisan antarmuka: Kemampuan untuk hanya menggunakan nama properti dan nama metode, tetapi kelas turunan harus memberikan implementasi.

Dengan mesin aturan, Anda dapat menulis aturan dalam hal kelas dasar umum, tetapi objek yang ditegaskan ke dalam mesin aturan dapat berasal dari kelas turunan.

Contoh berikut memiliki kelas dasar bernama Karyawan, sedangkan kelas turunan diberi nama RegularEmployee dan ContractEmployee:

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

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

Untuk contoh ini, asumsikan Anda memiliki aturan berikut:

Aturan 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())

Setelah pernyataan, mesin mengevalidasi ulang semua aturan yang berisi jenis Karyawan atau jenis ContractEmployee dalam kondisinya. Meskipun hanya kelas turunan yang dinyatakan, kelas dasar juga dinyatakan jika aturan ditulis menggunakan metode di kelas dasar, bukan di kelas turunan.