Aracılığıyla paylaş


Sunucu yapılandırması

Silo'yu programlama yöntemiyle, UseOrleans(IHostBuilder, Action<HostBuilderContext,ISiloBuilder>) uzantı metodunu ve birkaç ek seçenek sınıfını kullanarak yapılandırın. içindeki Orleans seçenek sınıfları .NET'teki Seçenekler desenini izler ve dosyalardan, ortam değişkenlerinden veya diğer geçerli yapılandırma sağlayıcılarından 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şim için uç noktalar

Tavsiye

.NET Aspire (Orleans 8.0+) kullanıyorsanız, bu yapılandırmanın çoğu otomatik olarak işlenir. Aspire, ortam değişkenleri aracılığıyla , ClusterIdve uç nokta yapılandırmasını eklerServiceId, böylece daha basit parametresiz UseOrleans yöntemi kullanabilirsiniz. Önerilen yaklaşım için bkz Orleans . ve .NET Aspire tümleştirmesi .

Bu örnekte küme bilgilerini tanımlayan ve kümeleme için Azure Tablo Depolama'yı kullanan bir silo yapılandırması gösterilmektedir:

TokenCredential kullanarak bir hizmet URI'si kullanmak önerilen yaklaşımdır. Bu düzen, gizli dizilerin yapılandırmada depolanmasını önler ve güvenli kimlik doğrulaması için Microsoft Entra Id'yi kullanır.

DefaultAzureCredential yerel geliştirme ve üretim ortamlarında sorunsuz çalışan bir kimlik bilgisi zinciri sağlar. Geliştirme sırasında Azure CLI veya Visual Studio kimlik bilgilerinizi kullanır. Azure'daki üretimde, kaynağınıza atanan yönetilen kimliği otomatik olarak kullanır.

Tavsiye

DefaultAzureCredential yerel geliştirme ve üretim genelinde sorunsuz çalışır. Geliştirme aşamasında Azure CLI veya Visual Studio kimlik bilgilerinizi kullanır. Azure'daki üretimde otomatik olarak kaynağın yönetilen kimliğini kullanır. Üretimde performans ve hata ayıklama yeteneğini artırmak için bunu ManagedIdentityCredential gibi belirli bir kimlik bilgisiyle değiştirmeyi düşünün. Daha fazla bilgi için bkz . DefaultAzureCredential kullanım kılavuzu.

using Azure.Identity;

using IHost host = Host.CreateDefaultBuilder(args)
    .UseOrleans(siloBuilder =>
    {
        siloBuilder.UseAzureStorageClustering(options =>
        {
            options.ConfigureTableServiceClient(
                new Uri("https://<your-storage-account>.table.core.windows.net"),
                new DefaultAzureCredential());
        });
    })
    .UseConsoleLifetime()
    .Build();

Tavsiye

için geliştirme yaparken Orleans, yerel bir küme yapılandırmak amacıyla UseLocalhostClustering(ISiloBuilder, Int32, Int32, IPEndPoint, String, String) çağrılabilir. Ü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ı

Tavsiye

DefaultAzureCredential yerel geliştirme ve üretim genelinde sorunsuz çalışır. Geliştirme aşamasında Azure CLI veya Visual Studio kimlik bilgilerinizi kullanır. Azure'daki üretimde otomatik olarak kaynağın yönetilen kimliğini kullanır. Üretimde performans ve hata ayıklama yeteneğini artırmak için bunu ManagedIdentityCredential gibi belirli bir kimlik bilgisiyle değiştirmeyi düşünün. Daha fazla bilgi için bkz . DefaultAzureCredential kullanım kılavuzu.

siloBuilder.UseAzureStorageClustering(options =>
{
    options.ConfigureTableServiceClient(
        new Uri("https://<your-storage-account>.table.core.windows.net"),
        new DefaultAzureCredential());
});

Genellikle, Orleans üzerine kurulu bir hizmeti, ayrılmış donanımda veya bulutta bulunan bir düğüm kümesi üzerinde dağıtırsınız. Geliştirme ve temel test için tek düğümlü bir yapılandırmada dağıtım Orleans yapabilirsiniz. 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 protokoller uygular.

Güvenilir küme üyeliği yönetimi için Orleans, düğüm eşitlemesi amacıyla Azure Table, SQL Server veya Apache ZooKeeper kullanır.

Bu örnekte, üyelik sağlayıcısı olarak Azure Tablosu'nu kullanacağız.

Orleans kümeleme bilgileri

İsteğe bağlı olarak kümeleme yapılandırmak için, ClusterOptions'yı Configure örneğindeki ISiloBuilder yöntemin tür parametresi olarak kullanın.

siloBuilder.Configure<ClusterOptions>(options =>
{
    options.ClusterId = "my-first-cluster";
    options.ServiceId = "SampleApp";
})

