Обучение
Модуль
Общие сведения об Orleans - Training
Узнайте, что такое платформа Orleans, какие преимущества она может предоставить и как ее можно интегрировать с приложениями.
Этот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
Orleans версии 1.0.0 добавил поддержку расширений потоковой передачи в модель программирования. Модули потоковой передачи предоставляют набор абстракций и API, которые делают мышление и работу с потоками проще и надежнее. Модули потоковой передачи позволяют разработчикам создавать реактивные приложения, которые работают с последовательностью событий структурированным образом. Модель расширяемости поставщиков потоков делает модель программирования совместимой с и переносимой в широком спектре существующих технологий очередей, таких как Центры событий, ServiceBus, Очереди Azure и Apache Kafka. Нет необходимости писать специальный код или запускать выделенные процессы для взаимодействия с такими очередями.
Если вы уже знаете все о потоковой обработке и знакомы с такими технологиями, как Центры событий, Kafka, Azure Stream Analytics, Apache Storm, Потоковая передача Apache Spark и реактивные расширения (Rx) в .NET, может возникнуть вопрос о том, почему следует заботиться. Почему нам нужна еще одна система обработки потока и как субъекты связаны с Потоки?"Почему Орлеан Потоки?" Предназначен для ответа на этот вопрос.
Существует несколько принципов, лежащих в основе Потоки модели программирования Орлеана:
Приложения взаимодействуют с потоками с помощью Orleans.Streams.IAsyncStream<T>, который реализует Orleans.Streams.IAsyncObserver<T> интерфейсы и Orleans.Streams.IAsyncObservable<T> интерфейсы. Эти API похожи на известные реактивные расширения (Rx) в .NET.
В типичном примере ниже устройство создает некоторые данные, которые отправляются в виде HTTP-запроса службе, работающей в облаке. Клиент Orleans, работающий на интерфейсном сервере, получает этот HTTP-вызов и публикует данные в соответствующий поток устройства:
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);
}
В другом примере ниже пользователь чата (реализованный как Orleans Grain) присоединяется к комнате чата, получает дескриптор потока сообщений чата, созданных всеми другими пользователями в этой комнате, и подписывается на него. Обратите внимание, что пользователю чата не нужно знать о самом элементе комнаты чата (в нашей системе может не быть такого зерна) или о других пользователях в этой группе, которые создают сообщения. Не нужно говорить, чтобы опубликовать в потоке чата, пользователям не нужно знать, кто в настоящее время подписан на поток. В этом примере показано, как пользователи чата могут быть полностью отделены во времени и пространстве.
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))
}
}
Пример быстрого запуска — это хороший краткий обзор общего рабочего процесса использования потоков в приложении. Прочитав его, вы должны прочитать Потоки API программирования, чтобы получить более глубокое представление о концепциях.
API-интерфейсы программирования Потоки содержат подробное описание API программирования.
Потоки могут поступать через физические каналы различных форм и форм и могут иметь другую семантику. Потоковая передача Orleans предназначена для поддержки этого разнообразия с помощью концепции поставщиков потоков, которая является точкой расширяемости в системе. В настоящее время Orleans имеет реализации двухпотоковых поставщиков: поставщика простого потока сообщений на основе TCP и поставщика потока очередей Azure на основе очередей Azure. Дополнительные сведения о поставщиках потоков можно найти в разделе "Поставщики потоков".
Семантика подписки stream:
Orleans Потоки гарантирует последовательную согласованность для операций подписки Stream. В частности, когда потребитель подписывается на поток, после Task
успешного разрешения операции подписки потребитель увидит все события, созданные после подписки. Кроме того, перемотка потоков позволяет подписываться с произвольной точки во времени в прошлом с помощью StreamSequenceToken. Дополнительные сведения см. в разделе о поставщиках потоков Orleans.
Гарантии доставки отдельных событий потока:
Гарантии доставки отдельных событий зависят от отдельных поставщиков потоков. Некоторые предоставляют только самые лучшие усилия при максимальной доставке (например, простое сообщение Потоки (SMS)), в то время как другие обеспечивают по крайней мере однократную доставку (например, очередь Azure Потоки). Можно даже создать поставщик потоковой передачи, который гарантирует точно однократную доставку (у нас еще нет такого поставщика, но его можно создать).
Порядок доставки событий:
Порядок событий также зависит от конкретного поставщика потоков. В SMS потоках производитель явно контролирует порядок событий, видимых потребителем, контролируя способ их публикации. Потоки очередей Azure не гарантируют порядок FIFO, так как базовые очереди Azure не гарантируют порядок в случаях сбоя. Приложения также могут управлять порядком доставки потоков с помощью .StreamSequenceToken
Реализация Потоки Орлеана предоставляет общий обзор внутренней реализации.
Дополнительные примеры использования API потоковой передачи в зернах можно найти здесь. Мы планируем создать дополнительные примеры в будущем.
Обучение
Модуль
Общие сведения об Orleans - Training
Узнайте, что такое платформа Orleans, какие преимущества она может предоставить и как ее можно интегрировать с приложениями.