【问题标题】:Akka.net vs Orleans performanceAkka.net 与奥尔良的表现
【发布时间】:2017-05-18 23:24:37
【问题描述】:

您好,我正处于为即将开始的项目选择演员框架的早期阶段。据我所知,Orleans 旨在以牺牲一些性能为代价,尽可能地减轻开发人员的痛苦。在 Akka.net 中,我知道 actor 的大小是 400 字节如果我是对的,你必须去底层处理集群连接和由 orleans 管理的东西,但会给你带来很好的性能。

我在互联网上找到的Orleans 的唯一性能指标是:

在 Microsoft Azure 上使用 X-Large VM(8 个 CPU 内核 / 14 GB RAM),每个 VM 一个孤岛:

Grain 每秒最多可处理 1,000 个请求。 silo 每秒最多可处理 10,000 个请求。 一个筒仓可容纳 100,000 个活性谷物。

对于 Akka.net,主要是 page

单台机器上每秒 5000 万条消息。内存占用小;每 GB 堆约 250 万演员。

我想知道在 Akka.net 场景中使用了哪些机器,以及它们如何执行 Grain vs Actor(以每秒请求数以及你可以在 GB 的 RAM 中容纳多少个 grain/actor 或less) 以及一粒粒在内存中的重量。

根据 Orleans 和 Akka.net 的引述,看起来 Akka.net 的性能要好得多,但我想进一步比较两者的性能。

我发现了这个Akka.Net VS MS Orleans ComparisonOrleans and Akka Actors: A Comparison,但没有解决性能问题。

谢谢!

【问题讨论】:

  • 我想您会发现——与所有分布式计算一样——性能取决于很多因素,而您的应用程序逻辑可能是主要因素。我更喜欢奥尔良的方法,因为我是一名开发人员,我不想管理每一个细节,但这只是我的看法。使用这两种方法构建原型,看看哪种方法最有效。
  • 正如@DanWilson 已经说过的,基准测试基于很多因素,因此很难真正进行比较。虽然 Akka .NET 可能更快,但它的级别也低得多。在分布式计算方面,易于扩展和开发通常比原始处理能力重要得多。到目前为止,我宁愿以牺牲我永远不需要的额外性能为代价来节省许多开发人员几个月的工作。

标签: c# azure akka.net orleans


【解决方案1】:

Akka.net 报告本地消息,基本上是函数调用。 Orleans 报告远程消息,请参阅 RPC。这是一个主要区别。当然还有其他区别。

除此之外,我能给您的唯一真正建议是在通信模式和服务器数量方面尽可能接近生产环境的设置中,为您的实际基准进行测量。

【讨论】:

  • 请注意,Akka 有一个默认优化,即当 from 和 to 演员在同一个节点上时,消息不会被序列化。即使在奥尔良,它们也会被序列化。 (您可以配置此行为)
  • 您好@JohantHart,我根据您的评论进行了研究,并在奥尔良documentation 上找到了这个。 如果被调用的grain位于不同的silo,则副本最终被序列化为字节流并通过网络发送到目标silo,在那里它们被反序列化回对象。如果被调用的grain在同一个silo,那么副本会直接交给被调用的方法。该信息是否不正确或不是默认行为?
  • 是的,事实证明我部分错了。当目标位于同一节点上时,Orleans 不会对其进行序列化,但它总是会制作要传递的对象的深层副本。不过,您可以通过将类型标记为不可变来避免这种情况。
【解决方案2】:

Microsoft Orleans 用于开发 Halo 4 和 Halo 5 的后端,这两款游戏都因其在在线比赛中的多人游戏性能而广受赞誉。

我与 Akka.net 合作,我听到并读到很多 cmets 声称 Akka.net 会因为这个或那个而更好或更快,但几乎没有证据表明他们的主张是基于什么。

我建议您忽略偏见,自行研究或研究每一个的用例。另请注意,性能比较可能会偏向于开发人员熟悉的工具。

我个人认为与 Akka.net 相比,Microsoft Orleans 的学习速度更快,并且代码的样板更少。它也更熟悉 C# 开发人员的习惯。

您关于 Akka 与 Orleans 的链接并未将 Akka.net 与 Orleans 进行比较。 JVM 上的 Akka 是另一回事。 Akka.net 只是一个端口,而 JVM 与 dotnet 运行时完全不同,这就是为什么奥尔良团队说 C# 不需要像 Akka 这样的东西(抱歉我找不到他们的帖子这么说)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2017-02-11
    • 2016-06-23
    • 2021-07-23
    相关资源
    最近更新 更多