Baca dalam bahasa Inggris

Bagikan melalui


Streaming dengan Orleans

Orleans v.1.0.0 menambahkan dukungan untuk ekstensi streaming ke model pemrograman. Ekstensi streaming menyediakan serangkaian abstraksi dan API yang membuat berpikir dan bekerja dengan aliran lebih sederhana dan lebih kuat. Ekstensi streaming memungkinkan pengembang menulis aplikasi reaktif yang beroperasi pada urutan peristiwa secara terstruktur. Model ekstensibilitas penyedia streaming membuat model pemrograman kompatibel dengan dan portabel di berbagai teknologi antrean yang ada, seperti Event Hubs, ServiceBus, Azure Queues, dan Apache Kafka. Tidak perlu menulis kode khusus atau menjalankan proses khusus untuk berinteraksi dengan antrean tersebut.

Mengapa saya harus peduli?

Jika Anda sudah tahu semua tentang Pemrosesan Aliran dan terbiasa dengan teknologi seperti Event Hubs, Kafka, Azure Stream Analytics, Apache Storm, Apache Spark Streaming, dan Reactive Extensions (Rx) di .NET, Anda mungkin bertanya mengapa Anda harus peduli. Mengapa kita membutuhkan Sistem Pemrosesan Aliran lain dan bagaimana Actor terkait dengan Aliran?"Mengapa Orleans Aliran?" dimaksudkan untuk menjawab pertanyaan itu.

Model pemrograman

Ada beberapa prinsip di balik Orleans Aliran Model Pemrograman:

  1. Aliran Orleans bersifat virtual. Artinya, aliran selalu ada. Ini tidak secara eksplisit dibuat atau dihancurkan, dan tidak pernah bisa gagal.
  2. Aliran diidentifikasi oleh ID aliran, yang hanya merupakan nama logis yang terdiri dari GUID dan string.
  3. Orleans Aliran memungkinkan Anda memisahkan pembuatan data dari pemrosesannya, baik dalam waktu maupun ruang. Itu berarti bahwa produsen aliran dan konsumen stream mungkin berada di server yang berbeda atau di zona waktu yang berbeda, dan akan menahan kegagalan.
  4. Aliran Orleans ringan dan dinamis. Orleans Streaming Runtime dirancang untuk menangani sejumlah besar aliran yang datang dan pergi pada tingkat tinggi.
  5. Pengikatan aliran Orleans bersifat dinamis. Orleans Streaming Runtime dirancang untuk menangani kasus di mana biji-bijian terhubung ke dan memutuskan sambungan dari aliran pada tingkat tinggi.
  6. Orleans Streaming Runtime secara transparan mengelola siklus hidup konsumsi aliran. Setelah aplikasi berlangganan streaming, aplikasi kemudian akan menerima peristiwa aliran, bahkan jika terjadi kegagalan.
  7. Aliran Orleans bekerja secara seragam di seluruh biji-bijian dan klien Orleans.

API Pemrograman

Aplikasi berinteraksi dengan aliran dengan menggunakan Orleans.Streams.IAsyncStream<T>, yang mengimplementasikan Orleans.Streams.IAsyncObserver<T> antarmuka dan Orleans.Streams.IAsyncObservable<T> . APIS ini mirip dengan Reactive Extensions (Rx) yang terkenal di .NET.

Dalam contoh umum di bawah ini, perangkat menghasilkan beberapa data, yang dikirim sebagai permintaan HTTP ke layanan yang berjalan di Cloud. Klien Orleans yang berjalan di server front-end menerima panggilan HTTP ini dan menerbitkan data ke dalam aliran perangkat yang cocok:

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);
}

Dalam contoh lain di bawah ini, pengguna obrolan (diimplementasikan sebagai Orleans Grain) bergabung dengan ruang obrolan, mendapatkan pegangan ke aliran pesan obrolan yang dihasilkan oleh semua pengguna lain di ruangan ini, dan berlangganannya. Perhatikan bahwa pengguna obrolan tidak perlu tahu tentang butir ruang obrolan itu sendiri (mungkin tidak ada biji-bijian seperti itu dalam sistem kami) atau tentang pengguna lain dalam grup yang menghasilkan pesan. Tidak perlu dikatakan, untuk menerbitkan ke aliran obrolan, pengguna tidak perlu tahu siapa yang saat ini berlangganan aliran. Ini menunjukkan bagaimana pengguna obrolan dapat sepenuhnya dipisahkan dalam waktu dan ruang.

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))
    }
}

Sampel mulai cepat

Sampel Mulai Cepat adalah gambaran umum singkat yang baik tentang alur kerja keseluruhan penggunaan aliran dalam aplikasi. Setelah membacanya, Anda harus membaca API Pemrograman Aliran untuk mendapatkan pemahaman yang lebih mendalam tentang konsep.

ALIRAN API pemrograman

API pemrograman Aliran memberikan deskripsi terperinci tentang API pemrograman.

Penyedia aliran

Aliran dapat datang melalui saluran fisik dari berbagai bentuk dan bentuk dan dapat memiliki semantik yang berbeda. Orleans Streaming dirancang untuk mendukung keragaman ini melalui konsep Stream Providers, yang merupakan titik ekstensibilitas dalam sistem. Orleans saat ini memiliki implementasi penyedia dua aliran: Penyedia Aliran Pesan Sederhana berbasis TCP dan Azure Queue Stream Provider berbasis Azure Queue. Detail selengkapnya tentang Penyedia Stream dapat ditemukan di Penyedia Stream.

Semantik aliran

Semantik Langganan Stream:

Orleans Aliran menjamin Konsistensi Berurutan untuk operasi Langganan Stream. Secara khusus, ketika konsumen berlangganan aliran, setelah Task mewakili operasi langganan berhasil diselesaikan, konsumen akan melihat semua peristiwa yang dihasilkan setelah berlangganan. Selain itu, aliran Rewindable memungkinkan Anda untuk berlangganan dari titik waktu arbitrer di masa lalu dengan menggunakan StreamSequenceToken. Untuk informasi selengkapnya, lihat Penyedia streaming Orleans.

Jaminan Pengiriman Peristiwa Stream Individu:

Jaminan pengiriman peristiwa individual bergantung pada penyedia aliran individual. Beberapa hanya menyediakan pengiriman paling banyak sekali (seperti Aliran Pesan Sederhana (SMS)), sementara yang lain menyediakan pengiriman setidaknya sekali (seperti Azure Queue Aliran). Bahkan dimungkinkan untuk membangun penyedia streaming yang akan menjamin pengiriman tepat sekali (kami belum memiliki penyedia seperti itu, tetapi dimungkinkan untuk membuatnya).

Pesanan Pengiriman Peristiwa:

Urutan peristiwa juga bergantung pada penyedia streaming tertentu. Dalam aliran SMS, produsen secara eksplisit mengontrol urutan peristiwa yang dilihat oleh konsumen dengan mengontrol cara menerbitkannya. Aliran Azure Queue tidak menjamin pesanan FIFO, karena Azure Queues yang mendasar tidak menjamin urutan dalam kasus kegagalan. Aplikasi juga dapat mengontrol pemesanan pengiriman aliran mereka dengan menggunakan StreamSequenceToken.

implementasi Aliran

Implementasi orleans Aliran memberikan gambaran umum tingkat tinggi tentang implementasi internal.

Sampel kode

Contoh lebih lanjut tentang cara menggunakan API streaming dalam butir dapat ditemukan di sini. Kami berencana untuk membuat lebih banyak sampel di masa mendatang.

Lihat juga