Burada iki seçenek belirtebilirsiniz:

  • ClusterId öğesini "my-first-cluster" olarak ayarlayın: Bu, Orleans kümesi için benzersiz bir kimliktir. Bu kimliği kullanan tüm istemciler ve silolar doğrudan birbirleriyle konuşabilir. Ancak farklı dağıtımlar için farklı bir ClusterId kullanmayı seçebilirsiniz.
  • ServiceId "SampleApp"olarak ayarlayın: Bu, kalıcılık sağlayıcıları gibi bazı sağlayıcılar tarafından kullanılan 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 "default" için hem de ServiceId için ClusterId kullanır. Bu değerlerin çoğu durumda değiştirilmesi gerekmez. ServiceId daha önemlidir ve farklı mantıksal hizmetleri ayırt ederek arka uç depolama sistemlerini müdahale olmadan paylaşmalarına olanak tanır. ClusterId küme oluşturmak için hangi konakların bağlanacağını belirler.

Her kümede, tüm konaklar aynı ServiceId kullanmalıdır. Bir ServiceId birden çok küme tarafından paylaşılabilir. Bu, başka bir dağıtımı kapatmadan önce yeni bir dağıtım (küme) başlattığınız mavi/yeşil dağıtım senaryolarını etkinleştirir. Bu, Azure App Service'te barındırılan sistemler için tipiktir.

Daha yaygın olan durum, ServiceId ve ClusterId öğelerinin uygulamanın ömrü boyunca sabit kalması ve aşamalı dağıtım stratejisini kullanmanızdı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 11111 bağlantı noktasında ve istemciden siloya iletişim için 30000 bağlantı noktasında tüm arabirimlerde 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ı 17_256 olarak ayarlanmıştı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:

  • Silodan 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 istemciler ve silolar arasındaki iletişim için kullanılır.

Bu yöntem çoğu durumda yeterli olacaktır, ancak gerekirse daha fazla özelleştirebilirsiniz. Bağlantı noktası iletme ile dış IP adresi kullanma örneği aşağıda verilmişti:

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 0.0.0.0:40000 ve 0.0.0.0:50000 üzerinde dinler, ancak üyelik sağlayıcısında yayımlanan değerler 172.16.0.42:11111 ve 172.16.0.42:30000 olur.

SiloHostBuilder ve birkaç ek seçenek sınıfı aracılığıyla program yoluyla bir silo yapılandırın. içindeki Orleans seçenek sınıfları .NET'teki Seçenekler desenini izler ve dosyalardan, ortam değişkenlerinden veya diğer geçerli yapılandırma sağlayıcılarından 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şim için uç noktalar
  • Uygulama bölümleri

Bu örnekte, küme bilgilerini tanımlayan, Azure kümeleme kullanan ve uygulama bölümlerini yapılandıran bir silo yapılandırması gösterilmektedir:

public static async Task ConfigureSilo(string connectionString)
{
    var siloHostBuilder = new SiloHostBuilder()
        .UseAzureStorageClustering(
            options => options.ConfigureTableServiceClient(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());

    var silo = siloHostBuilder.Build();
    await silo.StartAsync();
}

Şimdi bu örnekte kullanılan adımları ayıralım:

Kümeleme sağlayıcısı

public static void ConfigureAzureClustering(ISiloHostBuilder siloBuilder, string connectionString)
{
    siloBuilder.UseAzureStorageClustering(
        options => options.ConfigureTableServiceClient(connectionString));
}

Genellikle, Orleans üzerine kurulu bir hizmeti, ayrılmış donanımda veya bulutta bulunan bir düğüm kümesi üzerinde dağıtırsınız. Geliştirme ve temel test için tek düğümlü bir yapılandırmada dağıtım Orleans yapabilirsiniz. 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 protokoller uygular.

Güvenilir küme üyeliği yönetimi için Orleans, düğüm eşitlemesi amacıyla Azure Table, SQL Server veya Apache ZooKeeper kullanır.

Bu örnekte, üyelik sağlayıcısı olarak Azure Tablosu'nu kullanacağız.

Orleans kümeleme bilgileri

public static void ConfigureClusterOptions(ISiloHostBuilder siloBuilder)
{
    siloBuilder.Configure<ClusterOptions>(options =>
    {
        options.ClusterId = "my-first-cluster";
        options.ServiceId = "AspNetSampleApp";
    });
}

Burada iki şey yaparız:

  • ClusterId öğesini "my-first-cluster" olarak ayarlayın: Bu, Orleans kümesi için benzersiz bir kimliktir. Bu kimliği kullanan tüm istemciler ve silolar doğrudan birbirleriyle konuşabilir. Ancak farklı dağıtımlar için farklı bir ClusterId kullanmayı seçebilirsiniz.
  • ServiceId "AspNetSampleApp"olarak ayarlayın: Bu, kalıcılık sağlayıcıları gibi bazı sağlayıcılar tarafından kullanılan 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 "default" için hem de ServiceId için ClusterId kullanır. Bu değerlerin çoğu durumda değiştirilmesi gerekmez. ServiceId daha önemlidir ve farklı mantıksal hizmetleri ayırt ederek arka uç depolama sistemlerini müdahale olmadan paylaşmalarına olanak tanır. ClusterId küme oluşturmak için hangi konakların bağlanacağını belirler.

Her kümede, tüm konaklar aynı ServiceId kullanmalıdır. Bir ServiceId birden çok küme tarafından paylaşılabilir. Bu, başka bir dağıtımı kapatmadan önce yeni bir dağıtım (küme) başlattığınız mavi/yeşil dağıtım senaryolarını etkinleştirir. Bu, Azure App Service'te barındırılan sistemler için tipiktir.

Daha yaygın olan durum, ServiceId ve ClusterId öğelerinin uygulamanın ömrü boyunca sabit kalması ve aşamalı dağıtım stratejisini kullanmanızdır. Bu, Kubernetes ve Service Fabric'te barındırılan sistemler için tipiktir.

Uç Noktalar

public static void ConfigureSimpleEndpoints(ISiloHostBuilder siloBuilder)
{
    siloBuilder.ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000);
}

Silonun Orleans iki tipik uç nokta yapılandırması türü vardır:

  • Silodan silo uç noktaları: Aynı kümedeki silolar arasındaki iletişim için kullanılır.
  • İstemci-silo uç noktaları (veya ağ geçidi): Aynı kümedeki istemciler ve silolar arasındaki iletişim için kullanılır.

Örnekte, silodan siloya iletişim .ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000) için bağlantı noktasını ve ağ geçidi bağlantı noktasını 11111olarak ayarlayan yardımcı yöntemini 30000kullanırız. Bu yöntem, hangi arabirimin dinleneceğini belirler.

Bu yöntem çoğu durumda yeterli olacaktır, ancak gerekirse daha fazla özelleştirebilirsiniz. Bağlantı noktası iletme ile dış IP adresi kullanma örneği aşağıda verilmişti:

public static void ConfigureEndpointOptions(ISiloHostBuilder siloBuilder)
{
    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 0.0.0.0:40000 ve 0.0.0.0:50000 üzerinde dinler, ancak üyelik sağlayıcısında yayımlanan değerler 172.16.0.42:11111 ve 172.16.0.42:30000 olur.

Uygulama bölümleri

public static void ConfigureApplicationParts(ISiloHostBuilder siloBuilder)
{
    siloBuilder.ConfigureApplicationParts(
        parts => parts.AddApplicationPart(
            typeof(ValueGrain).Assembly)
            .WithReferences());
}

Bu adım teknik olarak gerekli olmasa da (yapılandırılmadıysa, Orleans geçerli klasördeki tüm derlemeleri tarar), yapılandırmanızı öneririz. Bu adım, kullanıcı derlemelerini ve türlerini yüklemeye yardımcı olur Orleans . Bu derlemeler Uygulama Parçaları olarak adlandırılır. Orleans Uygulama Bölümlerini kullanarak tüm Taneleri, Tane Arabirimlerini ve Serileştiricileri keşfeder.

IApplicationPartManager kullanarak, ConfigureApplicationParts erişilebilen, IClientBuilder ve ISiloHostBuilder üzerindeki uzantı yöntemi aracılığıyla Uygulama Bölümlerini yapılandırın. ConfigureApplicationParts yöntemi bir temsilci kabul eder. Action<IApplicationPartManager>

Aşağıdaki uzantı yöntemleri IApplicationPartManager, yaygın kullanımları destekler.

Üstte belirtilen yöntemler tarafından dönüş türlerine eklenen derlemeleri, IApplicationPartManagerWithAssemblies'da aşağıdaki uzantı yöntemlerini kullanarak tamamlayın.

  • WithReferences: Eklenen parçalardan referans verilen tüm derlemeleri ekler. Bu, geçişli olarak referans verilen tüm derlemeleri derhal yükler. Bütünleştirme yükleme hataları yoksayılır.
  • WithCodeGeneration: Eklenen parçalar için destek kodu oluşturur ve parça yöneticisine ekler. Bunun için paketin Microsoft.Orleans.OrleansCodeGenerator yüklenmesi gerektiğini ve genellikle çalışma zamanı kodu oluşturma olarak anıldığını unutmayın.

Tür bulma, sağlanan Uygulama Bölümlerinin belirli öznitelikleri içermesini gerektirir. Bu özniteliklerin mevcut olduğundan emin olmak için, her projeye Grains, Grain Interfaces veya Serializers içeren derleme zamanı kod oluşturma paketinin (Microsoft.Orleans.CodeGenerator.MSBuild veya Microsoft.Orleans.OrleansCodeGenerator.Build) eklenmesi önerilir. Derleme zamanındaki kod üretimi yalnızca C# dilini destekler. F#, Visual Basic ve diğer .NET dilleri için, yukarıda açıklanan yöntemi kullanarak WithCodeGeneration yapılandırma sırasında kod oluşturabilirsiniz. İlgili bölümde kod oluşturma hakkında daha fazla bilgi bulabilirsiniz.