İngilizce dilinde oku

Aracılığıyla paylaş


Orleans ile akış

Orleans v.1.0.0, programlama modeline akış uzantıları desteği ekledi. Akış uzantıları, akışların daha basit ve daha sağlam bir şekilde düşünmesini ve bu akışlarla çalışmasını sağlayan bir dizi soyutlama ve API sağlar. Akış uzantıları, geliştiricilerin bir dizi olay üzerinde yapılandırılmış bir şekilde çalışan reaktif uygulamalar yazmasına olanak tanır. Akış sağlayıcılarının genişletilebilirlik modeli, programlama modelini Event Hubs, ServiceBus, Azure Kuyrukları ve Apache Kafka gibi çok çeşitli mevcut kuyruğa alma teknolojileriyle uyumlu ve taşınabilir hale getirir. Bu tür kuyruklarla etkileşime geçmek için özel kod yazmanız veya ayrılmış işlemler çalıştırmanız gerekmez.

Neden umursayım ki?

Akış İşleme hakkında her şeyi zaten biliyorsanız ve .NET'te Event Hubs, Kafka, Azure Stream Analytics, Apache Storm, Apache Spark Akış ve Reaktif Uzantılar (Rx) gibi teknolojileri biliyorsanız, neden ilgilenmeniz gerektiğini soruyor olabilirsiniz. Neden başka bir Akış İşleme Sistemine ihtiyacımız var ve Aktörlerin Akışlar ile nasıl ilişkili olduğu?"Orleans neden Akışlar?" sorusunun yanıtı.

Programlama modeli

Orleans Akışlar Programlama Modelinin ardında birkaç ilke vardır:

  1. Orleans akışları sanaldır. Başka bir ifadeyle, bir akış her zaman vardır. Açıkça oluşturulmaz veya yok edilmez ve asla başarısız olmaz.
  2. Akışlar, yalnızca GUID'lerden ve dizelerden oluşan mantıksal adlar olan akış kimlikleriyle tanımlanır.
  3. Orleans Akışlar, veri oluşturma işlemini hem zaman hem de alanda işlemeden ayırmanıza olanak sağlar. Bu, akış üreticisinin ve akış tüketicisinin farklı sunucularda veya farklı saat dilimlerinde olabileceği ve hatalara dayanacağı anlamına gelir.
  4. Orleans akışları hafif ve dinamiktir. Orleans Streaming Runtime, yüksek hızda gelen ve giden çok sayıda akışı işlemek için tasarlanmıştır.
  5. Orleans akış bağlamaları dinamiktir. Orleans Streaming Runtime, tahılların yüksek hızda akışlara bağlandığı ve akış bağlantısının kesildiği durumları işlemek için tasarlanmıştır.
  6. Orleans Streaming Runtime, akış tüketiminin yaşam döngüsünü şeffaf bir şekilde yönetir. Bir uygulama bir akışa abone olduktan sonra, hata durumunda bile akışın olaylarını alır.
  7. Orleans akışları tahıllar ve Orleans müşterileri arasında düzgün çalışır.

Programlama API'leri

Uygulamalar ve Orleans.Streams.IAsyncObservable<T> arabirimlerini uygulayan Orleans.Streams.IAsyncStream<T>kullanarak akışlarla Orleans.Streams.IAsyncObserver<T> etkileşim kurar. Bu API'ler .NET'teki iyi bilinen Reaktif Uzantılara (Rx) benzer.

Aşağıdaki tipik bir örnekte, bir cihaz bulutta çalışan hizmete HTTP isteği olarak gönderilen bazı veriler oluşturur. Ön uç sunucusunda çalışan Orleans istemcisi bu HTTP çağrısını alır ve verileri eşleşen bir cihaz akışında yayımlar:

public async Task OnHttpCall(DeviceEvent deviceEvent)
{
     // Post data directly into the device's stream.
     IStreamProvider streamProvider =
        GrainClient.GetStreamProvider("MyStreamProvider");

    IAsyncStream<DeviceEventData> deviceStream =
        streamProvider.GetStream<DeviceEventData>(
            deviceEvent.DeviceId, "MyNamespace");

     await deviceStream.OnNextAsync(deviceEvent.Data);
}

