Ini adalah posting tamu dari tim Orleans. Orleans adalah kerangka kerja lintas platform untuk membangun aplikasi terdistribusi dengan .NET. Untuk informasi lebih lanjut, lihat https://github.com/dotnet/orleans .Kami sangat senang mengumumkan rilis Orleans 3.0. Sejumlah besar perbaikan dan perbaikan masuk, serta beberapa fitur baru, sejak Orleans 2.0. Perubahan ini didorong oleh pengalaman banyak orang menjalankan aplikasi berbasis Orleans dalam produksi dalam berbagai skenario dan lingkungan, dan oleh kecerdikan dan semangat komunitas global Orleans yang selalu berusaha untuk membuat basis kode lebih baik, lebih cepat, dan lebih banyak lagi fleksibel. Terima kasih banyak untuk semua yang berkontribusi pada rilis ini dengan berbagai cara!

Perubahan besar sejak Orleans 2.0
Orleans 2.0 dirilis sedikit lebih dari 18 bulan yang lalu dan sejak itu Orleans telah membuat langkah signifikan. Beberapa perubahan judul sejak 2.0 adalah:
- Transaksi ACID terdistribusi - banyak biji-bijian dapat bergabung dalam suatu transaksi tanpa memperhatikan di mana negara mereka disimpan
- Penjadwal baru, yang sendirian meningkatkan kinerja lebih dari 30% dalam beberapa kasus
- Generator kode baru berdasarkan analisis kode Roslyn
- Keanggotaan cluster yang ditulis ulang untuk meningkatkan kecepatan pemulihan
- Dukungan co-hosting
Serta banyak, banyak perbaikan dan perbaikan lainnya.
Sejak bekerja di Orleans 2.0, tim membentuk siklus yang baik dalam mengimplementasikan atau mengintegrasikan fitur-fitur tertentu, seperti host generik, opsi bernama, dalam kerja sama erat dengan tim .NET sebelum fitur-fitur tersebut siap menjadi bagian dari .NET Rilis inti, kontribusi umpan balik dan peningkatan "upstream", dan dalam rilis selanjutnya beralih ke implementasi akhir mereka yang dikirimkan bersama dengan rilis .NET. Selama pengembangan Orleans 3.0, siklus ini berlanjut, dengan kode Bedrock digunakan oleh Orleans 3.0.0-beta1 sebelum akhirnya dikirim sebagai bagian dari .NET 3.0. Demikian pula, dukungan untuk TLS pada koneksi soket TCP diimplementasikan sebagai bagian dari Orleans 3.0, dan dimaksudkan untuk menjadi bagian dari rilis .NET Core di masa depan. Kami melihat kolaborasi berkelanjutan ini sebagai kontribusi kami terhadap ekosistem .NET yang lebih besar, dalam semangat Open Source yang sebenarnya.
Penggantian lapisan jaringan dengan ASP.NET Bedrock
Dukungan untuk mengamankan komunikasi dengan
TLS telah menjadi permintaan utama untuk beberapa waktu, baik dari
komunitas maupun dari mitra internal. Dengan rilis 3.0 kami memperkenalkan dukungan TLS, tersedia melalui paket
Microsoft.Orleans.Connections.Security . Untuk informasi lebih lanjut, lihat
sampel TransportLayerSecurity .
Mengimplementasikan dukungan TLS adalah pekerjaan utama karena bagaimana lapisan jaringan di versi Orleans sebelumnya diimplementasikan: itu tidak dapat dengan mudah diadaptasi untuk menggunakan
SslStream
, yang merupakan metode paling umum untuk menerapkan TLS. Dengan TLS sebagai kekuatan pendorong kami, kami memulai perjalanan untuk menulis ulang lapisan jaringan Orleans.
Orleans 3.0 menggantikan seluruh lapisan jaringannya dengan lapisan yang dibangun di atas
Project Bedrock , sebuah inisiatif dari tim ASP.NET. Tujuan dari Bedrock adalah membantu pengembang untuk membangun klien dan server jaringan yang cepat dan tangguh.
Tim ASP.NET dan tim Orleans bekerja bersama untuk merancang abstraksi yang mendukung klien jaringan dan server, bersifat agnostik transportasi, dan dapat dikustomisasi menggunakan middleware. Abstraksi ini memungkinkan kami untuk mengubah transportasi jaringan melalui konfigurasi, tanpa memodifikasi kode jaringan internal Orleans. Dukungan TLS Orleans diimplementasikan sebagai middleware Bedrock dan niat kami adalah agar ini dibuat generik sehingga dapat dibagikan dengan orang lain di ekosistem .NET.
Meskipun dorongan untuk melakukan ini adalah untuk mengaktifkan dukungan TLS, kami melihat peningkatan sekitar 30% dalam rata-rata dalam uji beban malam kami.
MemoryPool<byte>
ulang layer jaringan juga melibatkan penggantian
MemoryPool<byte>
buffer kustom kami dengan mengandalkan
MemoryPool<byte>
dan dalam melakukan perubahan ini, serialisasi sekarang mengambil keuntungan lebih dari
Span<T>
. Beberapa jalur kode yang sebelumnya mengandalkan pemblokiran melalui utas khusus yang memanggil
BlockingCollection<T>
sekarang menggunakan
Channel<T>
untuk meneruskan pesan secara tidak sinkron. Ini menghasilkan lebih sedikit utas khusus, memindahkan pekerjaan ke kumpulan .NET gantinya.
Protokol kawat inti untuk Orleans telah diperbaiki sejak rilis awal. Dengan Orleans 3.0, kami telah menambahkan dukungan untuk meningkatkan secara progresif protokol jaringan melalui negosiasi protokol. Dukungan negosiasi protokol yang ditambahkan di Orleans 3.0 memungkinkan peningkatan di masa mendatang, seperti menyesuaikan serializer inti, sambil mempertahankan kompatibilitas ke belakang. Salah satu manfaat dari protokol jaringan baru adalah dukungan untuk koneksi silo-ke-silo dupleks-penuh daripada pasangan koneksi simpleks yang dibuat antara silo sebelumnya. Versi protokol dapat dikonfigurasi melalui
ConnectionOptions.ProtocolVersion
.
Hosting bersama melalui Generic Host
Hosting bersama Orleans dengan kerangka kerja lain, seperti ASP.NET Core, dalam proses yang sama sekarang lebih mudah daripada sebelumnya berkat
.NET Generic Host .
Berikut adalah contoh menambahkan Orleans bersama ASP.NET Core ke host menggunakan
UseOrleans
:
var host = new HostBuilder() .ConfigureWebHostDefaults(webBuilder => {
Menggunakan pembangun host generik, Orleans akan berbagi penyedia layanan dengan layanan host lainnya. Ini memberikan akses layanan ini ke Orleans. Misalnya, pengembang dapat menyuntikkan
IClusterClient
atau
IGrainFactory
ke dalam
IGrainFactory
ASP.NET Core MVC dan memanggil biji-bijian langsung dari aplikasi MVC mereka.
Fungsi ini dapat digunakan untuk menyederhanakan topologi penempatan Anda atau untuk menambahkan fungsionalitas tambahan ke aplikasi yang ada. Beberapa tim secara internal menggunakan hosting bersama untuk menambah
daya tarik dan kesiapan Kubernetes ke silo Orleans mereka menggunakan
ASP.NET Core Health Checks .
Peningkatan keandalan
Cluster sekarang pulih lebih cepat dari kegagalan berkat gosip yang diperpanjang. Dalam versi Orleans sebelumnya, silo akan mengirim pesan gosip keanggotaan ke silo lain, memerintahkan mereka untuk memperbarui informasi keanggotaan. Pesan-pesan gosip sekarang termasuk snapshot keanggotaan cluster yang berversi dan tidak dapat diubah. Ini meningkatkan waktu konvergensi setelah silo bergabung atau meninggalkan cluster (misalnya selama peningkatan, penskalaan, atau setelah kegagalan) dan mengurangi pertikaian di toko keanggotaan bersama, memungkinkan transisi cluster yang lebih cepat. Deteksi kegagalan juga telah ditingkatkan, dengan lebih banyak pesan dan penyempurnaan diagnostik untuk memastikan deteksi yang lebih cepat dan lebih akurat. Deteksi kegagalan melibatkan silo dalam sebuah cluster yang secara kolaboratif memantau satu sama lain, dengan masing-masing silo mengirimkan pemeriksaan kesehatan berkala ke subset silo lainnya. Silo dan klien juga sekarang secara proaktif memutuskan sambungan dari silo yang telah dinyatakan mati dan mereka akan menolak koneksi ke silo tersebut.
Kesalahan pesan sekarang ditangani lebih konsisten, sehingga kesalahan segera disebarkan kembali ke pemanggil. Ini membantu pengembang untuk menemukan kesalahan lebih cepat. Misalnya, ketika pesan tidak dapat sepenuhnya serial atau deserialized, pengecualian rinci akan disebarkan kembali ke pemanggil asli.
Ekstensibilitas yang ditingkatkan
Streaming sekarang dapat memiliki adaptor data khusus, yang memungkinkan mereka untuk menelan data dalam format apa pun. Ini memberi pengembang kontrol yang lebih besar atas bagaimana aliran item direpresentasikan dalam penyimpanan. Ini juga memberi penyedia aliran kendali atas bagaimana data ditulis, memungkinkan steam untuk berintegrasi dengan sistem lama dan / atau layanan non-Orleans.
Ekstensi butir memungkinkan perilaku tambahan untuk ditambahkan ke butir saat runtime dengan melampirkan komponen baru dengan antarmuka komunikasinya sendiri. Misalnya, transaksi Orleans menggunakan ekstensi butir untuk menambahkan metode siklus hidup transaksi, seperti
Siapkan ,
Komit , dan
Batalkan , ke butir secara transparan kepada pengguna. Ekstensi Grain sekarang juga tersedia untuk Grain Services dan Target Sistem.
Status transaksional khusus sekarang dapat menyatakan peran apa yang dapat dipenuhi dalam suatu transaksi. Sebagai contoh, implementasi keadaan transaksional yang menulis peristiwa siklus hidup transaksi ke antrian Bus Layanan tidak dapat memenuhi tugas manajer transaksi karena hanya menulis.
Strategi penempatan yang sudah ditentukan sebelumnya dapat diakses secara publik, sehingga direktur penempatan apa pun dapat diganti selama waktu konfigurasi.
Bergabunglah dengan upaya
Sekarang Orleans 3.0 sudah di depan mata, kami mengalihkan perhatian ke rilis mendatang - dan kami memiliki beberapa rencana menarik! Datang dan bergabunglah dengan komunitas kami yang hangat dan ramah di
GitHub dan
Gitter dan bantu kami mewujudkan rencana ini.
Tim Orleans