Collaboration with StreamInsight
SQL Serverの下部組織であるCloud Programmability Teamに所属していたとき、チームはSQL Server製品にバンドルされている複雑なイベント処理(CEP)技術であるStreamInsightに出会いました。StreamInsightは、.NETライブラリとして設計されており、LINQスタイルのクエリ言語を備えたIStreamable<T>抽象化を使用して、イベントの一時的な処理をサポートします。Rxとの主な違いの一つは、アプリケーションタイムの概念が存在することで、各イベントが関連するアプリケーションタイムを持っています。時間的なセマンティクスの詳細については、「Advancing Application Time」を参照してください。StreamInsightの基本的な理論的基盤は、CEDRと呼ばれています。 While in the Cloud Programmability Team under the larger SQL Server organization, the team crossed paths with StreamInsight which is a complex event processing (CEP) technology that’s bundled with the SQL Server product. Designed as a .NET library, is supports temporal processing of events, using an IStreamable<T> abstraction with a LINQ-style query language on top. One of the key differences to Rx is the presence of a notion of application time whereby each event has an associated application time. For more information about the temporal semantics, see Advancing Application Time. The underlying theoretical foundation of StreamInsight is known as CEDR.
Rxチームのメンバーは、初期の段階でStreamInsightチームと協力してセマンティクスの定義を支援しました。その結果、両システムの時間的セマンティクスが大きく異なっていることに気づきました。Rxでは、イベント上のアプリケーションのタイムスタンプをオプションとして扱っています(そのため、クエリ演算子の実装をタイムスタンプに依存させていません)。この観察に基づいて、両チームの一部のメンバーによる午後の定期的なハッキングセッションが行われ、Rxのプリミティブを使ってStreamInsightのセマンティクスを実装することが試みられました。この取り組みは、Rxの観測可能なシーケンスの高次の性質を利用して、(例えばイベントの寿命の)持続時間のモデル化に使用することができ、また、Rxの仮想時間スケジューリングのサポートを利用して、アプリケーション時間に基づくイベントの順序付けをイベント処理グラフの「エッジ」にプッシュすることで成功しました。
Members of the Rx team worked together with the StreamInsight team in the early days to assist with the definition of the semantics. This led to the realization that the temporal semantics of both systems are quite different, with Rx treating application timestamps on events as optional (thus not making the query operator implementations dependent on them). Based on this observation, regular afternoon hacking sessions between some members on both teams took place to try to implement StreamInsight semantics using Rx primitives. This effort was successful by leveraging the higher-order nature of observable sequences in Rx, which can be used to model durations (e.g. for event lifetimes), and by taking advantage of the virtual time scheduling support in Rx, which was used to push ordering of events based on application time to the “edge” of the event processing graph.
StreamInsightの初期の数回のリリースの後、RxチームとStreamInsightチームが協力して2つの技術の統合作業を行い、StreamInsight 2.1ではIObservable<T>とIQbservable<T>をファーストクラスでサポートすることになりました。Rxサポートの統合により、相互運用性が向上し、様々なイベントソースとシンクがIObservable<T>とIObserver<T>を使用するようになりました。この作業により、入出力のアダプタは、追加のセマンティクス(アプリケーションのタイムスタンプの導入または削除など)を振り払う、またはタグ付けするための一般的な手段として使用できるという洞察が得られ、これは後にReaqtorのコアエンジンの設計に使用されました。
After StreamInsight’s initial few releases, the Rx and StreamInsight teams collaborated on integration efforts between the two technologies, which led to first-class support for IObservable<T> and IQbservable<T> in StreamInsight 2.1. The integration of Rx support led to better interoperability and various event sources and sinks were using IObservable<T> and IObserver<T>. This work led to the insight that adapters on inputs and outputs could be used as a general means to shake off or tag on additional semantics (e.g. introduction or removal of application timestamps), which was later used in the design for the core Reaqtor engine.
CEDRの代数を提供したジョナサン・ゴールドスタイン率いるMSRチームは、ストリーミングイベント処理システムの研究を続け、2013年にTrillを開発しました。ライブラリーとしても実装されているTrillは、現在、Azure Stream Analyticsをはじめとする様々なマイクロソフト製品で使用されています。同じCEDR代数をベースに、アプリケーションタイムの概念を用いて時間的なイベント処理をモデル化しています。Trillは2018年にオープンソースとして公開された。
The MSR team, led by Jonathan Goldstein that provided the CEDR algebra continued research into streaming event processing systems, which led to the creation of Trill in 2013. Also implemented as a library, Trill is used by various Microsoft products today, including Azure Stream Analytics. It’s based on the same CEDR algebra and models temporal event processing using notions of application time. Trill was released as open source in 2018.
また、今回のコラボレーションやその後の活動において、貴重なご意見やご感想をいただいた以下の方々にも感謝の意を表します。
We’d also like to extend our gratitude to the following people who provided valuable input and insights during our collaboration and in the years to follow:
Badrish Chandramouli
Georgi Chkodrov
Jonathan Goldstein
Torsten Grabs
Colin Meek
Rafael Fernandez Moctezuma
Beysim Sezgin
Tiho Tarnavski
Rxおよび/またはReaqtorと交わったStreamInsightへの貢献者には、Georgi Chkodrov (Tx (LINQ to Logs and Traces))とTiho Tarnavski (ReaqtorエンジンとクライアントデバイスへのC++実装)がいます。
Some contributors to StreamInsight that crossed paths with Rx and/or Reaqtor include Georgi Chkodrov (Tx (LINQ to Logs and Traces)) and Tiho Tarnavski (Reaqtor engine and C++ implementation on client devices).