Service Fabric Reliable Actors hizmetine giriş
Reliable Actors, Sanal Aktör desenini temel alan bir Service Fabric uygulama çerçevesidir. Reliable Actors API,Service Fabric tarafından sağlanan ölçeklenebilirlik ve güvenilirlik garantileri üzerine oluşturulmuş tek iş parçacıklı bir programlama modeli sağlar.
Aktörler nedir?
Aktör, tek iş parçacıklı yürütmeye sahip yalıtılmış, bağımsız bir işlem ve durum birimidir. Aktör deseni , bu aktörlerin büyük bir kısmının aynı anda ve birbirinden bağımsız olarak yürütülebildiği eşzamanlı veya dağıtılmış sistemler için bir hesaplama modelidir. Aktörler birbirleriyle iletişim kurabilir ve daha fazla aktör oluşturabilirler.
Reliable Actors ne zaman kullanılır?
Service Fabric Reliable Actors, aktör tasarım deseninin bir uygulamasıdır. Herhangi bir yazılım tasarım deseninde olduğu gibi, belirli bir desenin kullanılıp kullanılmaymayacağına karar, bir yazılım tasarımı sorununun desene uyup uymadığına göre yapılır.
Aktör tasarım deseni bir dizi dağıtılmış sistem sorununa ve senaryosuna uygun olsa da, desenin kısıtlamaları ve bunu uygulayan çerçevenin dikkatli bir şekilde dikkate alınması gerekir. Genel rehberlik olarak, aşağıdaki durumlarda sorununuzu veya senaryonuzu modellemek için aktör desenini göz önünde bulundurun:
- Sorun alanınız çok sayıda (binlerce veya daha fazla) küçük, bağımsız ve yalıtılmış durum ve mantık birimlerini içerir.
- Bir dizi aktör arasında durumu sorgulama da dahil olmak üzere dış bileşenlerden önemli etkileşim gerektirmeyen tek iş parçacıklı nesnelerle çalışmak istiyorsunuz.
- Aktör örnekleriniz G/Ç işlemleri düzenleyerek beklenmeyen gecikmelerle çağıranları engellemez.
Service Fabric'teki Aktörler
Service Fabric'te aktörler Reliable Actors çerçevesinde uygulanır: Service Fabric Reliable Services'ın üzerine kurulu aktör desen tabanlı bir uygulama çerçevesi. Yazdığınız her Reliable Actor hizmeti aslında bölümlenmiş, durum bilgisi olan bir Güvenilir Hizmettir.
Her aktör bir aktör türünün örneği olarak tanımlanır ve .NET nesnesinin bir .NET türünün örneği olmasıyla aynıdır. Örneğin, bir hesap makinesinin işlevselliğini uygulayan bir aktör türü olabilir ve bu türdeki birçok aktör küme genelindeki çeşitli düğümlere dağıtılmış olabilir. Bu tür aktörlerin her biri bir aktör kimliğiyle benzersiz olarak tanımlanır.
Aktör Ömrü
Service Fabric aktörleri sanaldır, yani yaşam süreleri bellek içi gösterimlerine bağlı değildir. Sonuç olarak, açıkça oluşturulması veya yok edilmesi gerekmez. Reliable Actors çalışma zamanı, bir aktör kimliğine yönelik bir isteği ilk aldığında otomatik olarak etkinleştirir. Bir aktör bir süre kullanılmazsa Reliable Actors çalışma zamanı bellek içi nesnesini çöp olarak toplar. Ayrıca, daha sonra yeniden etkinleştirilmesi gerektiğinde aktörün varlığı hakkında bilgi sahibi olacaktır. Daha fazla ayrıntı için bkz . Aktör yaşam döngüsü ve çöp toplama.
Bu sanal aktör yaşam soyutlaması, sanal aktör modelinin bir sonucu olarak bazı uyarılar taşır ve aslında Reliable Actors uygulaması bu modelden bazen sapma gösterir.
- Aktör kimliğine ilk kez ileti gönderildiğinde aktör otomatik olarak etkinleştirilir (aktör nesnesinin oluşturulmasına neden olur). Bir süre sonra aktör nesnesi çöp olarak toplanır. Gelecekte aktör kimliğinin yeniden kullanılması, yeni bir aktör nesnesinin oluşturulacak olmasına neden olur. Bir aktörün durumu, durum yöneticisinde depolandığında nesnenin ömründen daha uzun sürer.
- Aktör kimliği için herhangi bir aktör yönteminin çağrılması bu aktörü etkinleştirir. Bu nedenle, aktör türlerinin oluşturucuları çalışma zamanı tarafından örtük olarak adlandırılır. Bu nedenle, istemci kodu aktör türünün oluşturucusunun parametreleri geçiremez, ancak parametreler hizmetin kendisi tarafından aktörün oluşturucusna geçirilebilir. Sonuç, aktörler istemciden başlatma parametreleri gerektiriyorsa, diğer yöntemler çağrıldığında kısmen başlatılan bir durumda oluşturulabilir. İstemciden bir aktörün etkinleştirilmesi için tek bir giriş noktası yoktur.
- Reliable Actors örtük olarak aktör nesneleri oluştursa da; bir aktörü ve durumunu açıkça silebilirsiniz.
Dağıtım ve yük devretme
Ölçeklenebilirlik ve güvenilirlik sağlamak için Service Fabric, aktörleri küme genelinde dağıtır ve bunları gerektiği gibi başarısız düğümlerden sağlıklı düğümlere otomatik olarak geçirir. Bu bölümlenmiş, durum bilgisi olan Bir Güvenilir Hizmet üzerinde bir soyutlamadır. Dağıtım, ölçeklenebilirlik, güvenilirlik ve otomatik yük devretme, aktörlerin Aktör Hizmeti adı verilen durum bilgisi olan bir Güvenilir Hizmet içinde çalıştığı gerçeğinden dolayı sağlanır.
Aktörler Aktör Hizmeti'nin bölümlerine dağıtılır ve bu bölümler bir Service Fabric kümesindeki düğümler arasında dağıtılır. Her hizmet bölümü bir aktör kümesi içerir. Service Fabric, hizmet bölümlerinin dağıtımını ve yük devretmesini yönetir.
Örneğin, varsayılan aktör bölümü yerleşimi kullanılarak üç düğüme dağıtılan dokuz bölüme sahip bir aktör hizmeti şu şekilde dağıtılır:
Actor Framework bölüm şemasını ve anahtar aralığı ayarlarını sizin için yönetir. Bu, bazı seçenekleri basitleştirir ancak bazı konuları da taşır:
- Reliable Services bir bölümleme düzeni, anahtar aralığı (aralık bölümleme düzeni kullanılırken) ve bölüm sayısı seçmenize olanak tanır. Reliable Actors, aralık bölümleme düzeniyle (tekdüzen Int64 düzeni) sınırlıdır ve tam Int64 anahtar aralığını kullanmanızı gerektirir.
- Varsayılan olarak, aktörler rastgele bölümlere yerleştirilir ve tekdüzen dağılım elde edilir.
- Aktörler rastgele yerleştirildiğinden, aktör işlemlerinin her zaman gecikme süresi ve ek yüke neden olan yöntem çağrısı verilerinin seri hale getirilmesi ve seri durumdan çıkarılması da dahil olmak üzere ağ iletişimi gerektirmesi beklenmelidir.
- Gelişmiş senaryolarda, belirli bölümlere eşlenen Int64 aktör kimliklerini kullanarak aktör bölüm yerleşimini denetlemek mümkündür. Ancak bunu yapmak, aktörlerin bölümler arasında dengesiz bir şekilde dağıtılmasıyla sonuçlanabilir.
Aktör hizmetlerinin nasıl bölümlendiği hakkında daha fazla bilgi için aktörler için bölümleme kavramlarına bakın.
Aktör iletişimi
Aktör etkileşimleri, arabirimi uygulayan aktör ve aynı arabirim aracılığıyla bir aktöre proxy alan istemci tarafından paylaşılan bir arabirimde tanımlanır. Bu arabirim, aktör yöntemlerini zaman uyumsuz olarak çağırmak için kullanıldığından, arabirimdeki her yöntem Task-returning olmalıdır.
Yöntem çağrıları ve yanıtları sonuçta küme genelinde ağ isteklerine neden olur, bu nedenle bağımsız değişkenler ve döndürdikleri görevlerin sonuç türleri platform tarafından serileştirilebilir olmalıdır. Özellikle veri sözleşmesi seri hale getirilebilir olmalıdır.
Aktör proxy'si
Reliable Actors istemci API'si bir aktör örneği ile aktör istemcisi arasında iletişim sağlar. Bir aktörle iletişim kurmak için istemci, aktör arabirimini uygulayan bir aktör proxy nesnesi oluşturur. İstemci, proxy nesnesinde yöntemleri çağırarak aktörle etkileşim kurar. Aktör ara sunucusu, istemciden aktöre ve aktörden aktöre iletişim için kullanılabilir.
// Create a randomly distributed actor ID
ActorId actorId = ActorId.CreateRandom();
// This only creates a proxy object, it does not activate an actor or invoke any methods yet.
IMyActor myActor = ActorProxy.Create<IMyActor>(actorId, new Uri("fabric:/MyApp/MyActorService"));
// This will invoke a method on the actor. If an actor with the given ID does not exist, it will be activated by this method call.
await myActor.DoWorkAsync();
// Create actor ID with some name
ActorId actorId = new ActorId("Actor1");
// This only creates a proxy object, it does not activate an actor or invoke any methods yet.
MyActor myActor = ActorProxyBase.create(actorId, new URI("fabric:/MyApp/MyActorService"), MyActor.class);
// This will invoke a method on the actor. If an actor with the given ID does not exist, it will be activated by this method call.
myActor.DoWorkAsync().get();
Aktör proxy nesnesini oluşturmak için kullanılan iki bilgi parçasının aktör kimliği ve uygulama adı olduğunu unutmayın. Aktör kimliği aktörü benzersiz olarak tanımlarken, uygulama adı aktörün dağıtıldığı Service Fabric uygulamasını tanımlar.
ActorProxy
İstemci tarafındaki (C#) / ActorProxyBase
(Java) sınıfı, aktörü kimliğe göre bulmak ve onunla bir iletişim kanalı açmak için gerekli çözümü gerçekleştirir. Ayrıca iletişim hataları ve yük devretme durumlarında aktörü bulmak için yeniden denenir. Sonuç olarak, ileti teslimi aşağıdaki özelliklere sahiptir:
- İleti teslimi en iyi çabadır.
- Aktörler aynı istemciden yinelenen iletiler alabilir.
Eşzamanlılık
Reliable Actors çalışma zamanı, aktör yöntemlerine erişmek için basit bir sıra tabanlı erişim modeli sağlar. Bu, bir aktör nesnesinin kodu içinde herhangi bir anda birden fazla iş parçacığının etkin olmadığı anlamına gelir. Sıra tabanlı erişim, veri erişimi için eşitleme mekanizmalarına gerek olmadığından eşzamanlı sistemleri büyük ölçüde basitleştirir. Bu, sistemlerin her aktör örneğinin tek iş parçacıklı erişim doğası için özel dikkate alınacak noktalar ile tasarlanması gerektiği anlamına da gelir.
- Tek bir aktör örneği aynı anda birden fazla isteği işleyemez. Bir aktör örneği, eşzamanlı istekleri işlemesi bekleniyorsa aktarım hızı performans sorununa neden olabilir.
- Aktörlerden birine aynı anda dış istek yapılırken iki aktör arasında döngüsel istek olduğunda aktörler birbirini kilitleyebilir. Aktör çalışma zamanı, aktör çağrılarında otomatik olarak zaman aşımına uğrayacak ve olası kilitlenme durumlarını kesintiye uğratmak için arayana bir özel durum oluşturur.
Sıra tabanlı erişim
Dönüş, diğer aktörlerin veya istemcilerin isteğine yanıt olarak bir aktör yönteminin tam olarak yürütülmesinden veya zamanlayıcı/anımsatıcı geri çağırmasının tam olarak yürütülmesinden oluşur. Bu yöntemler ve geri çağırmalar zaman uyumsuz olsa da, Actors çalışma zamanı bunları birbirine ayırmaz. Yeni bir dönüşe izin verilmeden önce dönüş tamamen bitmelidir. Başka bir deyişle, bir yönteme veya geri çağırmaya yeni bir çağrıya izin verilmeden önce yürütülmekte olan bir aktör yöntemi veya zamanlayıcı/anımsatıcı geri çağırma işlemi tamamen tamamlanmalıdır. Yürütme yöntemden veya geri çağırmadan döndürüldüyse ve yöntem veya geri çağırma tarafından döndürülen görev tamamlandıysa bir yöntem veya geri çağırmanın tamamlanmış olduğu kabul edilir. Farklı yöntemler, zamanlayıcılar ve geri çağırmalar arasında bile sıra tabanlı eşzamanlılığa uyulduğunu vurgulayın.
Actors çalışma zamanı, sıranın başında aktör başına kilit alarak ve dönüşün sonunda kilidi serbest bırakarak sıra tabanlı eşzamanlılığı zorlar. Bu nedenle, sıra tabanlı eşzamanlılık aktörler genelinde değil, aktör başına uygulanır. Aktör yöntemleri ve zamanlayıcı/anımsatıcı geri çağırmaları farklı aktörler adına aynı anda yürütülebilir.
Aşağıdaki örnekte yukarıdaki kavramlar gösterilmektedir. İki zaman uyumsuz yöntem (yöntem1 ve yöntem2 gibi) uygulayan bir aktör türü, bir zamanlayıcı ve bir anımsatıcı düşünün. Aşağıdaki diyagramda, bu aktör türüne ait iki aktör (ActorId1 ve ActorId2) adına bu yöntemlerin ve geri çağırmaların yürütülmesi için bir zaman çizelgesi örneği gösterilmektedir.
Bu diyagram şu kuralları izler:
- Her dikey çizgi, belirli bir aktör adına bir yöntemin veya geri çağırmanın mantıksal yürütme akışını gösterir.
- Her dikey çizgide işaretlenen olaylar kronolojik sırada gerçekleşir ve eskilerinin altında daha yeni olaylar oluşur.
- Farklı aktörlere karşılık gelen zaman çizelgeleri için farklı renkler kullanılır.
- Vurgulama, aktör başına kilidin bir yöntem veya geri çağırma adına tutulacağı süreyi belirtmek için kullanılır.
Dikkate alınması gereken bazı önemli noktalar:
- Method1, xyz789 istemci isteğine yanıt olarak ActorId2 adına yürütülürken, Method1'in ActorId2 tarafından yürütülmesini de gerektiren başka bir istemci isteği (abc123) gelir. Ancak, önceki yürütme tamamlanana kadar Method1'in ikinci yürütmesi başlamaz. Benzer şekilde, Method1 istemci isteğine yanıt olarak yürütülürken ActorId2 tarafından kaydedilen bir anımsatıcı tetiklenir xyz789. Anımsatıcı geri çağırma yalnızca Method1'in her iki yürütmesi de tamamlandıktan sonra yürütülür. Tüm bunlar ActorId2 için zorunlu hale gelen sıra tabanlı eşzamanlılık nedeniyledir.
- Benzer şekilde, sıra tabanlı eşzamanlılık, Method1, Method2 ve actorid1 adına süreölçer geri çağırmanın seri bir şekilde yürütülmesiyle gösterildiği gibi ActorId1 için de zorlanır.
- Method1'in ActorId1 adına yürütülmesi, ActorId2 adına yürütülmesiyle çakışıyor. Bunun nedeni sıra tabanlı eşzamanlılığın yalnızca bir aktör içinde zorunlu kılınması ve aktörler arasında zorlanmamasıdır.
- Yöntem/geri çağırma yürütmelerinin bazılarında,
Task
yöntem/geri çağırma tarafından döndürülen (C#) /CompletableFuture
(Java) yöntemi döndürdükten sonra biter. Bazılarında, yöntem/geri çağırma döndürdüğünde zaman uyumsuz işlem zaten tamamlanmıştır. Her iki durumda da, aktör başına kilit yalnızca hem yöntem/geri çağırma döndürdüğünde hem de zaman uyumsuz işlem tamamlandıktan sonra serbest bırakılır.
Yeniden giriş
Actors çalışma zamanı varsayılan olarak yeniden girişe izin verir. Başka bir deyişle, Aktör A'nın aktör yöntemi Aktör B'de bir yöntem çağırırsa ve bu yöntem de Aktör A'da başka bir yöntem çağırırsa, bu yöntemin çalıştırılmasına izin verilir. Bunun nedeni, aynı mantıksal çağrı zinciri bağlamının bir parçası olmasıdır. Tüm zamanlayıcı ve anımsatıcı çağrıları yeni mantıksal çağrı bağlamıyla başlar. Daha fazla ayrıntı için Reliable Actors yeniden giriş bölümüne bakın.
Eşzamanlılık garantilerinin kapsamı
Actors çalışma zamanı, bu yöntemlerin çağrısını denetlediği durumlarda bu eşzamanlılık garantilerini sağlar. Örneğin, bir istemci isteğine yanıt olarak yapılan yöntem çağrılarının yanı sıra zamanlayıcı ve anımsatıcı geri çağırmaları için bu garantileri sağlar. Ancak aktör kodu bu yöntemleri Aktörler çalışma zamanı tarafından sağlanan mekanizmaların dışında doğrudan çağırırsa, çalışma zamanı herhangi bir eşzamanlılık garantisi sağlayamaz. Örneğin, yöntem aktör yöntemleri tarafından döndürülen görevle ilişkili olmayan bir görev bağlamında çağrılırsa, çalışma zamanı eşzamanlılık garantileri sağlayamaz. Yöntem, aktörün kendi oluşturduğu bir iş parçacığından çağrılırsa, çalışma zamanı eşzamanlılık garantileri de sağlayamaz. Bu nedenle, arka plan işlemlerini gerçekleştirmek için aktörlerin sıra tabanlı eşzamanlılığa uygun aktör zamanlayıcılarını ve aktör anımsatıcılarını kullanması gerekir.
Sonraki adımlar
İlk Reliable Actors hizmetinizi oluşturarak başlayın: