考虑可伸缩性的基于组件的应用程序:OSGi还是Akka?

考虑可伸缩性的基于组件的应用程序:OSGi还是Akka?,osgi,akka,Osgi,Akka,在我的硕士论文中,我正在开发一个大型活动门票销售的应用程序框架。我的主要需求是可修改性、可扩展性和性能。我的客户(活动组织者)应该能够在运行时轻松更换组件并添加功能。此类组件的一个示例可以是座位分配组件 我的导师说要看看OSGi。松散耦合束的想法当然很吸引人。在寻找替代品时,我发现了阿卡。这个框架承诺了很多东西,比如可伸缩性和高性能。我想知道Akka的角色概念是否符合我的可修改性要求。Akka似乎比OSGi更有生产力,所以开发速度会更快。Akka似乎更适合于可伸缩性。有了OSGi,我的日子就不好

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

我的导师说要看看OSGi。松散耦合束的想法当然很吸引人。在寻找替代品时,我发现了阿卡。这个框架承诺了很多东西,比如可伸缩性和高性能。我想知道Akka的角色概念是否符合我的可修改性要求。Akka似乎比OSGi更有生产力,所以开发速度会更快。Akka似乎更适合于可伸缩性。有了OSGi,我的日子就不好过了

如果你在OSGi和Akka都有经验,你会给我推荐哪一种?在比较这两种技术时,它们的优缺点是什么?最后,有什么好的替代OSGi或Akka的方法可以满足我的需求吗

编辑

首先,感谢你迄今为止的回复,你帮了大忙。 正如下面提到的,我试图比较苹果和梨。一个更符合逻辑的问题是:OSGi和Akka如何一起使用并从中获益?这是如何组织的?您的所有参与者是否都驻留在一个OSGi捆绑包中,是否每个人都有一个单独的捆绑包,是否有一个混合解决方案,或者是否真的有一种“正确”的方法来实现

编辑bis


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

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


Scala是一种编程语言,Akka是一个消息传递库。OSGi是一个动态组件系统。因此,我不确定如何比较它们,因为彼得说它们不能直接进行比较。事实上,你可以一起使用它们,它们应该是互补的

Akka提供了一个异步通信API。OSGi提供了一个模块化的、面向服务的框架。例如,在Akka中,没有任何东西可以解决隔离模块的问题,这样它们就不能看到彼此的内部结构。同样,OSGi中也没有什么能与Akka提供的异步通信相比。因此,将它们结合起来使用,您将获得两个世界的最佳效果

OSGi确实有同步服务,这是单个JVM中模块之间通信的主要方法。OSGi还有一个远程服务层,可用于远程机器之间的通信。我想这可能是OSGi和Akka最直接重叠的地方。但即使在这里,我认为也有合作的潜力。例如,OSGi远程服务有一个非常强大的发现机制,允许我们在网络上公布功能。你可以利用这一发现来寻找阿克卡演员,让你与他们交流

我不知道现在有人在研究这个问题,所以我认为探索和扩展这个想法对于硕士论文来说是一个很好的主题


你上哪所大学?OSGi联盟非常有兴趣与学术界建立联系,也许我们可以与你和你的教授建立一个在线会议?

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


.

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

我不知道你为什么在这里提到Scala。关于可伸缩性,我指的是可以轻松地从一个节点扩展到例如10个节点的应用程序。至于OSGi和Akka之间的比较。我知道它们很难比较,这就是为什么我在谷歌搜索时找不到很多东西,但我必须决定在这里使用哪个。当使用OSGi时,我可能不会使用纯OSGi,而是使用Aries或Spring之类的东西。你会推荐哪一种,包括Akka?显然Akka有时在OSGi环境中使用。阿克卡是如何以这种方式使用的?然后捆绑包由不同的演员组成?我对Akka没有实际经验。。。我认为你必须仔细阅读这两种技术,看看你想使用哪一部分。我的建议是:开始时要简单。Aries和Spring都是巨大的框架,但问题似乎很简单,Akka在Java和Scala中都有实现。我认为Scala版本的应用更广泛。这可能就是Scala被提出来的原因。但是使用Akka框架并不一定意味着使用该框架的应用程序是用Scala编写的。虽然框架本身可能是这样,但我不确定@彼得-你能给我解释一下OSGi和Scala之间可怕的二进制兼容性吗?我只是好奇,因为我认为所有Scala代码都可以编译成Java字节码。如果是这样,为什么会出现二进制兼容性问题呢?那么,如果我正确理解您的项目结构,那么您只开发一个包含所有参与者的OSGi包?这也可以分为几个捆绑包,它的优点/缺点和用例是什么?我应该澄清一下,这个演示是我第一次尝试OSGi和Akka框架。因此,我与他们的经验是有限的,可能有一种比我所做的更好的做事方式。我希望使用OSGi提供可更新性和可扩展性,并使用Actors简化应用程序的逻辑和线程/并发的管理。