【翻译】了解Microsoft StreamInsight 你需要知道的6件事

原文链接:http://seroter.wordpress.com/2010/06/22/6-things-to-know-about-microsoft-streaminsight/


Microsoft StreamInsight 是SQL Server 2008 R2中的一个新产品。它是微软首次涉足事件流处理以及复杂事件处理市场所推出的产品,尽管这个市场已经具有了成熟产品和思想领袖的份额。我花费了超过8个月的时间在这个产品上,我觉得我应当尝试告诉你们一些了解StreamInsight产品所需要知道的事情。

  • 事件处理关注的是持续智能
    事件可以是各种各样的事情:它可以是用户变更住址,也可以是从电表中读取度数。当你有一个事件驱动的架构时,你就会和数据的异步通信打交道,因为它发生在消费者根据数据选择采取何种行动之时。所谓“复杂事件处理”,是指从多个(简单的)商务事件中收集知识,并总结成更小的事件集合。使用StreamInsight可以从多个数据流中连接数据,并检测出通过群体智慧才可见的事件模式。与传统数据库驱动应用(通过不断在标准数据集中提交查询)不同,事件处理方案是在事件数据通过时部署一系列编译过的查询。这对于大部分人来说都是一个模式的改变,并且想一时半会转变过来也不太容易,但毫无疑问它对于完善企业的商务智能战略以及提高信息可用信都是备受关注的。
  • 使用LINQ编写查询。
    StreamInsight小组选择LINQ作为编写声明性查询的机制。正如你所料,你可以编写各种不同的查询来过滤内容、连接不同数据流、执行计算等等。如果我希望客户呼叫中心在每一次客户投诉中出现特定产品名时,能够迅速发送一个事件该怎么做呢?下面的查询可以过滤掉所有提及的其他产品而重点放在目标产品的事件上:
    var filterQuery =
        from e in callCenterInputStream
        where e.Product == "Seroterum" select e;
    StreamInsight查询的一个重要方面就是聚合(aggregation)。单个事件的计算和过滤还可以,但假设我们想知道的是发生在一段时间内的结果呢?这个时候窗口(windows)概念就发挥作用了。如果想要执行1次计数、求平均值或者事件汇总,只需要指定感兴趣的一段特定时间的窗口。例如,想要知道一个网站在过去15分钟里最热门的页面,并且希望每隔1分钟就重新计算一次,即每1分钟计算过去15分钟内点击每个页面的次数。这就是跳跃窗口(Hopping Window)。
    var activeSessions = from w in websiteInputStream
                         group w by w.PageName into pageGroup
                         from x in pageGroup.HoppingWindow(
                             TimeSpan.FromMinutes(15),
                             TimeSpan.FromMinutes(1),
                             HoppingWindowOutputPolicy.ClipToWindowEnd)
                         select new PageSummarySummary
                         {
                             PageName = pageGroup.Key,
                             TotalRequests = x.Count()
                         };
    

    我会在接下去的博文中介绍更多关于这个话题的内容,但现在你只要知道,在StreamInsight中还有其它类型的窗口。

    这里我强烈建议你阅读StreamInsight小组的关于此话题的文章。  

  • 查询可重复使用且可彼此链接。
    事件处理方案不错的地方在于它能够链接查询。考虑这样一个场景:第一个查询每秒接受数以千计的事件,在过滤噪声得到我仅关心的事件子集。之后我可以将这个查询的输出用在另外一个查询中,用来在这个更具针对性的事件流中进行计算或聚合。或者考虑“pub/sub”订阅的场景,从一个数据源处获取到数据流事件,但却具有多个输出目标。查询可以从一个流中获取结果,并应用在许多其他流中。

  • StreamInsight对于输入输出数据使用适配器模型。
    构建一个StreamInsight方案的结果往往会变成创建或者使用适配器。虽然StreamInsight本身没有附带任何产品级的适配器,但所幸地是我们可以找到许多最佳实践的优秀样例。在我即将推出的新书中,会展示如何如何构建一个MSMQ适配器:从队列中读取数据并送入StreamInsight引擎。适配器可以通过泛型或无类型的方式编写以达到简单重用,或者也可以通过加入期望的特定事件负载进行编写。正如你所料,编写特定的适配器要简单一些,然而构建可重用的,泛型的适配器明显对长远更有益处。

  • 多个宿主选择。
    如果让你选择宿主,你可以选择创建同进程的StreamInsight服务器来托管查询并使用适配器连接到数据发布者和使用者。这差不多算是构建StreamInsight最容易的,也是最能够控制引擎的方案。还有一个选择,你可以将StreamInsight安装为机器上的Windows服务,并用它作为中心服务器。前者方案使用“Server.Create()”进行操作,后者使用“Server.Connect()”的方式与引擎交互。我正在就如何使用远程服务器的选项撰写一篇博文,敬请关注。而现在你只需知道可以选择宿主的方式。

  • StreamInsight的调试工具不错,但总体管理功能不够成熟
    StreamInsight产品发布了一个相当有趣的调试工具,这个工具也是唯一一个可以用来对服务器进行初步管理的图形界面。如图,当你连接到一个服务器(不管是独立进程还是宿主类型)时,你可以看到已经部署的应用和查询。

    当一个查询运行时,你可以选择录制活动并重播流。当你看到自己的查询通过各种不同的LINQ操作(如连接,计数)进行处理时,感觉肯定不错!

    调试器包含了许多不错的问题根源分析能力以及在查询步骤中跟踪事件。你还可以获得许多服务器端关于引擎和查询的诊断信息。尽管如此,再没有其他的图形化工具可以用来管理服务器了。当然你会发现可以通过编写代码或使用PowerShell来执行其他的管理任务。我非常期待社区工具和产品组提供的样例能够填补这一空缺,也希望未来发布的产品中能够包含一个更加鲁棒的管理界面。

以上是对StreamInsight的一个简要介绍,如果你想要了解更多内容,可以阅读我的新书中关于StreamInsight的一章内容,此外我还在该书的网站上维护了一个关于StreamInsight资源的页面。

posted @ 2011-06-27 23:09  StreamInsight  阅读(1028)  评论(2编辑  收藏  举报