Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam artikel ini, Anda akan menemukan jawaban atas pertanyaan paling umum tentang .NET Orleans. Jika Anda memiliki pertanyaan yang tidak dijawab di sini, silakan tanyakan kepada tim produk dengan memposting masalah di repositori GitHub.
Ketersediaan
Dapatkah saya bebas menggunakan Orleans dalam proyek saya?
Benar sekali. Kode sumber dilisensikan di bawah lisensi MIT. Paket NuGet diterbitkan di nuget.org.
Apakah Orleans siap untuk produksi? Kudengar itu proyek penelitian.
Orleans dimulai sebagai proyek penelitian dalam Microsoft Research. Produk ini kemudian tumbuh menjadi produk siap produksi dan telah digunakan dalam produksi dalam Microsoft (sejak 2011) dan oleh perusahaan lain (sejak dirilis secara publik pada 2015). Orleans mendukung banyak sistem dan layanan cloud yang sangat tersedia.
Apakah Microsoft mendukung Orleans?
Microsoft merilis kode Orleans sumber di bawah lisensi MIT di GitHub. Microsoft terus berinvestasi Orleans dan menerima kontribusi komunitas ke basis kode.
Posisi
Apakah Orleans produk server? Bagaimana cara menjalankan Orleans?
Orleans adalah kerangka kerja, sekumpulan pustaka, yang membantu Anda membangun aplikasi. OrleansAplikasi berbasis dapat dijalankan di berbagai lingkungan hosting, di Cloud atau di kluster lokal, atau bahkan pada satu komputer. Ini adalah tanggung jawab pengembang aplikasi untuk membangun, menyebarkan, dan menjalankan Orleansaplikasi berbasis di lingkungan hosting target mereka.
Di mana saya bisa menjalankan Orleans?
Orleans dapat berjalan di lingkungan mana pun di mana aplikasi .NET dapat berjalan. Sebelum Orleans 2.0, diperlukan .NET Framework lengkap. Dimulai dengan 2.0, Orleans sesuai dengan .NET Standard 2.0, dan karenanya dapat berjalan pada .NET Core di lingkungan Windows dan non-Windows yang mendukung .NET Core.
Apakah Orleans dibuat untuk Azure?
Tidak. Kami percaya bahwa Anda harus dapat menjalankan Orleans di mana saja yang Anda butuhkan, seperti yang Anda butuhkan. Orleans sangat fleksibel dan memiliki beberapa penyedia opsional yang membantu menghostingnya di lingkungan cloud, seperti Azure, AWS atau GCP, atau di kluster lokal, dengan pilihan teknologi untuk mendukung Orleans' protokol pengklusteran.
Apa perbedaan antara Orleans dengan bahasa atau kerangka kerja aktor lainnya, seperti Erlang atau Akka?
Meskipun berdasarkan prinsip dasar yang sama dari Model Aktor, Orleans mengambil langkah maju dan memperkenalkan gagasan Aktor Virtual yang sangat menyederhanakan pengalaman pengembang dan jauh lebih cocok untuk layanan cloud dan sistem skala tinggi.
Desain
Seberapa besar atau seberapa kecil biji-bijian dalam aplikasi saya?
Model isolasi biji-bijian membuat mereka sangat pandai mewakili konteks status dan komputasi yang terisolasi secara independen. Dalam kebanyakan kasus, biji-bijian secara alami memetakan ke entitas aplikasi seperti pengguna, sesi, akun. Entitas tersebut umumnya diisolasi satu sama lain, dapat diakses dan diperbarui secara independen, dan mengekspos serangkaian operasi yang didukung yang terdefinisi dengan baik. Ini bekerja dengan baik dengan pemodelan "satu entitas, satu butir" yang intuitif.
Entitas aplikasi mungkin terlalu besar untuk dapat diwakili secara efisien oleh satu unit jika merangkum terlalu banyak status, dan akibatnya, harus menangani tingkat permintaan yang tinggi terhadapnya. Meskipun satu butir umumnya dapat menangani hingga beberapa ribu panggilan sepele per detik, aturan praktisnya adalah waspada terhadap butir individu yang menerima ratusan permintaan per detik. Itu mungkin tanda biji-bijian terlalu besar, dan menguraikannya menjadi satu set biji-bijian yang lebih kecil dapat menyebabkan sistem yang lebih stabil dan seimbang.
Entitas aplikasi mungkin terlalu kecil untuk menjadi sebuah grain jika hal itu akan menyebabkan interaksi konstan dari grains lain dengannya, dan sebagai hasilnya, menyebabkan terlalu banyak overhead pesan. Dalam kasus seperti itu, mungkin lebih masuk akal untuk menggabungkan entitas yang berinteraksi erat menjadi bagian dari satu unit, sehingga mereka akan berkomunikasi langsung satu sama lain.
Bagaimana cara mengatasi titik panas pada biji-bijian?
Laju aliran data dibatasi pada satu utas tempat aktivasinya dapat dijalankan. Oleh karena itu, disarankan untuk menghindari desain di mana satu butir menerima bagian permintaan yang tidak proporsional atau terlibat dalam pemrosesan permintaan ke biji-bijian lain. Berbagai pola membantu mencegah kelebihan beban satu butir bahkan ketika secara logis itu adalah titik pusat komunikasi.
Misalnya, jika biji-bijian adalah agregator dari beberapa penghitung atau statistik yang dilaporkan oleh sejumlah besar biji-bijian secara teratur, salah satu pendekatan yang terbukti adalah menambahkan sejumlah butir agregator perantara yang terkontrol dan menetapkan masing-masing butir pelaporan (menggunakan modulo pada kunci atau hash) ke agregator perantara, sehingga beban lebih atau kurang didistribusikan secara merata di semua butir agregator perantara yang pada gilirannya secara berkala melaporkan agregat parsial ke butir agregator pusat.
Bagaimana caranya
Bagaimana cara merobek biji-bijian?
Secara umum, tidak perlu logika aplikasi untuk memaksa penonaktifan biji-bijian, karena Orleans runtime secara otomatis mendeteksi dan menonaktifkan aktivasi menganggur biji-bijian untuk mengklaim kembali sumber daya sistem. Membiarkan Orleans melakukan itu lebih efisien karena membuat batch operasi penonaktifan daripada mengeksekusinya satu per satu. Dalam kasus yang jarang terjadi ketika Anda pikir Anda perlu mempercepat pennonaktifkan biji-bijian, biji-bijian dapat melakukannya dengan memanggil DeactivateOnIdle()metode '.
Bisakah saya memberi tahu Orleans di mana mengaktifkan biji-bijian?
Dimungkinkan untuk melakukannya menggunakan strategi penempatan terbatas, tetapi kami umumnya menganggap ini pola yang agak canggih yang membutuhkan pertimbangan yang cermat. Dengan melakukan apa yang disarankan oleh pertanyaan, aplikasi akan mengambil beban manajemen sumber daya tanpa harus memiliki informasi yang cukup tentang status global sistem untuk melakukannya dengan baik. Ini terutama kontra-produktif dalam kasus memulai ulang silo, yang di lingkungan cloud dapat terjadi secara teratur untuk memperbarui OS. Dengan demikian, penempatan tertentu dapat merusak skalabilitas aplikasi Anda serta ketahanan terhadap kegagalan sistem.
Meski begitu, untuk kasus langka di mana aplikasi memang tahu di mana butir tertentu harus diaktifkan, misalnya, jika mengetahui lokalitas status persisten butir, dalam 1.5.0 kami memperkenalkan kebijakan penempatan kustom dan pengarah.
Bagaimana Anda membuat versi biji-bijian atau menambahkan kelas dan antarmuka butir baru?
Anda dapat menambahkan silo dengan kelas biji-bijian baru atau versi baru dari kelas biji-bijian yang ada ke kluster yang sedang berjalan.
Dapatkah saya terhubung ke Orleans silo dari internet publik?
Orleans dirancang untuk dihosting sebagai bagian back-end dari layanan, dan Anda diharapkan untuk membuat tingkat front-end tempat klien eksternal akan terhubung. Ini bisa menjadi proyek WEB API berbasis HTTP, server soket, server SignalR, atau apa pun yang sesuai dengan kebutuhan aplikasi. Anda dapat terhubung ke Orleans dari Internet jika Anda mengekspos titik akhir silo TCP ke sana, tetapi itu bukan praktik yang bijaksana dari sudut pandang keamanan.
Apa yang terjadi jika silo gagal sebelum panggilan biji-bijian saya mengembalikan respons untuk panggilan saya?
Jika terjadi kegagalan silo di tengah proses pengolahan biji-bijian, Anda akan menerima pengecualian yang dapat Anda tangkap dalam kode Anda dan mencoba kembali atau melakukan hal lain untuk menangani kesalahan tersebut sesuai dengan logika pengolahan aplikasi Anda. Biji-bijian yang terkait dengan silo dan mengalami kegagalan akan secara otomatis diaktifkan kembali pada panggilan berikutnya. Orleans Runtime tidak dengan bersemangat membuat ulang biji-bijian dari silo yang gagal karena banyak dari mereka mungkin tidak diperlukan segera atau sama sekali. Sebaliknya, runtime membuat ulang biji-bijian tersebut satu per satu dan hanya ketika permintaan baru tiba untuk butir tertentu. Untuk setiap biji-bijian, ia memilih salah satu silo yang tersedia sebagai tempat baru.
Manfaat dari pendekatan ini adalah bahwa proses pemulihan dilakukan hanya untuk biji-bijian yang digunakan dan tersebar tepat waktu dan di semua silo yang tersedia, yang meningkatkan responsivitas sistem dan kecepatan pemulihan. Perhatikan juga bahwa ada penundaan antara waktu ketika silo gagal dan ketika Orleans kluster mendeteksi kegagalan. Penundaan adalah kompromi yang dapat dikonfigurasi antara kecepatan deteksi dan kemungkinan positif palsu. Selama periode transisi ini, semua panggilan ke biji-bijian akan gagal, tetapi setelah deteksi kegagalan, biji-bijian akan dibuat, setelah panggilan baru ke dalamnya, pada silo lain, sehingga akhirnya akan tersedia.
Apa yang terjadi jika panggilan biji-bijian membutuhkan waktu terlalu lama untuk dijalankan?
Karena Orleans menggunakan model multitugas kooperatif, sistem ini tidak akan menghentikan sementara eksekusi grain secara otomatis, tetapi Orleans menghasilkan peringatan untuk panggilan grain yang dieksekusi lama sehingga Anda dapat mendeteksinya. Multitasking kooperatif memiliki throughput yang jauh lebih baik dibandingkan dengan multitasking pra-emptif. Perlu diingat bahwa panggilan grain tidak boleh menjalankan tugas yang berjalan lama seperti operasi IO secara sinkron dan tidak boleh memblokir tugas lain untuk diselesaikan. Semua menunggu harus dilakukan secara asinkron menggunakan await
kata kunci atau mekanisme tunggu asinkron lainnya. Biji-bijian harus kembali sesegera mungkin untuk memungkinkan biji-bijian lain dieksekusi demi mencapai throughput maksimum.