Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 5085|Jawab: 1

[Sumber] Aktor virtual: Dapr vs Orleans

[Salin tautan]
Diposting pada 29/12/2022 14.24.52 | | | |
Selama seminggu terakhir, saya telah menjelajah ke pengembangan perangkat lunak dengan meneliti konsep aktor virtual. Saya akhirnya melihat dua kerangka kerja yang berbeda: Dapr dan Orleans.

Keduanya adalah proyek yang sangat ringkas dengan banyak kasus penggunaan yang menarik. Keduanya menggunakan ide aktor "virtual". Aktor virtual adalah unit status dan logika yang:

  • Itu dapat diidentifikasi secara unik dengan ID
  • Ini berulir tunggal
  • Dapat dalam memori atau persisten - siklus hidupnya dikelola oleh kerangka kerja


Saya sangat menyukai ide aktor virtual dan merasa mereka sangat membantu dalam eksplorasi saya dalam membangun alat yang dapat diskalakan dan andal untuk menangani alur kerja tugas yang kompleks. Jika setiap tugas adalah peserta virtual berutas tunggal, masalah kondisi balapan akan hilang.

Karena Orleans dan Dapr sama-sama proyek Microsoft, saya membayangkan hari dalam pertarungan gaya Western Story di kafetaria Microsoft.

Orleans

Saya mulai dengan Orleans karena sudah ada di radar saya untuk sementara waktu setelah melihat beberapa video tentangnya di YouTube. Awalnya sangat buruk karena saya pikir saya akan menggunakan versi 4.x dari semua paket NuGet mereka. Namun, sama sekali tidak ada dokumentasi mereka yang berfungsi dengan paket 4.x. Saya akhirnya menggunakan versi 3.6.2.

Biji-bijian / Negara Bagian / Pengatur Waktu

Membuat butir yang melacak keadaannya sendiri dan melakukan tindakan sangat sederhana. Saya bahkan dapat mengikuti dokumentasi untuk persistensi biji-bijian dan membuat implementasi CosmosDB (SQL API) IHAADE saya sendiri.

Pengingat

Pengingat juga mudah diatur. Sampai saya mencoba mengonfigurasi ketekunan dunia nyata untuk mereka. Pada titik ini dalam penelitian saya, saya mencoba menjaga semuanya tetap rapi dan menyimpan semuanya di ComsosDB. Sayangnya, saya tidak bisa membuat paket ketekunan pengingat Orleans berfungsi sama sekali. Saya akhirnya harus beralih ke paket AzureStorage. Jadi sekarang data saya setengah di akun SQL API dan setengah di akun API tabel.

Sungai

Di situlah saya tidak berjalan dengan baik. Di Orleans, alur diidentifikasi oleh GUID dan namespace opsional. Saya yakin ada alasan bagus mengapa aliran harus diidentifikasi oleh GUID, tetapi wow, itu tidak praktis.

Saya sangat frustrasi dengan streaming karena saya dapat membuatnya dengan mudah, tetapi begitu saya berhenti dan memulai ulang proyek saya dan memicu peristiwa baru, semuanya macet.

Ini diikuti oleh informasi yang sangat berharga, karena saya membutuhkan waktu 8 jam untuk merekayasa balik kode Orleans untuk mengetahuinya:

Saat butir adalah pelanggan aliran, butir harus memanggil ResumeAsync pada handel langganan dalam metode OnActivateAsync-nya, atau Anda akan mengalami error yang tidak dikenali.

Saya juga memiliki masalah langganan yang sama yang diduplikasi, jadi saya menggunakan kode untuk menghapus semua langganan butir dan kemudian membuatnya ulang:


Orleans Gotchas / Tips Lainnya

Aliran berfungsi dengan baik dengan Azure Event Hubs (melalui AddEventHubStreams).

Jangan gunakan / atau karakter khusus lainnya dalam nama Grain dari CosmosDB SQL API!

Kesimpulan Orleans

Saya suka Orleans dan saya pikir itu memiliki potensi. Namun, ia memiliki kurva belajar yang sangat curam. Karena perjuangan panjang saya dengan streaming, saya tidak punya waktu untuk mempelajari cara kerja kluster/penyebaran.

Dapr

Saya menemukan Dapr dengan mencari alternatif untuk Orleans. Agak aneh bahwa ini juga merupakan proyek yang disponsori Microsoft. Mungkin mereka di sini untuk mengambil pendekatan bertahan hidup yang terkuat. Jika ya, saya pikir Dapr akan menjadi penyintas.

Pertama, desain berbasis REST/gRPC DPR memungkinkan aktor untuk diimplementasikan menggunakan bahasa pemrograman apa pun. Saya juga merasa sepele untuk menjalankan semuanya (peserta, status, timer, pengingat, acara) pada satu instance Redis. Selain itu, saya hanya membutuhkan sekitar sepertiga dari waktu untuk mulai menggunakan Dapr. Waktu startup yang begitu cepat adalah karena dokumentasi Dapr yang sangat baik.

Aktor / Pengatur Waktu / Pengingat

Apakah saya baru saja mengatakan bahwa dokumentasi Dapr bagus? Yah, itu ada di mana-mana, kecuali untuk contoh JavaScript. Saya menghabiskan sebagian besar waktu saya di Dapr, mencoba mencari cara memanggil metode pada aktor. Kode untuk sampel Dapr Javascript adalah sebagai berikut:

Ini jelas ketinggalan zaman. Saya harus menghabiskan banyak waktu untuk membujuk ketiga baris ini melalui eksplorasi kode uji/sampel Dapr

Contoh kode untuk mendapatkan/mengatur status memiliki masalah serupa, jadi saya membuat masalah GitHub untuk mereka.

Kecuali untuk masalah kecil itu, menyiapkan aktor adalah sepotong kue.

Mengatur pengatur waktu dan pengingat untuk pemeran saya juga sangat mudah.

Negara

Saya dapat mengonfigurasi Dapr untuk bertahan dengan Postgres dengan sangat mudah.

Satu hal yang saya perhatikan adalah bahwa mungkin ada masalah skalabilitas dengan cara pengingat disimpan. Dapr menyimpan semua pemberitahuan untuk jenis peserta tertentu dalam satu array JSON. Apa yang terjadi jika seseorang memiliki banyak pengingat?



Dapr Gotchas / Tips Lainnya

Satu hal yang saya perhatikan saat menelusuri kode untuk JavaScript SDK adalah tidak banyak komentar di basis kode sama sekali. Ini membuatnya hampir tidak mungkin untuk mengetahui sesuatu. Misalnya, dalam metode addOrUpdateState manajer status, ada parameter ketiga yang disebut updateValueFactory. Jika tidak ada komentar dalam kode, hampir tidak mungkin untuk mengetahui untuk apa panggilan balik tersebut.

Saya juga tidak yakin seberapa besar saya menyukai perintah "dapr init" yang mencoba mengatur dan menjalankan kontainer redis untuk saya. Bagaimana jika saya sudah memiliki wadah redis? Bagaimana jika saya ingin menggunakan postgres sebagai gantinya? Saya tidak dapat menemukan dokumentasi yang menjelaskan cara mengubah fitur dapr init.

Catatan untuk siapa saja yang mengalami kesulitan menggunakan pubsub. Anda harus menggunakan "dapr run" untuk menjalankan penerbit dan subscriber Anda:

Untuk aktor dan pubsub, perhatikan bahwa penting untuk menggunakan parameter --app-port untuk memberi tahu dapr port mana yang dijalankan layanan Anda. pubsub event dan actor call dikirim ke layanan Anda dari sidecar Dapr melalui panggilan http, jadi perlu tahu ke mana harus mengirimkannya:

Saya menguji "cluster" kecil yang dihosting sendiri oleh Dapr dengan meluncurkan instance pelanggan pubsub saya di dua mesin berbeda di jaringan rumah saya. Itu hanya berhasil!

Kesimpulan Dapr

Jika Anda ingin mengetahui lebih banyak ide tentang aplikasi terdistribusi atau aktor virtual, saya sarankan Anda mulai dengan Dapr. Orleans adalah perintis asli, sedangkan Dapr adalah reboot yang membawa segalanya ke tingkat berikutnya.

Tautan asli:Login hyperlink terlihat.





Mantan:Lihat pembacaan . Informasi konten file PDB
Depan:.NET/C# menggunakan Redis untuk mengimplementasikan algoritma Bloom berdasarkan BitMap
 Tuan tanah| Diposting pada 29/12/2022 14.25.28 |
Microsoft Orleans

Orleans adalah kerangka kerja lintas platform untuk membangun aplikasi yang andal, dapat diskalakan, dan terdistribusi. Aplikasi terdistribusi didefinisikan sebagai aplikasi yang menjangkau beberapa proses, seringkali menggunakan komunikasi peer-to-peer untuk melampaui batas perangkat keras. Orleans menskalakan dari satu server lokal ke ratusan aplikasi terdistribusi dan sangat tersedia di cloud. Orleans memperluas konsep yang sudah dikenal dan idiom C# ke lingkungan multi-server. Orleans dirancang agar elastis dan terukur. Saat host bergabung dengan kluster, host dapat menerima aktivasi baru. Ketika host keluar dari kluster karena skala masuk atau kegagalan komputer, aktivasi sebelumnya pada host tersebut diaktifkan kembali pada host yang tersisa sesuai kebutuhan. Kluster Orleans dapat diturunkan menjadi satu inang. Properti yang sama yang digunakan untuk mengaktifkan penskalaan elastis juga memungkinkan toleransi kesalahan. Kluster secara otomatis mendeteksi dan pulih dengan cepat dari kegagalan.

Salah satu tujuan desain utama Orleans adalah untuk menyederhanakan kompleksitas pengembangan aplikasi terdistribusi dengan menyediakan serangkaian pola dan API yang umum. Pengembang yang akrab dengan pengembangan aplikasi server tunggal dapat dengan mudah menggunakan Orleans untuk membangun layanan cloud-native yang tangguh, terukur, dan aplikasi terdistribusi lainnya. Akibatnya, Orleans sering disebut sebagai ".NET terdistribusi" dan merupakan kerangka kerja pilihan untuk membangun aplikasi cloud-native. Orleans dapat berjalan di mana saja yang mendukung .NET. Ini termasuk menghostingnya di Linux, Windows, dan macOS. Aplikasi Orleans dapat disebarkan ke Kubernetes, komputer virtual, dan layanan PaaS seperti Azure App Service dan Azure Container Apps.

Dokumentasi:https://learn.microsoft.com/zh-cn/dotnet/orleans/overview

Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com