Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Silo, uzantı yöntemi ve birkaç ek seçenek sınıfı ile UseOrleans(IHostBuilder, Action<HostBuilderContext,ISiloBuilder>) program aracılığıyla yapılandırılır. içindeki Orleans seçenek sınıfları .NET'teki Seçenekler desenini izler ve dosyalar, ortam değişkenleri ve geçerli herhangi bir yapılandırma sağlayıcısı aracılığıyla yüklenebilir.
Silo yapılandırmasının birkaç önemli yönü vardır:
- Kümeleme sağlayıcısı
- (İsteğe bağlı) Orleans kümeleme bilgileri
- (İsteğe bağlı) Silodan siloya ve istemciden siloya iletişimlerde kullanılacak uç noktalar
Bu, küme bilgilerini tanımlayan, Azure kümelemesini kullanan ve uygulama bölümlerini yapılandıran bir silo yapılandırması örneğidir:
using IHost host = Host.CreateDefaultBuilder(args)
.UseOrleans(builder =>
{
builder.UseAzureStorageClustering(
options => options.ConfigureTableServiceClient(connectionString));
})
.UseConsoleLifetime()
.Build();
İpucu
için Orleansgeliştirme yaparken, yerel kümeyi yapılandırmak için öğesini çağırabilirsiniz UseLocalhostClustering(ISiloBuilder, Int32, Int32, IPEndPoint, String, String) . Üretim ortamlarında, dağıtımınıza uygun bir kümeleme sağlayıcısı kullanmalısınız.
Kümeleme sağlayıcısı
siloBuilder.UseAzureStorageClustering(
options => options.ConfigureTableServiceClient(connectionString))
Genellikle, üzerinde Orleans oluşturulan bir hizmet, ayrılmış donanımda veya bulutta bir düğüm kümesine dağıtılır. Geliştirme ve temel test için tek Orleans düğümlü bir yapılandırmada dağıtılabilir. Bir düğüm kümesine dağıtıldığında, Orleans düğüm hatalarını algılama ve otomatik yeniden yapılandırma dahil olmak üzere kümedeki siloların Orleans üyeliğini bulmak ve korumak için dahili olarak bir protokol kümesi uygular.
Küme üyeliğinin güvenilir yönetimi için düğümlerin Orleans eşitlenmesi için Azure Table, SQL Server veya Apache ZooKeeper kullanır.
Bu örnekte üyelik sağlayıcısı olarak Azure Tablosu kullanılmıştır.
Orleans kümeleme bilgileri
İsteğe bağlı olarak kümeleme yapılandırmak için örnekteki yöntemin Configure ISiloBuilder
tür parametresi olarak kullanınClusterOptions
.
siloBuilder.Configure<ClusterOptions>(options =>
{
options.ClusterId = "my-first-cluster";
options.ServiceId = "SampleApp";
})
Burada iki seçenek belirtebilirsiniz:
ClusterId
"my-first-cluster"
olarak ayarlayın: Bu, küme için Orleans benzersiz bir kimliktir. Bu kimliği kullanan tüm istemciler ve silolar doğrudan birbirleriyle konuşabilecektir. Ancak farklı dağıtımlar için farklıClusterId
bir dağıtım kullanmayı seçebilirsiniz.ServiceId
olarak"SampleApp"
ayarlayın: Bu, kalıcılık sağlayıcıları gibi bazı sağlayıcılar tarafından kullanılacak uygulamanız için benzersiz bir kimliktir. Bu kimlik kararlı kalmalı ve dağıtımlar arasında değişmemelidir.
Varsayılan olarak, Orleans hem hem ClusterId
de ServiceId
için değerini "default"
kullanır. Bu değerlerin çoğu durumda değiştirilmesi gerekmez. ServiceId
ikisinin daha önemli olduğu ve arka uç depolama sistemlerini birbirine müdahale etmeden paylaşabilmeleri için birbirinden farklı mantıksal hizmetleri ayırt etmek için kullanılır. ClusterId
, hangi konakların birbirine bağlanacağını belirlemek ve bir küme oluşturmak için kullanılır.
Her kümede, tüm konaklar aynı ServiceId
kullanmalıdır. Ancak, birden çok küme bir ServiceId
öğesini paylaşabilir. Bu, başka bir dağıtım kapatılmadan önce yeni bir dağıtımın (küme) başlatıldığı mavi/yeşil dağıtım senaryolarını etkinleştirir. Bu, Azure Uygulaması Hizmeti'nde barındırılan sistemler için tipiktir.
Daha yaygın bir durum, ServiceId
uygulamanın kullanım ömrü boyunca sabit kalması ve ClusterId
sıralı dağıtım stratejisinin kullanılmasıdır. Bu, Kubernetes ve Service Fabric'te barındırılan sistemler için tipiktir.
Uç Noktalar
Varsayılan olarak, Orleans silodan siloya iletişim için bağlantı noktasındaki 11111
tüm arabirimleri ve istemciden siloya iletişim için bağlantı noktasında 30000
dinler. Bu davranışı geçersiz kılmak için, çağırın ConfigureEndpoints(ISiloBuilder, Int32, Int32, AddressFamily, Boolean) ve kullanmak istediğiniz bağlantı noktası numaralarını geçirin.
siloBuilder.ConfigureEndpoints(siloPort: 17_256, gatewayPort: 34_512)
Önceki kodda:
- Silo bağlantı noktası olarak
17_256
ayarlanır. - Ağ geçidi bağlantı noktası olarak
34_512
ayarlanır.
Silonun Orleans iki tipik uç nokta yapılandırması türü vardır:
- Silo-silo uç noktaları, aynı kümedeki silolar arasındaki iletişim için kullanılır.
- İstemciden siloya (veya ağ geçidi) uç noktaları, aynı kümedeki istemcilerle silolar arasındaki iletişim için kullanılır.
Bu yöntem çoğu durumda yeterli olmalıdır, ancak gerekirse daha fazla özelleştirebilirsiniz. Aşağıda, bağlantı noktası iletme ile dış IP adresinin nasıl kullanılacağına ilişkin bir örnek verilmiştir:
siloBuilder.Configure<EndpointOptions>(options =>
{
// Port to use for silo-to-silo
options.SiloPort = 11_111;
// Port to use for the gateway
options.GatewayPort = 30_000;
// IP Address to advertise in the cluster
options.AdvertisedIPAddress = IPAddress.Parse("172.16.0.42");
// The socket used for client-to-silo will bind to this endpoint
options.GatewayListeningEndpoint = new IPEndPoint(IPAddress.Any, 40_000);
// The socket used by the gateway will bind to this endpoint
options.SiloListeningEndpoint = new IPEndPoint(IPAddress.Any, 50_000);
})
Dahili olarak, silo ve 0.0.0.0:50000
üzerinde 0.0.0.0:40000
dinler, ancak üyelik sağlayıcısında yayımlanan değer ve 172.16.0.42:30000
olur172.16.0.42:11111
.
Silo, ve birkaç ek seçenek sınıfı aracılığıyla SiloHostBuilder program aracılığıyla yapılandırılır. içindeki Orleans seçenek sınıfları .NET'teki Seçenekler desenini izler ve dosyalar, ortam değişkenleri ve geçerli herhangi bir yapılandırma sağlayıcısı aracılığıyla yüklenebilir.
Silo yapılandırmasının birkaç önemli yönü vardır:
- Orleans kümeleme bilgileri
- Kümeleme sağlayıcısı
- Silodan siloya ve istemciden siloya iletişimlerde kullanılacak uç noktalar
- Uygulama bölümleri
Bu, küme bilgilerini tanımlayan, Azure kümelemesini kullanan ve uygulama bölümlerini yapılandıran bir silo yapılandırması örneğidir:
var silo = Host.CreateDefaultBuilder(args)
.UseOrleans(builder =>
{
builder
.UseAzureStorageClustering(
options => options.ConnectionString = connectionString)
.Configure<ClusterOptions>(options =>
{
options.ClusterId = "my-first-cluster";
options.ServiceId = "AspNetSampleApp";
})
.ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000)
.ConfigureApplicationParts(
parts => parts.AddApplicationPart(typeof(ValueGrain).Assembly).WithReferences())
})
.UseConsoleLifetime()
.Build();
Şimdi bu örnekte kullanılan adımların dökümünü alalım:
Kümeleme sağlayıcısı
siloBuilder.UseAzureStorageClustering(
options => options.ConnectionString = connectionString)
Genellikle, üzerinde Orleans oluşturulan bir hizmet, ayrılmış donanımda veya bulutta bir düğüm kümesine dağıtılır. Geliştirme ve temel test için tek Orleans düğümlü bir yapılandırmada dağıtılabilir. Bir düğüm kümesine dağıtıldığında, Orleans düğüm hatalarını algılama ve otomatik yeniden yapılandırma dahil olmak üzere kümedeki siloların Orleans üyeliğini bulmak ve korumak için dahili olarak bir protokol kümesi uygular.
Küme üyeliğinin güvenilir yönetimi için düğümlerin Orleans eşitlenmesi için Azure Table, SQL Server veya Apache ZooKeeper kullanır.
Bu örnekte, üyelik sağlayıcısı olarak Azure Tablosu'nu kullanıyoruz.
Orleans kümeleme bilgileri
.Configure<ClusterOptions>(options =>
{
options.ClusterId = "my-first-cluster";
options.ServiceId = "AspNetSampleApp";
})
Burada iki şey yapıyoruz:
ClusterId
"my-first-cluster"
olarak ayarlayın: Bu, küme için Orleans benzersiz bir kimliktir. Bu kimliği kullanan tüm istemciler ve silolar doğrudan birbirleriyle konuşabilecektir. Ancak farklı dağıtımlar için farklıClusterId
bir dağıtım kullanmayı seçebilirsiniz.ServiceId
olarak"AspNetSampleApp"
ayarlayın: Bu, kalıcılık sağlayıcıları gibi bazı sağlayıcılar tarafından kullanılacak uygulamanız için benzersiz bir kimliktir. Bu kimlik kararlı kalmalı ve dağıtımlar arasında değişmemelidir.
Varsayılan olarak, Orleans hem hem ClusterId
de ServiceId
için değerini "default"
kullanır. Bu değerlerin çoğu durumda değiştirilmesi gerekmez. ServiceId
ikisinin daha önemli olduğu ve arka uç depolama sistemlerini birbirine müdahale etmeden paylaşabilmeleri için birbirinden farklı mantıksal hizmetleri ayırt etmek için kullanılır. ClusterId
, hangi konakların birbirine bağlanacağını belirlemek ve bir küme oluşturmak için kullanılır.
Her kümede, tüm konaklar aynı ServiceId
kullanmalıdır. Ancak, birden çok küme bir ServiceId
öğesini paylaşabilir. Bu, başka bir dağıtım kapatılmadan önce yeni bir dağıtımın (küme) başlatıldığı mavi/yeşil dağıtım senaryolarını etkinleştirir. Bu, Azure Uygulaması Hizmeti'nde barındırılan sistemler için tipiktir.
Daha yaygın bir durum, ServiceId
uygulamanın kullanım ömrü boyunca sabit kalması ve ClusterId
sıralı dağıtım stratejisinin kullanılmasıdır. Bu, Kubernetes ve Service Fabric'te barındırılan sistemler için tipiktir.
Uç Noktalar
siloBuilder.ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000)
Silonun Orleans iki tipik uç nokta yapılandırması türü vardır:
- Silodan siloya uç noktaları, aynı kümedeki silolar arasında iletişim için kullanılır
- İstemciler ile aynı kümedeki silolar arasında iletişim için kullanılan istemciden silo uç noktalarına (veya ağ geçidine)
Örnekte, silodan siloya iletişim 11111
için kullanılan bağlantı noktasını ve ağ geçidinin 30000
bağlantı noktasını olarak ayarlayan yardımcı yöntemini .ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000)
kullanıyoruz.
Bu yöntem, hangi arabirimin dinleneceğini algılar.
Bu yöntem çoğu durumda yeterli olmalıdır, ancak gerekirse daha fazla özelleştirebilirsiniz. Aşağıda, bağlantı noktası iletme ile dış IP adresinin nasıl kullanılacağına ilişkin bir örnek verilmiştir:
siloBuilder.Configure<EndpointOptions>(options =>
{
// Port to use for silo-to-silo
options.SiloPort = 11111;
// Port to use for the gateway
options.GatewayPort = 30000;
// IP Address to advertise in the cluster
options.AdvertisedIPAddress = IPAddress.Parse("172.16.0.42");
// The socket used for client-to-silo will bind to this endpoint
options.GatewayListeningEndpoint = new IPEndPoint(IPAddress.Any, 40000);
// The socket used by the gateway will bind to this endpoint
options.SiloListeningEndpoint = new IPEndPoint(IPAddress.Any, 50000);
})
Dahili olarak, silo ve 0.0.0.0:50000
üzerinde 0.0.0.0:40000
dinler, ancak üyelik sağlayıcısında yayımlanan değer ve 172.16.0.42:30000
olur172.16.0.42:11111
.
Uygulama bölümleri
siloBuilder.ConfigureApplicationParts(
parts => parts.AddApplicationPart(
typeof(ValueGrain).Assembly)
.WithReferences())
Bu adım teknik olarak gerekli olmasa da (yapılandırılmamışsa, Orleans geçerli klasördeki tüm derlemeleri tarar), geliştiricilerin bunu yapılandırması teşvik edilir. Bu adım, kullanıcı derlemelerini ve türlerini yüklemeye yardımcı Orleans olur. Bu derlemeler Uygulama Parçaları olarak adlandırılır. Tüm Grains, Grain Interfaces ve Serializers, Application Parts kullanılarak bulunur.
Uygulama Bölümleri, ve ISiloHostBuilderüzerinde IClientBuilder uzantı yöntemi kullanılarak ConfigureApplicationParts
erişilebilen kullanılarak IApplicationPartManageryapılandırılır. ConfigureApplicationParts
yöntemi bir temsilci kabul eder. Action<IApplicationPartManager>
Yaygın kullanımları desteklemek için IApplicationPartManager aşağıdaki uzantı yöntemleri:
- ApplicationPartManagerExtensions.AddApplicationPart Bu uzantı yöntemi kullanılarak tek bir derleme eklenebilir.
- ApplicationPartManagerExtensions.AddFromAppDomain içinde yüklü
AppDomain
olan tüm derlemeleri ekler. - ApplicationPartManagerExtensions.AddFromApplicationBaseDirectory geçerli temel yola tüm derlemeleri yükler ve ekler (bkz AppDomain.BaseDirectory. ).
Yukarıdaki yöntemler tarafından eklenen derlemeler, dönüş türlerinde aşağıdaki uzantı yöntemleri kullanılarak desteklenebilir: IApplicationPartManagerWithAssemblies
- ApplicationPartManagerExtensions.WithReferences eklenen parçalardan başvuruda bulunan tüm derlemeleri ekler. Bu, geçişli olarak başvurulabilecek tüm derlemeleri hemen yükler. Derleme yükleme hataları yoksayılır.
- ApplicationPartManagerCodeGenExtensions.WithCodeGeneration eklenen parçalar için destek kodu oluşturur ve parça yöneticisine ekler. Bu, paketin yüklenmesini
Microsoft.Orleans.OrleansCodeGenerator
gerektirir ve genellikle çalışma zamanı kodu oluşturma olarak adlandırılır.
Tür bulma, sağlanan Uygulama Bölümlerinin belirli öznitelikler içermesini gerektirir. Grains, Grain Interfaces veya Serializers içeren her projeye derleme zamanı kod oluşturma paketini (Microsoft.Orleans.CodeGenerator.MSBuild
veya Microsoft.Orleans.OrleansCodeGenerator.Build
) eklemek, bu özniteliklerin mevcut olduğundan emin olmak için önerilen yaklaşımdır. Derleme zamanı kodu oluşturma yalnızca C# dilini destekler. F#, Visual Basic ve diğer .NET dilleri için, yukarıda açıklanan yöntem aracılığıyla WithCodeGeneration yapılandırma zamanında kod oluşturulabilir. Kod oluşturmayla ilgili daha fazla bilgi ilgili bölümde bulunabilir.