Azure Event Grid'de istemci tarafı yük devretme uygulaması

Olağanüstü durum kurtarma genellikle bir bölge iyi durumda olmadığında kesintileri önlemek için bir yedekleme kaynağı oluşturmayı içerir. Bu işlem sırasında iş yükünüzde Azure Event Grid kaynaklarının birincil ve ikincil bölgesi gerekir.

Uygulama işlevselliğinde ciddi bir kayıptan kurtulmanın farklı yolları vardır. Bu makalede, istemcinizi iyi durumda olmayan bir kaynak veya bölge nedeniyle bir hatadan kurtarmaya hazırlamak için izlemeniz gereken denetim listesini açıklayacağız.

Event Grid, sunucu tarafında el ile ve otomatik coğrafi olağanüstü durum kurtarmayı (GeoDR) destekler. Yük devretme işleminde daha fazla denetime sahip olmak istiyorsanız istemci tarafı olağanüstü durum kurtarma mantığını uygulamaya devam edebilirsiniz. Otomatik GeoDR hakkında ayrıntılı bilgi için bkz . Azure Event Grid'de sunucu tarafı coğrafi olağanüstü durum kurtarma.

Aşağıdaki tabloda Event Grid'de istemci tarafı yük devretme ve coğrafi olağanüstü durum kurtarma desteği gösterilmektedir.

Event Grid kaynağı İstemci tarafı yük devretme desteği Coğrafi olağanüstü durum kurtarma (GeoDR) desteği
Özel Konu Başlıkları Desteklenir Çapraz Coğrafi / Bölgesel
Sistem Konuları Desteklenmez Otomatik olarak etkinleştirildi
Etki alanları Desteklenir Çapraz Coğrafi / Bölgesel
İş Ortağı Ad Alanları Desteklenir Desteklenmez
Ad Alanları Desteklenir Desteklenmez

İstemci tarafı yük devretme konusunda dikkat edilmesi gerekenler

  1. Birincil Event Grid kaynağınızı oluşturun ve yapılandırın.
  2. İkincil Event Grid kaynağınızı oluşturun ve yapılandırın.
  3. Her iki kaynağın da aynı yapılandırmaya, alt kaynaklara ve özelliklere sahip olması gerektiğini unutmayın.
  4. Event Grid kaynaklarının farklı bölgelerde barındırılması gerekir.
  5. Event Grid kaynağında, teslim edilemeyen ileti için depolama kaynağı gibi bağımlı kaynaklar varsa, ikincil Event Grid kaynağında kullanılan aynı bölgeyi kullanmanız gerekir.
  6. Kurtarma planı kaynaklarınızın yerinde ve düzgün çalıştığından emin olmak için uç noktalarınızın düzenli olarak test olduğundan emin olun.

Özel konular için temel istemci tarafı yük devretme uygulama örneği

Aşağıdaki örnek kod, önce birincil konu başlığınızda yayımlamayı deneyen basit bir .NET yayımcısıdır. Başarılı olmazsa ikincil konu üzerinden başarısız olur. Her iki durumda da üzerinde get https://<topic-name>.<topic-region>.eventgrid.azure.net/api/healthyaparak diğer konunun sistem durumu api'sini denetler. /api/health uç noktasında bir GET yapıldığında sağlıklı bir konu her zaman 200 Tamam ile yanıt vermelidir.

Dekont

Aşağıdaki örnek kod yalnızca tanıtım amaçlıdır ve üretim kullanımına yönelik değildir.

using System;
using System.Net.Http;
using System.Collections.Generic;
using System.Threading.Tasks;
using Azure;
using Azure.Messaging.EventGrid;

namespace EventGridFailoverPublisher
{
    // This captures the "Data" portion of an EventGridEvent on a custom topic
    class FailoverEventData
    {
        public string TestStatus { get; set; }
    }

