Share via


Service Fabric Reliable Actors'a 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 vermek, 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 kılavuz 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 birimi 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 öngörülemeyen gecikmelerle çağıranları engellemez.

Service Fabric'teki Aktörler

Service Fabric'te aktörler Reliable Actors çerçevesinde uygulanır: Service Fabric Reliable Services üzerinde oluşturulmuş aktör deseni 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ı, söz konusu aktör kimliği için ilk kez istek aldığında bir aktörü otomatik olarak etkinleştirir. Bir aktör bir süre kullanılmazsa Reliable Actors çalışma zamanı bellek içi nesneyi çö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 süresi soyutlaması, sanal aktör modelinin bir sonucu olarak bazı uyarılar taşır ve aslında Reliable Actors uygulaması bazen bu modelden sapma gösterir.

  • Aktör kimliğine ilk kez ileti gönderildiğinde bir aktör otomatik olarak etkinleştirilir (aktör nesnesinin oluşturulmasına neden olur). Bir süre sonra aktör nesnesi çöp toplanır. Gelecekte aktör kimliğinin yeniden kullanılması yeni bir aktör nesnesinin oluşmasına neden olur. Bir aktörün durumu, durum yöneticisinde depolandığında nesnenin yaşam süresinden daha uzun sürer.
  • Bir aktör kimliği için herhangi bir aktör yöntemini çağırmak söz konusu 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ör istemciden başlatma parametreleri gerektiriyorsa, diğer yöntemler çağrıldığında aktörlerin kısmen başlatılmış bir durumda oluşturulabileceğidir. İ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

Service Fabric, ölçeklenebilirlik ve güvenilirlik sağlamak için aktörleri küme genelinde dağıtır ve bunları gerektiğinde 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ışması gerçeğiyle 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:

Reliable Actors dağıtımı

Actor Framework bölüm şemasını ve anahtar aralığı ayarlarını sizin için yönetir. Bu, bazı seçimleri basitleştirir ancak bazı konuları da dikkate alır:

  • Reliable Services bir bölümleme düzeni, anahtar aralığı (aralık bölümleme düzeni kullanı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 ağ iletişimi gerektirmesi beklenmelidir. Bu, yöntem çağrı verilerinin seri duruma getirilmesi ve seri durumdan çıkarılması da dahil olmak üzere gecikme süresi ve ek yük oluşturur.
  • 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, bölümlerin arasında aktörlerin 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 bkz. aktörler için bölümleme kavramları.

Aktör iletişimi

Aktör etkileşimleri, arabirimi uygulayan aktör tarafından paylaşılan bir arabirimde ve aynı arabirim aracılığıyla bir aktöre proxy alan istemcide 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 seri hale getirilebilir 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 olmayacağı anlamına gelir. Veri erişimi için eşitleme mekanizmalarına gerek olmadığından, sıra tabanlı erişim eşzamanlı sistemleri büyük ölçüde basitleştirir. Ayrıca sistemlerin her bir aktör örneğinin tek iş parçacıklı erişim yapısı için özel dikkate alınacak noktalarla tasarlanması gerektiği anlamına 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 bir 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 çağırana bir özel durum oluşturur.

Reliable Actors iletişimi

Sıra tabanlı erişim

Dönüş, diğer aktörlerden veya istemcilerden gelen bir isteğe yanıt olarak bir aktör yönteminin tam olarak yürütülmesinden veya zamanlayıcı/anımsatıcı geri araması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ğırması tamamen bitmelidir. 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ı, bir dönüşün başında aktör başına kilit alarak ve dönüşün sonunda kilidi bırakarak sıra tabanlı eşzamanlılığı zorlar. Bu nedenle, sıra tabanlı eşzamanlılık aktörler arasında değil, her aktör için zorunlu kılını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.

Reliable Actors çalışma zamanı dönüş tabanlı eşzamanlılık ve erişim

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 meydana gelir.
  • 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ği xyz789'a yanıt olarak yürütülürken ActorId2 tarafından kaydedilen bir anımsatıcı tetiklenir. Anımsatıcı geri çağırma yalnızca Method1'in her iki yürütmesi tamamlandıktan sonra yürütülür. Tüm bunlar , ActorId2 için zorunlu kılınan 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'inActorId1 adına yürütülmesi, ActorId2 adına yürütülmesiyle çakışıyor. Bunun nedeni sıra tabanlı eşzamanlılığın aktörler arasında değil yalnızca bir aktör içinde zorlanmış olmasıdır.
  • Yöntem/geri çağırma yürütmelerinin bazılarında, Taskyöntem/geri çağırma tarafından döndürülen (C#) / CompletableFuture(Java) yöntemi döndürdükten sonra biter. Bazılarında, zaman uyumsuz işlem yöntemin/geri çağırmanın döndürdüğü zamana kadar 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öntemi çağırırsa ve bu da Aktör A'da başka bir yöntemi ç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 Actors ç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ı ve aktör anımsatıcıları kullanması gerekir.

Sonraki adımlar

İlk Reliable Actors hizmetinizi oluşturarak başlayın: