使用 ActorFx 进行 MapReduce

  • Jonathan Allen
  • 赵震一

2013 年 6 月 23 日

话题:.NET架构

ActorFx 发布最新预览版,增添了对 MapReduce 类型算法的支持。ActorFx是一种“非规范性的、独立于语言的动态分布式对象模型。它陆续提供了一套框架和基础设施,用户可以在其上实现高度可用的数据结构和其他逻辑实体。”官方通过单词统计这个例子对 ActorFx 的 MapReduce 功能进行了演示。该演示依赖于三种类型的 actor:mapper、reducer 和一个聚合器(aggregator)。每个 mapper 都会对文件进行处理,将原始文本文件转换成数据字典(dictionary)。这些字典文件将为 reducer 提供数据。由 reducer 从序列化的字典文件中读取信息,并将这些信息合并到一个运行中的字典中,reducer 通过该字典来跟踪全部单词的统计。当每个 reducer 从为它提供数据的 mapper 中接收到“完成”的消息时,它便会将运行中的字典序列化到一个文件中,并将该文件名传给聚合器。而聚合器会负责生成最终的报告。

ActorFx 0.5 的一个关键特性就是支持内部 Actor 可编程性(Inter-Actor Programmability)。这将允许 actor 创建并删除其他 actor。而在前一版本中,我们不得不借助外部客户端来管理 actor 的生命周期。

像微软其他最近的代码库一样,现在可以通过Event Tracing for Windows (ETW) 基础设施来对 ActorFx 进行应用诊断。

包括最近的 StatelessActorApp 在内,目前已经有四种开箱即用(out-of-the-box)的 actor 应用可被选用。

  • EmptyActorApp: 该 actor 应用允许你开启“空的”actor 服务,这些 actor 服务没用任何内建的智能。可以通过将包含了程序集的 ActorMethod 传递给这些 actor 来提供相关智能。
  • ListActorApp: 该 actor 应用允许你开启列表 actor 服务,这些 actor 服务将具有内建的支持列表操作的相关智能。
  • DictionaryActorApp: 该 actor 应用允许你开启字典 actor 服务,这些 actor 服务内建了对键值存储操作的相关智能。
  • StatelessActorApp: 事实上对该 actor 应用的命名有些用词不当。因为该应用的服务其实是可以保持状态的,只是状态的持久化并不是由 Actor 运行时进行负责的。所以从 Actor 运行时的角度来看,该应用的服务是无状态的。该应用及其关联的服务是在 Actor 运行时之外为 ActorFx 提供存储机制的前提。

更多的信息可以从Actor 运行时管理器的文档获取。

查看英文原文:MapReduce with ActorFx

.NET架构