Bagikan melalui


Grain pekerja tanpa status

Secara default, Orleans runtime membuat tidak lebih dari satu aktivasi biji-bijian dalam kluster. Ini adalah ekspresi paling intuitif dari model Aktor Virtual dengan setiap butir yang sesuai dengan entitas dengan jenis/identitas unik. Namun, ada juga kasus ketika aplikasi perlu melakukan operasi stateless fungsi yang tidak terkait dengan entitas tertentu dalam sistem. Misalnya, jika klien mengirim permintaan dengan payload terkompresi yang perlu didekompresi sebelum dapat dirutekan ke butir target untuk diproses, logika dekompresi/perutean tersebut tidak terkait dengan entitas tertentu dalam aplikasi, dan dapat dengan mudah diskalakan.

StatelessWorkerAttribute Ketika diterapkan ke kelas biji-bijian, itu menunjukkan pada Orleans runtime bahwa biji-bijian kelas tersebut harus diperlakukan sebagai biji-bijian pekerja tanpa status. Biji-bijian pekerja tanpa status memiliki properti berikut yang membuat eksekusi mereka sangat berbeda dari kelas biji-bijian normal.

  1. Orleans Runtime dapat dan akan membuat beberapa aktivasi biji-bijian pekerja tanpa status pada silo kluster yang berbeda.
  2. Permintaan yang dibuat untuk biji-bijian pekerja stateless dijalankan secara lokal selama silo kompatibel, dan oleh karena itu mereka tidak akan dikenakan biaya jaringan atau serialisasi. Jika silo lokal tidak kompatibel, permintaan diteruskan ke silo yang kompatibel.
  3. Orleans Runtime secara otomatis membuat aktivasi tambahan dari biji-bijian pekerja tanpa status jika yang sudah ada sibuk. Jumlah maksimum aktivasi pekerja stateless yang dibuat runtime per silo dibatasi secara default dengan jumlah inti CPU pada komputer, kecuali ditentukan secara eksplisit oleh argumen opsional maxLocalWorkers .
  4. Karena 2 dan 3, aktivasi biji-bijian pekerja tanpa status tidak dapat diatasi secara individual. Dua permintaan berikutnya ke butir pekerja tanpa status dapat diproses oleh aktivasi yang berbeda darinya.

Biji-bijian pekerja tanpa status menyediakan cara mudah untuk membuat kumpulan aktivasi biji-bijian yang dikelola secara otomatis yang secara otomatis meningkatkan dan menurunkan skala berdasarkan beban aktual. Runtime selalu memindai aktivasi biji-bijian pekerja tanpa status yang tersedia dalam urutan yang sama. Karena itu, ia selalu mengirimkan permintaan ke aktivasi lokal menganggur pertama yang dapat ditemukannya dan hanya sampai ke yang terakhir jika semua aktivasi sebelumnya sibuk. Jika semua aktivasi sibuk dan batas aktivasi belum tercapai, aktivasi akan membuat satu aktivasi lagi di akhir daftar dan mengirimkan permintaan ke dalamnya. Itu berarti bahwa ketika tingkat permintaan ke biji-bijian pekerja tanpa status meningkat, dan aktivasi yang ada saat ini sibuk, runtime memperluas kumpulan aktivasinya hingga batas. Sebaliknya, ketika beban turun, dan dapat ditangani oleh sejumlah kecil aktivasi biji-bijian pekerja tanpa status, aktivasi di ekor daftar tidak akan mendapatkan permintaan yang dikirim kepada mereka. Mereka akan menjadi menganggur, dan akhirnya dinonaktifkan oleh proses pengumpulan aktivasi standar. Oleh karena itu, kumpulan aktivasi pada akhirnya akan menyusut agar sesuai dengan beban.

Contoh berikut mendefinisikan kelas MyStatelessWorkerGrain biji-bijian pekerja tanpa status dengan batas nomor aktivasi maksimum default.

