Aracılığıyla paylaş


Service Fabric hizmetleri için yerleştirme ilkeleri

Yerleştirme ilkeleri, bazı belirli, daha az yaygın senaryolarda hizmet yerleşimini idare etmek için kullanılabilecek ek kurallardır. Bu senaryolara bazı örnekler şunlardır:

  • Service Fabric kümeniz birden çok şirket içi veri merkezi veya Azure bölgeleri gibi coğrafi uzaklıkları kapsar
  • Ortamınız birden çok jeopolitik veya yasal denetim alanına ya da zorunlu kılmanız gereken ilke sınırlarına sahip olduğunuz başka bir duruma yayılır
  • Büyük mesafeler veya daha yavaş veya daha az güvenilir ağ bağlantılarının kullanılması nedeniyle iletişim performansı veya gecikme süresiyle ilgili dikkat edilmesi gerekenler vardır
  • Diğer iş yükleriyle veya müşterilere yakın bir şekilde belirli iş yüklerini en iyi çaba olarak birlikte bulundurmanız gerekir
  • Tek bir düğümde bir bölümün durum bilgisi olmayan birden çok örneğine ihtiyacınız var

Bu gereksinimlerin çoğu, kümenin hata etki alanları olarak temsil edilen fiziksel düzeniyle uyumlu hale getirilir.

Bu senaryoların ele alınmasına yardımcı olan gelişmiş yerleştirme ilkeleri şunlardır:

  1. Geçersiz etki alanları
  2. Gerekli etki alanları
  3. Tercih edilen etki alanları
  4. Çoğaltma paketlemeye izin verme
  5. Düğümde durum bilgisi olmayan birden çok örneğe izin ver

Aşağıdaki denetimlerin çoğu düğüm özellikleri ve yerleştirme kısıtlamaları aracılığıyla yapılandırılabilir, ancak bazıları daha karmaşıktır. İşleri daha basit hale getirmek için Service Fabric Kümesi Resource Manager bu ek yerleştirme ilkelerini sağlar. Yerleştirme ilkeleri, adlandırılmış hizmet örneği temelinde yapılandırılır. Bunlar dinamik olarak da güncelleştirilebilir.

Geçersiz etki alanları belirtme

InvalidDomain yerleştirme ilkesi, belirli bir Hata Etki Alanının belirli bir hizmet için geçersiz olduğunu belirtmenize olanak tanır. Bu ilke, örneğin jeopolitik veya kurumsal ilke nedenleriyle belirli bir hizmetin hiçbir zaman belirli bir alanda çalışmamasını sağlar. Ayrı ilkeler aracılığıyla birden çok geçersiz etki alanı belirtilebilir.

Geçersiz Etki Alanı Örneği

Kod:

ServicePlacementInvalidDomainPolicyDescription invalidDomain = new ServicePlacementInvalidDomainPolicyDescription();
invalidDomain.DomainName = "fd:/DCEast"; //regulations prohibit this workload here
serviceDescription.PlacementPolicies.Add(invalidDomain);