    class Program
    {
        static async Task Main(string[] args)
        {
            // TODO: Enter the endpoint each topic. You can find this topic endpoint value
            // in the "Overview" section in the "Event Grid topics" page in Azure Portal..
            string primaryTopic = "https://<primary-topic-name>.<primary-topic-region>.eventgrid.azure.net/api/events";
            string secondaryTopic = "https://<secondary-topic-name>.<secondary-topic-region>.eventgrid.azure.net/api/events";

            // TODO: Enter topic key for each topic. You can find this in the "Access Keys" section in the
            // "Event Grid topics" page in Azure Portal.
            string primaryTopicKey = "<your-primary-topic-key>";
            string secondaryTopicKey = "<your-secondary-topic-key>";

            Uri primaryTopicUri = new Uri(primaryTopic);
            Uri secondaryTopicUri = new Uri(secondaryTopic);

            Uri primaryTopicHealthProbe = new Uri($"https://{primaryTopicUri.Host}/api/health");
            Uri secondaryTopicHealthProbe = new Uri($"https://{secondaryTopicUri.Host}/api/health");

            var httpClient = new HttpClient();

            try
            {
                var client = new EventGridPublisherClient(primaryTopicUri, new AzureKeyCredential(primaryTopicKey));

                await client.SendEventsAsync(GetEventsList());
                Console.Write("Published events to primary Event Grid topic.");

                HttpResponseMessage health = httpClient.GetAsync(secondaryTopicHealthProbe).Result;
                Console.Write("\n\nSecondary Topic health " + health);
            }
            catch (RequestFailedException ex)
            {
                var client = new EventGridPublisherClient(secondaryTopicUri, new AzureKeyCredential(secondaryTopicKey));

                await client.SendEventsAsync(GetEventsList());
                Console.Write("Published events to secondary Event Grid topic. Reason for primary topic failure:\n\n" + ex);

                HttpResponseMessage health = await httpClient.GetAsync(primaryTopicHealthProbe);
                Console.WriteLine($"Primary Topic health {health}");
            }

            Console.ReadLine();
        }

        static IList<EventGridEvent> GetEventsList()
        {
            List<EventGridEvent> eventsList = new List<EventGridEvent>();

            for (int i = 0; i < 5; i++)
            {
                eventsList.Add(new EventGridEvent(
                    subject: "test" + i,
                    eventType: "Contoso.Failover.Test",
                    dataVersion: "2.0",
                    data: new FailoverEventData
                    {
                        TestStatus = "success"
                    }));
            }

            return eventsList;
        }
    }
}

Deneyin

Artık tüm bileşenlerinizi oluşturduğunuza göre yük devretme uygulamanızı test edebilirsiniz.

Yük devretme işleminizin çalıştığından emin olmak için, birincil konu anahtarındaki birkaç karakteri değiştirerek artık geçerli olmamasını sağlayabilirsiniz. Yayımcıyı yeniden çalıştırmayı deneyin. Aşağıdaki örnek olaylar Event Grid üzerinden akmaya devam edecektir, ancak istemcinize baktığınızda, bunların artık ikincil konu üzerinden yayımlandığını görürsünüz.

Olası uzantılar

Bu örneği gereksinimlerinize göre genişletmenin birçok yolu vardır. Yüksek hacimli senaryolar için, konunun sistem durumu api'sini düzenli olarak bağımsız olarak denetlemek isteyebilirsiniz. Bu şekilde, bir konu kapanacaksa, her yayımlamada bunu denetlemeniz gerekmez. Bir konunun iyi durumda olmadığını bildiğinizde, varsayılan olarak ikincil konuya yayımlayabilirsiniz.

Benzer şekilde, kendi gereksinimlerinize göre yeniden çalışma mantığı uygulamak isteyebilirsiniz. Gecikme süresini azaltmanız için en yakın veri merkezine yayımlamak kritik önem taşıyorsa, yük devreden bir konunun sistem durumu api'sini düzenli aralıklarla yoklayabilirsiniz. Yeniden iyi duruma geldikten sonra daha yakın veri merkezine yeniden çalışma güvenlidir.

Sonraki adımlar

  • Http uç noktasında olayları almayı öğrenin
  • Olayları Karma Bağlan ions'a yönlendirmeyi keşfedin
  • Azure DNS ve Traffic Manager kullanarak olağanüstü durum kurtarma hakkında bilgi edinin