Aşağıdaki başka bir örnekte, bir sohbet kullanıcısı (Orleans Grain olarak uygulanır) bir sohbet odasına katılır, bu odadaki diğer tüm kullanıcılar tarafından oluşturulan sohbet iletilerinin akışını ele alır ve buna abone olur. Sohbet kullanıcısının sohbet odası dilimini (sistemimizde böyle bir dilim olmayabilir) veya bu gruptaki iletileri oluşturan diğer kullanıcılar hakkında bilgi sahibi olması gerekmediğine dikkat edin. Sohbet akışında yayımlamak için kullanıcıların şu anda akışa kimlerin abone olduğunu bilmesi gerekmez. Bu, sohbet kullanıcılarının zaman ve alan açısından nasıl tamamen ayrıştırılabileceğini gösterir.

public class ChatUser: Grain
{
    public async Task JoinChat(Guid chatGroupId)
    {
        IStreamProvider streamProvider =
            base.GetStreamProvider("MyStreamProvider");

        IAsyncStream<string> chatStream =
            streamProvider.GetStream<string>(chatGroupId, "MyNamespace");

        await chatStream.SubscribeAsync(
            async (message, token) => Console.WriteLine(message))
    }
}

Hızlı başlangıç örneği

Hızlı Başlangıç Örneği, uygulamadaki akışları kullanmanın genel iş akışına hızlı bir genel bakıştır. Okuduktan sonra kavramları daha iyi anlamak için Akışlar Programlama API'lerini okumanız gerekir.

programlama API'lerini Akışlar

Akışlar Programlama API'leri, programlama API'lerinin ayrıntılı bir açıklamasını sağlar.

Akış sağlayıcıları

Akışlar çeşitli şekil ve formların fiziksel kanalları aracılığıyla gelebilir ve farklı semantiklere sahip olabilir. Orleans Streaming, sistemde bir genişletilebilirlik noktası olan Stream Providers kavramı aracılığıyla bu çeşitliliği destekleyecek şekilde tasarlanmıştır. Orleans şu anda iki akış sağlayıcısının uygulamalarına sahiptir: TCP tabanlı Basit İleti Akışı Sağlayıcısı ve Azure Kuyruk Tabanlı Azure Kuyruk Akışı Sağlayıcısı. Stream Sağlayıcıları hakkında daha fazla ayrıntıya Stream Providers sayfasından ulaşabilirsiniz.

Akış semantiği

Akış Aboneliği Semantiği:

Orleans Akışlar Stream Aboneliği işlemleri için Sıralı Tutarlılık garantisi vermektedir. Özellikle, bir tüketici bir akışa abone olduğunda, abonelik işlemini temsil eden işlem başarıyla çözümlendikten sonra Task tüketici abone olduktan sonra oluşturulan tüm olayları görür. Ayrıca, Geri Sarılabilir akışlar kullanarak StreamSequenceTokengeçmişte rastgele bir noktadan abone olmanıza olanak sağlar. Daha fazla bilgi için bkz . Orleans akış sağlayıcıları.

Bireysel Akış Olayları Teslim Garantileri:

Tek tek olay teslim garantileri, tek tek akış sağlayıcılarına bağlıdır. Bazıları yalnızca en iyi çabayı bir kerede teslim (Basit İleti Akışlar (SMS) gibi) sağlarken, diğerleri en az bir kez teslim (Azure Kuyruk Akışlar gibi) sağlar. Tam olarak bir kez teslimi garanti edecek bir akış sağlayıcısı oluşturmak bile mümkündür (henüz böyle bir sağlayıcımız yok, ancak bir sağlayıcı oluşturmak mümkündür).

Olay Teslim Siparişi:

Olay sırası belirli bir akış sağlayıcısına da bağlıdır. SMS akışlarında üretici, tüketici tarafından görülen olayların sırasını, yayımlama biçimini denetleyerek açıkça denetler. Temel alınan Azure Kuyrukları hata durumlarında sırayı garanti etmediğinden Azure Kuyruk akışları FIFO sırasını garanti etmemektedir. Uygulamalar ayrıca kullanarak StreamSequenceTokenakış teslim siparişlerini de denetleyebiliyor.

Akışlar uygulaması

Orleans Akışlar Uygulaması, iç uygulamaya üst düzey bir genel bakış sağlar.

Kod örnekleri

Akış API'lerinin bir dilim içinde nasıl kullanılacağına ilişkin diğer örnekler burada bulunabilir. Gelecekte daha fazla örnek oluşturmayı planlıyoruz.

Ayrıca bkz.