【问题标题】:Component-based application with scalability in mind: OSGi or Akka?考虑到可扩展性的基于组件的应用程序:OSGi 还是 Akka?
【发布时间】:2013-11-21 13:39:36
【问题描述】:

对于我的硕士论文,我正在开发一个用于销售大型活动门票的应用程序框架。我的主要要求是可修改性、可扩展性和性能。我的客户(活动组织者)应该能够在运行时轻松替换组件并添加功能。这种组件的一个示例可能是座位分配组件。

我的导师说要看看 OSGi。松散耦合捆绑的想法当然很有吸引力。在寻找替代品时,我发现了 Akka。这个框架承诺了很多东西,比如可扩展性和高性能。我想知道 Akka 的演员概念是否适合我的可修改性要求。 Akka 似乎比 OSGi 更有效率,因此开发会更快。 Akka 似乎也更适合可扩展性。使用 OSGi,我会更难过。

如果您在 OSGi 和 Akka 方面都有经验,您会向我推荐哪个?比较这两种技术的优缺点是什么?最后,OSGi 或 Akka 有什么好的替代品可以满足我的要求吗?

编辑

首先,感谢您到目前为止的回复,您的帮助很大。 如下所述,我正在尝试比较苹果和梨。一个更合乎逻辑的问题是:如何将 OSGi 和 Akka 一起使用并相互受益?这是如何构成的?您的所有参与者是否都驻留在一个 OSGi 包中,他们每个人是否都有一个单独的包,是否有混合解决方案,或者是否真的没有“正确”的方法来做到这一点?

编辑之二

我发布了一个后续问题here,询问如何结合 OSGi 和 Akka。

【问题讨论】:

  • 我认为你应该为此提出一个新问题。

标签: osgi akka


【解决方案1】:

正如彼得所说,它们不能直接比较。事实上,你可以一起使用它们,它们应该是相当互补的。

Akka 提供了一个异步通信 API。 OSGi 提供了一个模块化的、面向服务的框架。例如,Akka 中没有任何东西可以解决隔离模块的问题,这样它们就无法看到彼此的内部结构。同样,OSGi 中没有什么能像 Akka 提供的异步通信那样。因此,将它们一起使用,您将获得两全其美...

OSGi 确实具有同步服务,这是单个 JVM 中模块之间通信的主要方法。 OSGi 还有一个远程服务层,可用于远程机器之间的通信。我想这可能是 OSGi 和 Akka 最直接重叠的区域。但即使在这里,我认为也有合作的潜力。例如,OSGi 远程服务有一个非常强大的发现机制,它允许我们在网络上发布功能。您可能会使用此发现来找到可供您交流的 Akka Actor。

我不知道目前有任何人真正致力于此,所以我认为探索和扩展这个想法将是硕士论文的绝佳主题!

你上哪所大学? OSGi 联盟对促进与学术界的联系非常感兴趣,也许我们可以与您和您的教授进行在线会议?

【讨论】:

  • 正如 axiopisty 提到的,我应该使用 OSGi 来满足我的可修改性和热交换需求,而使用 Akka 来满足我的可扩展性和性能问题?我不确定如何一起构建 OSGi 和 Akka。我在根特大学。我目前正在研究我的 SOTA。我的导师刚刚说要研究 OSGi。由于我对 OSGi 和 Akka 等技术没有经验,所以我有点困惑,导致了一个有点不合逻辑的问题。恐怕不能开会了,我的导师和教授的时间很紧。无论如何,谢谢你的提议,你真好。
  • 好吧,似乎没有多少人对 Akka 和 OSGi 都有经验……这就是使它成为一个很好的研究项目的原因!我建议通过教程等单独学习每种技术;那么您将更好地了解如何将它们组合在一起。
【解决方案2】:

我想你比较苹果和梨。您可以在 OSGi 上运行 Scala 代码(尽管它们的二进制兼容性很糟糕)。

Scala 是一种编程语言,而 Akka 是一种消息传递库。 OSGi 是一个动态的组件系统。所以不知道如何比较它们

【讨论】:

  • 我不确定你为什么在这里指的是 Scala。可扩展性是指可以轻松从一个节点扩展到例如 10 个节点的应用程序。至于 OSGi 和 Akka 的比较。我知道它们很难比较,这就是为什么我在谷歌搜索时找不到很多东西,但我必须决定在这里使用哪个。使用 OSGi 时,我可能不会使用纯 OSGi,而是使用 Aries 或 Spring 之类的东西。你会推荐哪个,包括 Akka?
  • 显然 Akka 有时会在 OSGi 环境中使用。 Akka 是如何以这种方式使用的?然后捆绑包由不同的参与者组成?
  • 我没有使用 Akka 的实际经验……我认为您必须阅读这两种技术才能了解每种技术的哪些部分您想使用。我的建议:开始时保持简单。 Aries 和 Spring 都是巨大的框架,而问题似乎很简单。
  • Akka 在 Java 和 Scala 中都有一个实现。我认为 Scala 版本使用更广泛。这可能就是 Scala 被提出的原因。但是使用 Akka 框架并不一定意味着使用该框架的应用程序是用 Scala 编写的。虽然框架本身可能是这种情况,但我不确定。 @Peter - 你能指出我对 OSGi 和 Scala 之间可怕的二进制兼容性的解释吗?我只是好奇,因为我认为所有 Scala 代码都编译为 Java 字节码。如果是这样,为什么会有任何二进制兼容性问题?
【解决方案3】:

我同意 Neil 和 Peter 的观点,您要求我们对苹果和橙子进行比较。您可以同时使用这两个框架。我目前正在从事与您指定的主要要求相同的项目。我正在创建一个原型来演示同时使用这两种技术,OSGi 提供模块化和可更新性,Akka 提供可伸缩性和性能。

If you would like to see both frameworks working together you can play with the sample application I posted on github.

【讨论】:

  • 那么,如果我正确理解了您的项目结构,您是否只开发了一个包含所有参与者的 OSGi 包?这也可以分成几个捆绑包,它的优缺点和用例是什么?
  • 我应该澄清一下,这个演示是我第一次尝试使用 OSGi 和 Akka 框架。所以我对他们的经验是有限的,可能有比我做过的更好的做事方式。我想使用 OSGi 提供可更新性和可扩展性,并使用 Actors 来简化应用程序的逻辑和线程/并发的管理。 Akka 还允许与远程应用程序/服务进行简单集成。我不会说应用程序的项目结构意味着包含其中所有参与者的 1 个捆绑包。实际上恰恰相反。
【解决方案4】:

它们不是苹果对苹果的比较。它们相互正交,如果有的话,相互补充。两者都用。

【讨论】:

    猜你喜欢
    • 2011-06-12
    • 2015-08-09
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 2013-03-27
    相关资源
    最近更新 更多