[StatelessWorker]
public class MyStatelessWorkerGrain : Grain, IMyStatelessWorkerGrain
{
    // ...
}

Melakukan panggilan ke biji-bijian pekerja tanpa status sama dengan biji-bijian lainnya. Satu-satunya perbedaan adalah bahwa dalam banyak kasus ID biji-bijian tunggal digunakan, misalnya 0 atau Guid.Empty. Beberapa ID biji-bijian dapat digunakan saat memiliki beberapa kumpulan biji-bijian pekerja tanpa status, satu per ID diinginkan.

var worker = GrainFactory.GetGrain<IMyStatelessWorkerGrain>(0);
await worker.Process(args);

Yang satu ini mendefinisikan kelas biji-bijian pekerja tanpa status tanpa lebih dari aktivasi satu butir per silo.

[StatelessWorker(1)] // max 1 activation per silo
public class MyLonelyWorkerGrain : ILonelyWorkerGrain
{
    //...
}

Perhatikan bahwa StatelessWorkerAttribute tidak mengubah masuknya kembali kelas butir target. Sama seperti biji-bijian lainnya, biji-bijian pekerja tanpa status tidak masuk kembali secara default. Mereka dapat secara eksplisit dibuat masuk kembali dengan menambahkan ReentrantAttribute ke kelas biji-bijian.

Provinsi

Bagian "stateless" dari "pekerja tanpa status" tidak berarti bahwa pekerja tanpa status tidak dapat memiliki status dan hanya terbatas untuk menjalankan operasi fungsional. Seperti biji-bijian lainnya, biji-bijian pekerja tanpa status dapat dimuat dan disimpan dalam memori dalam keadaan apa pun yang dibutuhkannya. Ini hanya karena beberapa aktivasi biji-bijian pekerja stateless dapat dibuat pada silo kluster yang sama dan berbeda, tidak ada mekanisme mudah untuk mengoordinasikan status yang dipegang oleh aktivasi yang berbeda.

Beberapa pola yang berguna melibatkan status penahanan pekerja tanpa status.

Menskalakan item singgahan panas

Untuk item singgahan panas yang mengalami throughput tinggi, memegang setiap item tersebut dalam butir pekerja tanpa status membuatnya:

  1. Secara otomatis meluaskan skala dalam silo dan di semua silo dalam kluster, dan;
  2. Membuat data selalu tersedia secara lokal pada silo yang menerima permintaan klien melalui gateway kliennya, sehingga permintaan dapat dijawab tanpa hop jaringan tambahan ke silo lain.

Mengurangi agregasi gaya

Dalam beberapa skenario, aplikasi perlu menghitung metrik tertentu di semua butir jenis tertentu dalam kluster dan melaporkan agregat secara berkala. Contohnya adalah melaporkan beberapa pemain per peta game, durasi rata-rata panggilan VoIP, dll. Jika masing-masing dari ribuan atau jutaan butir melaporkan metrik mereka ke satu agregator global, agregator akan segera kelebihan beban tidak dapat memproses banjir laporan. Pendekatan alternatifnya adalah mengubah tugas ini menjadi langkah 2 (atau lebih) untuk mengurangi agregasi gaya. Lapisan agregasi pertama dilakukan dengan melaporkan grain yang mengirimkan metrik mereka ke butir pra-agregasi pekerja tanpa status. Orleans Runtime akan secara otomatis membuat beberapa aktivasi biji-bijian pekerja tanpa status dengan setiap silo. Karena semua panggilan tersebut akan diproses secara lokal tanpa panggilan jarak jauh atau serialisasi pesan, biaya agregasi tersebut akan secara signifikan kurang dari dalam kasus jarak jauh. Sekarang masing-masing aktivasi grain pekerja tanpa status pra-agregasi, secara independen atau berkoordinasi dengan aktivasi lokal lainnya, dapat mengirim laporan agregat mereka ke agregator akhir global (atau ke lapisan pengurangan lain jika perlu) tanpa membebaninya secara berlebihan.