使用 Orleans 串流
Orleans 串流是 Orleans 架構的一項功能,可讓開發人員撰寫以結構化方式在事件序列上運作的回應式應用程式。 Orleans 串流提供一組抽象概念和 API,讓思考和使用串流更簡單且更穩固。 串流是一律存在的邏輯實體,而且永遠不會失敗。 串流是由其 StreamId 所識別。 串流可讓您同時在時間與空間中,將產生的資料與其程序分離。 串流可在粒紋和 Orleans 用戶端之間統一運作,並可跨各種現有的佇列技術相容且可移植,例如事件中樞、ServiceBus、Azure 佇列和 Apache Kafka。 Orleans 串流也支援動態串流繫結、透明串流耗用量生命週期管理,以及可延伸的串流提供者。
Orleans v.1.0.0 針對程式設計模型新增串流延伸模組的支援。 串流延伸模組提供一組抽象概念和 API,讓思考和使用串流更簡單且更強固。 串流延伸模組可讓開發人員撰寫會以結構化方式在事件序列上運作的回應式應用程式。 串流提供者的擴充性模型可讓程式設計模型與各種現有佇列技術相容且可移植,例如事件中樞、ServiceBus、Azure 佇列和 Apache Kafka。 不需要撰寫特殊程式碼或執行專用程序即可與這類佇列互動。
為什麼我應該重視?
如果您已經了解串流處理,並且熟悉事件中樞、Kafka、Azure 串流分析、Apache Storm、Apache Spark Streaming 和 .NET 中的 Reactive Extensions (Rx),系統可能會問您為何應該重視。 為什麼我們需要另一個串流處理系統,以及 Actors 如何與 Streams 相關?「為什麼要使用 Orleans Streams?」可回答該問題。
程式設計模型
Orleans Streams 程式設計模型背後有數個原則:
- Orleans Streams 是虛擬的。 也就是說,串流一律會存在。 它不會明確建立或終結,且永遠不會失敗。
- Streams 是依串流識別碼識別,這只是由 GUID 和字串組成的邏輯名稱。
- Orleans Streams 可讓您同時在時間與空間中,將產生的資料與其處理分離。 這表示串流產生者和串流取用者可能位於不同的伺服器或不同時區,而且會承受失敗。
- Orleans Streams 為輕量且動態。 Orleans Streaming Runtime 的設計目的是要處理以高速率通過的大量串流。
- Orleans Streams 繫結為動態。 Orleans Streaming Runtime 的設計是要處理粒紋以高速率往返連接串流的情況。
- Orleans Streaming Runtime 會以透明方式管理串流耗用量的生命週期。 應用程式訂閱串流之後,即使發生失敗,它也會接收串流的事件。
- Orleans Streams 會跨粒紋與 Orleans 用戶端一致地運作。
快速入門範例
快速入門範例是應用程式中使用 Streams 的整體工作流程的良好快速概觀。 閱讀之後,您應該閱讀 Streams 程式設計 API,以深入了解概念。
串流提供者
Streams 可能來自各種圖形和表單的實體通道,且可以有不同的語意。 Orleans Streaming 的設計目的是透過串流提供者的概念來支援這種多樣性,這是系統中的擴充點。
Orleans 提供數個串流提供者實作:
Orleans 目前包含數個提供者實作:
- 簡單訊息 (SMS),其會使用直接粒紋呼叫,且沒有支援的儲存系統,
- Azure 佇列,其會使用 Azure 儲存體佇列來儲存訊息,以及
- Azure EventHubs,其會使用 Azure EventHubs
如需詳細資訊,請參閱串流提供者。
串流語意
串流訂閱語意:
Orleans 串流可保證串流訂閱作業的循序一致性。 具體而言,當取用者訂閱串流時,一旦成功解析代表訂閱作業的 Task
,取用者就會看到訂閱之後所產生的所有事件。 此外,可倒轉串流可讓您使用 StreamSequenceToken 從過去的任意時間點訂閱。 如需詳細資訊,請參閱 Orleans 串流提供者。
個別串流事件傳遞保證:
個別事件傳遞保證取決於個別串流提供者。 有些在 7.0 之前的版本 Orleans 中提供最佳的最多一次傳遞 (例如簡單訊息串流 (SMS),之後稱為廣播通道),而其他則提供至少一次傳遞 (例如 Azure 佇列串流)。 甚至可能建置一個保證正好傳遞一次的串流提供者。
事件傳遞順序:
事件順序也取決於特定的串流提供者。 在 SMS 串流中,產生者會藉由控制產生者發佈事件的方式,明確地控制取用者所看到的事件順序。 Azure 佇列串流不保證 FIFO 順序,因為基礎 Azure 佇列並不保證失敗案例中的順序。 應用程式也可以使用 StreamSequenceToken 來控制其串流傳遞順序。
串流實作
Orleans串流實作提供內部實作的高階概觀。
程式碼範例
如需如何在某個粒紋內使用串流 API 的更多範例,請參閱這裡。 我們計劃在未來建立更多範例。