PowerShell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementPolicy @("InvalidDomain,fd:/DCEast”)

Gerekli etki alanlarını belirtme

Gerekli etki alanı yerleştirme ilkesi, hizmetin yalnızca belirtilen etki alanında mevcut olmasını gerektirir. Birden çok gerekli etki alanı ayrı ilkeler aracılığıyla belirtilebilir.

Gerekli Etki Alanı Örneği

Kod:

ServicePlacementRequiredDomainPolicyDescription requiredDomain = new ServicePlacementRequiredDomainPolicyDescription();
requiredDomain.DomainName = "fd:/DC01/RK03/BL2";
serviceDescription.PlacementPolicies.Add(requiredDomain);

PowerShell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementPolicy @("RequiredDomain,fd:/DC01/RK03/BL2")

Durum bilgisi olan bir hizmetin birincil çoğaltmaları için tercih edilen etki alanını belirtme

Tercih Edilen Birincil Etki Alanı, Birincil'in yerleştirilmesi için hata etki alanını belirtir. Her şey iyi durumdayken Birincil bu etki alanında sona erer. Etki alanı veya Birincil çoğaltma başarısız olursa veya kapatılırsa Birincil, ideal olarak aynı etki alanında başka bir konuma taşınır. Bu yeni konum tercih edilen etki alanında değilse, Küme Resource Manager bunu en kısa sürede tercih edilen etki alanına geri taşır. Doğal olarak bu ayar yalnızca durum bilgisi olan hizmetler için mantıklıdır. Bu ilke en çok Azure bölgelerine veya birden çok veri merkezine yayılmış ancak belirli bir konuma yerleştirmeyi tercih eden hizmetlere sahip kümelerde kullanışlıdır. BirincilLeri kullanıcılarına veya diğer hizmetlere yakın tutmak, özellikle varsayılan olarak Birincil Öğeler tarafından işlenen okumalar için daha düşük gecikme süresi sağlamaya yardımcı olur.

Tercih Edilen Birincil Etki Alanları ve Yük Devretme

ServicePlacementPreferPrimaryDomainPolicyDescription primaryDomain = new ServicePlacementPreferPrimaryDomainPolicyDescription();
primaryDomain.DomainName = "fd:/EastUS/";
serviceDescription.PlacementPolicies.Add(primaryDomain);

PowerShell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementPolicy @("PreferredPrimaryDomain,fd:/EastUS")

Çoğaltma dağıtımı gerektirme ve paketlemeye izin verme

Çoğaltmalar normalde küme iyi durumdayken hata ve yükseltme etki alanları arasında dağıtılır. Ancak, belirli bir bölüm için birden fazla çoğaltmanın geçici olarak tek bir etki alanına paketlendiği durumlar vardır. Örneğin, kümenin fd:/0, fd:/1 ve fd:/2 gibi üç hata etki alanında dokuz düğümü olduğunu varsayalım. Hizmetinizin üç çoğaltması olduğunu da varsayalım. fd:/1 ve fd:/2 içindeki bu çoğaltmalar için kullanılan düğümlerin kapandığını düşünelim. Normalde Küme Resource Manager aynı hata etki alanlarındaki diğer düğümleri tercih eder. Bu durumda, kapasite sorunları nedeniyle bu etki alanlarındaki diğer düğümlerin hiçbirinin geçerli olmadığını düşünelim. Küme Resource Manager bu çoğaltmalar için değişimler oluşturursa, fd:/0 içindeki düğümleri seçmesi gerekir. Ancak bunu yapmak, Hata Etki Alanı kısıtlamasının ihlal edildiği bir durum oluşturur. Çoğaltmaları paketlemek, tüm çoğaltma kümesinin kapanma veya kaybolma olasılığını artırır.

Not

Kısıtlamalar ve kısıtlama öncelikleri hakkında genel olarak daha fazla bilgi için bu konuya göz atın.

"The Load Balancer has detected a Constraint Violation for this Replica:fabric:/<some service name> Secondary Partition <some partition ID> is violating the Constraint: FaultDomain" gibi bir sistem durumu iletisi gördüyseniz, bu duruma veya buna benzer bir duruma sahipsiniz demektir. Genellikle yalnızca bir veya iki çoğaltma geçici olarak birlikte paketlenir. Belirli bir etki alanında çoğaltma çekirdeğinden daha az olduğu sürece güvende olursunuz. Paketleme nadirdir, ancak olabilir ve genellikle düğümler geri geldiğinden bu durumlar geçicidir. Düğümler kapalı kalırsa ve Küme Resource Manager değişiklik oluşturması gerekiyorsa, genellikle ideal hata etki alanlarında başka düğümler vardır.

Bazı iş yükleri, daha az etki alanına paketlenmiş olsalar bile her zaman hedef çoğaltma sayısına sahip olmayı tercih eder. Bu iş yükleri toplam eşzamanlı kalıcı etki alanı hatalarına karşı bahis oynatır ve genellikle yerel durumu kurtarabilir. Diğer iş yükleri, risk doğruluğu veya veri kaybı yerine kapalı kalma süresini daha erken almayı tercih eder. Çoğu üretim iş yükü üçten fazla çoğaltma, üçten fazla hata etki alanı ve hata etki alanı başına birçok geçerli düğümle çalışır. Bu nedenle, varsayılan davranış varsayılan olarak etki alanı paketlemeye izin verir. Varsayılan davranış, normal dengeleme ve yük devretmenin geçici etki alanı paketlemesi anlamına gelse bile bu aşırı durumları işlemesine olanak tanır.

Belirli bir iş yükü için bu tür paketlemeyi devre dışı bırakmak istiyorsanız, hizmette ilkeyi RequireDomainDistribution belirtebilirsiniz. Bu ilke ayarlandığında, Küme Resource Manager aynı bölümden iki çoğaltmanın aynı hata veya yükseltme etki alanında çalışmamasını sağlar.

Kod:

ServicePlacementRequireDomainDistributionPolicyDescription distributeDomain = new ServicePlacementRequireDomainDistributionPolicyDescription();
serviceDescription.PlacementPolicies.Add(distributeDomain);

PowerShell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementPolicy @("RequiredDomainDistribution")

Şimdi, bu yapılandırmaları coğrafi olarak yayılmamış bir kümedeki hizmetler için kullanmak mümkün olabilir mi? Yapabilirdin, ama bunun da iyi bir nedeni yok. Senaryolar gerekli olmadığı sürece gerekli, geçersiz ve tercih edilen etki alanı yapılandırmalarından kaçınılmalıdır. Belirli bir iş yükünü tek bir rafta çalıştırmaya zorlamak veya yerel kümenizin bir bölümünü başka bir rafa tercih etmek mantıklı değildir. Farklı donanım yapılandırmaları hata etki alanlarına yayılmalı ve normal yerleştirme kısıtlamaları ve düğüm özellikleri aracılığıyla işlenmelidir.

Tek düğümde bir bölümün durum bilgisi olmayan birden çok örneğinin yerleştirilmesi

AllowMultipleStatelessInstancesOnNode yerleştirme ilkesi, bir bölümün birden çok durum bilgisi olmayan örneğinin tek bir düğüme yerleştirilmesine olanak tanır. Varsayılan olarak, tek bir bölümün birden çok örneği bir düğüme yerleştirilemez. -1 hizmetiyle bile, belirli bir adlandırılmış hizmet için örnek sayısını kümedeki düğüm sayısının ötesine ölçeklendirmek mümkün değildir. Bu yerleştirme ilkesi bu kısıtlamayı kaldırır ve InstanceCount değerinin düğüm sayısının üstünde belirtilmesine izin verir.

"The Load Balancer has detected a Constraint Violation for this Replica:fabric:/<some service name> Secondary Partition <some partition ID> is violating the Constraint: ReplicaExclusion" gibi bir sistem durumu iletisi gördüyseniz, bu duruma veya buna benzer bir duruma sahipsiniz demektir.

Bu yerleştirme ilkesini hizmetinize uygulamayı kabul etmek için aşağıdaki yapılandırmaları etkinleştirin:

<Section Name="Common">
  <Parameter Name="AllowCreateUpdateMultiInstancePerNodeServices" Value="True" />
  <Parameter Name="HostReuseModeForExclusiveStateless" Value="1" />
</Section>

Hizmette AllowMultipleStatelessInstancesOnNode ilke belirtilerek, InstanceCount kümedeki düğüm sayısının ötesine ayarlanabilir.

Kod:

ServicePlacementAllowMultipleStatelessInstancesOnNodePolicyDescription allowMultipleInstances = new ServicePlacementAllowMultipleStatelessInstancesOnNodePolicyDescription();
serviceDescription.PlacementPolicies.Add(allowMultipleInstances);

PowerShell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName -Stateless –PartitionSchemeSingleton –PlacementPolicy @(“AllowMultipleStatelessInstancesOnNode”) -InstanceCount 10 -ServicePackageActivationMode ExclusiveProcess 

Not

Şu anda ilke yalnızca ExclusiveProcess hizmet paketi etkinleştirme modu olan Durum Bilgisi Olmayan hizmetler için desteklenmektedir.

Uyarı

İlke, statik bağlantı noktası uç noktalarıyla kullanıldığında desteklenmez. Her ikisini birlikte kullanmak, aynı düğümdeki birden çok örnek aynı bağlantı noktasına bağlanmaya çalıştığından ve yukarı gelemediğinden iyi durumda olmayan bir kümeye yol açabilir.

Not

Bu yerleştirme ilkesiyle minInstanceCount değerinin yüksek olması Uygulama Yükseltmelerinin takılmasına neden olabilir. Örneğin, beş düğümlü bir kümeniz varsa ve InstanceCount=10 değerini ayarladıysanız, her düğümde iki örneğiniz olur. MinInstanceCount=9'u ayarlarsanız, denenen bir uygulama yükseltmesi takılabilir; MinInstanceCount=8 ile bu durum önlenebilir.

Sonraki adımlar