Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 5085|Yanıt: 1

[Kaynak] Sanal oyuncular: Dapr vs Orleans

[Bağlantıyı kopyala]
Yayınlandı 29.12.2022 14:24:52 | | | |
Son bir hafta boyunca, sanal aktörler kavramını araştırarak yazılım geliştirmeye adım attım. Sonunda iki farklı framework'e baktım: Dapr ve Orleans.

İkisi de çok özlü projeler ve çok ilginç kullanım alanları var. Her ikisi de "sanal" aktörler fikrini kullanır. Sanal bir aktör, aşağıdaki durum ve mantık birimidir:

  • Kimlik ile benzersiz şekilde tanımlanabilir
  • Tek dişlidir
  • Bellek içinde veya kalıcı olabilir - yaşam döngüsü framework tarafından yönetilir


Sanal aktörler fikrini gerçekten seviyorum ve karmaşık görev iş akışlarını yönetmek için ölçeklenebilir ve güvenilir araçlar oluşturma keşfetmemde onları çok faydalı buluyorum. Her görev tek iş parçacıklı sanal katılımcıysa, yarış koşulları problemi ortadan kalkar.

Orleans ve Dapr ikisi de Microsoft projeleri olduğu için, Microsoft kafeteryasında Western Story tarzı bir mücadele hayal ediyorum.

Orleans

Orleans ile başladım çünkü YouTube'da bununla ilgili bazı videolar izledikten sonra bir süredir radarımdaydı. Başlangıçta çok kötü başladı çünkü tüm NuGet paketlerinin 4.x versiyonunu kullanacağımı sanmıştım. Ancak, belgelerinin hiçbiri 4.x paketiyle çalışmaz. Sonunda 3.6.2 sürümünü kullandım.

Tahıllar / Durum / Zamanlayıcılar

Kendi durumunu takip eden ve eylemleri gerçekleştiren bir tane oluşturmak çok basittir. Hatta gren kalıcılığı için dokümantasyonu takip edip kendi CosmosDB (SQL API) uygulamamı oluşturabildim.

Hatırlatmalar

Hatırlatmaları da kolayca kurabiliyor. Gerçek dünya sürekliliğini onlar için yapılandırmaya çalışana kadar. Araştırmamın bu noktasında, her şeyi düzenli tutmaya ve ComsosDB'de saklamaya çalışıyorum. Ne yazık ki, Orleans'ın hatırlatma ısrarı paketini hiç çalıştıramıyorum. Sonunda AzureStorage paketine geçmek zorunda kaldım. Şimdi verilerim SQL API hesabında, yarısı ise tablo API hesabında.

Akarsu

Orada iyi gitmedim. Orleans'ta akışlar bir GUID ve isteğe bağlı bir isim alanı ile tanımlanır. Akışların bir GUID ile tanımlanması gerektiğinin iyi bir nedeni olduğuna eminim, ama vay canına, bu pratik değil.

Yayınlardan çok sinirliyim çünkü onları kolayca oluşturabiliyordum, ama projeyimi durdurup yeniden başlattığımda ve yeni bir etkinlik tetiklediğimde her şey çöküyor.

Bunu çok değerli bir bilgi izledi; Orleans kodunu tersine mühendislik yapmak için 8 saat sürdüm:

Bir tahıl akış abonesi olduğunda, tahın abonelik adresinde OnActivateAsync yönteminde ResumeAsync'i çağırması gerekir, aksi takdirde tanınmayan bir hata ile çökersiniz.

Aynı aboneliğin tekrarlanması sorunu da yaşadım, bu yüzden tüm Grain aboneliklerini silmek için kodu kullandım ve sonra tekrar oluşturdum:


Diğer Orleans Şaşkınlıkları / İpuçları

Streams, Azure Event Hubs ile (AddEventHubStream vasite) iyi çalışıyor.

CosmosDB SQL API'nin Grain adında / veya diğer özel karakterleri kullanmayın!

Orleans sonucu

Orleans'ı seviyorum ve potansiyeli olduğunu düşünüyorum. Ancak öğrenme eğrisi çok dik. Uzun süredir yayınlama konusundaki mücadelem nedeniyle, kümelerin/dağıtımların nasıl çalıştığını incelemeye vaktim yok.

Dapr

Dapr'ı Orleans'a alternatifler arayarak buldum. Bunun aynı zamanda Microsoft sponsorluğunda bir proje olması biraz garip. Belki de burada en güçlülerin hayatta kalması yaklaşımını benimsemek içindirler. Eğer evetse, Dapr'ın hayatta kalacağını düşünüyorum.

İlk olarak, Dapr'ın REST/gRPC tabanlı tasarımı, aktörlerin herhangi bir programlama dili kullanılarak uygulanmasına olanak tanır. Ayrıca her şeyi (katılımcılar, durumlar, zamanlayıcılar, hatırlatıcılar, etkinlikler) tek bir Redis örneğinde çalıştırmak da bana kolaydı. Bunun üstüne, Dapr'ı kullanmaya başlamam sadece üçte birini aldı. Bu kadar hızlı bir başlangıç süresi, Dapr'ın mükemmel dokümantasyonu sayesinde ortaya çıkıyor.

Oyuncular / Zamanlayıcılar / Hatırlatıcılar

Az önce Dapr'ın dokümantasyonunun harika olduğunu mu söyledim? Tabii ki, bu her yerde var, JavaScript örnekleri hariç. Zamanımın çoğunu Dapr üzerinde geçiriyorum, oyunculara metod çağırmayı çözmeye çalışıyorum. Dapr Javascript örneğinin kodu şu şekildedir:

Bu açıkça modası geçmiş. Bu üç satırı Dapr'ın test/örnek kodu keşfi boyunca yönlendirmek için çok zaman harcamam gerekti

Durum belirleme/ayarlama kod örneklerinde benzer sorunlar var, bu yüzden onlar için bir GitHub sorunu oluşturdum.

Bu küçük sorunlar dışında, oyuncuları ayarlamak çocuk oyuncağı.

Castım için zamanlayıcılar ve hatırlatıcılar ayarlamak da çok kolay.

Devlet

Dapr'ı Postgres ile sürek kapatacak şekilde çok kolay ayarlayabildim.

Fark ettiğim bir şey, hatırlatıcıların nasıl saklandığında ölçeklenebilirlik sorunları olabileceği. Dapr, belirli bir katılımcı türü için tüm uyarıları tek bir JSON dizisinde saklar. Birinin bir sürü hatırlatıcısı varsa ne olur?



Diğer Dapr Taktikleri / İpuçları

JavaScript SDK koduna göz atırken fark ettiğim bir şey, kod tabanında çok fazla yorum olmaması. Bu da bir şeyi anlamayı neredeyse imkansız kılıyor. Örneğin, durum yöneticisinin addOrUpdateState metodunda updateValueFactory adlı üçüncü bir parametre vardır. Kodda yorum yoksa, geri dönüşün ne için olduğunu anlamak neredeyse imkansızdır.

Ayrıca "dapr init" komutunun benim için bir redis konteyneri kurup çalıştırmaya çalışmasını ne kadar sevdiğimden emin değilim. Ya zaten bir Redis kabım varsa? Ya onun yerine postgres kullanmak istersem? Dapr init özelliğini nasıl değiştireceğimi açıklayan bir dokümant bulamıyorum.

Pubsub kullanmakta zorlanan herkese bir not. Hem yayıncınızı hem de abonenizi çalıştırmak için "dapr run" kullanmalısınız:

Aktörler ve pubsub için, hizmetinizin hangi portta çalıştığını dapr'a bildirmek için --app-port parametresini kullanmanın önemli olduğunu unutmayın. pubsub etkinlikleri ve oyuncu çağrıları Dapr sidecar'dan http çağrılarıyla servisinize gönderilir, bu yüzden nereye gönderileceğini bilmesi gerekir:

Küçük bir Dapr kendi kendine barındırılan "kümesini" pubsub abone örneğimi ev ağımda iki farklı makinede başlatarak test ettim. Sadece işe yaradı!

Dapr sonucu

Dağıtık uygulamalar veya sanal aktörler hakkında daha fazla fikir edinmek isterseniz, Dapr ile başlamanızı öneririm. Orleans orijinal öncüydü, Dapr ise işleri bir üst seviyeye taşıyan bir yeniden başlatma oldu.

Orijinal bağlantı:Bağlantı girişi görünür.





Önceki:Okumayı görüntüleyin. PDB dosya içeriği bilgileri
Önümüzdeki:.NET/C#, BitMap tabanlı Bloom algoritmasını uygulamak için Redis kullanır
 Ev sahibi| Yayınlandı 29.12.2022 14:25:28 |
Microsoft Orleans

Orleans, güvenilir, ölçeklenebilir ve dağıtık uygulamalar oluşturmak için çapraz platform bir çerçevedir. Dağıtık uygulama, donanım sınırlarını aşmak için genellikle eşler arası iletişim kullanarak birden fazla süreci kapsayan bir uygulama olarak tanımlanır. Orleans, tek bir yerel sunucudan bulutta yüzlerce dağıtık ve yüksek erişilebilir uygulamaya ölçekleniyor. Orleans, tanıdık kavramları ve C# deyimlerini çoklu sunuculu ortamlara da genişletiyor. Orleans elastik ve ölçeklenebilir olacak şekilde tasarlanmıştır. Bir ana bilgisayar kümeye katıldığında, yeni aktivasyonları kabul edebilir. Bir ana bilgisayar ölçeklendirme veya bilgisayar arızası nedeniyle kümeden çıktığında, o konaktaki önceki aktivasyon kalan konaklarda gerektiğinde yeniden etkinleştirilir. Orleans kümeleri tek bir konakçıya indirilebilir. Elastik ölçeklendirmeyi mümkün kılan aynı özellikler, hata toleransını da sağlar. Kümeler hataları otomatik olarak tespit eder ve hızlıca toparlanır.

Orleans'ın temel tasarım hedeflerinden biri, ortak bir desen ve API seti sağlayarak dağıtık uygulama geliştirmenin karmaşıklıklarını basitleştirmektir. Tek sunuculu uygulama geliştirmeye aşina geliştiriciler, Orleans'ı kolayca kullanarak dayanıklı, ölçeklenebilir, bulut tabanlı hizmetler ve diğer dağıtık uygulamalar oluşturabilirler. Sonuç olarak, Orleans genellikle "dağıtık .NET" olarak adlandırılır ve bulut tabanlı uygulamalar oluşturmak için tercih edilen çerçevedir. Orleans, .NET destekleyen her yerde çalışabilir. Bu, Linux, Windows ve macOS'ta barındırmayı da kapsar. Orleans uygulamaları Kubernetes, sanal makineler ve Azure App Service ile Azure Container Apps gibi PaaS servislerine dağıtılabilir.

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

Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com