18

我在金融部门工作,我们即将选择 Vaadin 7 来开发大型重载系统。

但是我有点担心大型系统的 Vaadin 内存占用,因为 Vaadin 保持所有状态都在会话中。这意味着对于每个新用户,所有应用程序状态都将存储在内存中,不是吗?
我们不能建立一个单一的系统——系统必须是可扩展的和敏捷的。由于我们拥有庞大的客户群,因此必须易于定制并准备好发展。

任何人都可以分享经验和可能的解决方法如何最小化或消除 Vaadin 中的这些问题吗?

4

2 回答 2

14

在我们的产品开发过程中,我们遇到了使用默认 Vaadin 架构的大内存占用问题。

Vaadin 架构基于由事件驱动的组件。使用组件来创建紧密耦合的应用程序相当简单。原因是组件被结构化为层次结构。它就像一个金字塔。构建更大的应用程序;较大的金字塔存储在每个用户的会话中。

为了显着减少内存分配,我们为应用程序创建了一种基于页面的方法,该方法在后台使用旧式状态管理具有全面的事件模型。它基于 XML 格式的状态图表示法。

结果,会话在用户工作流期间仅保留访问过的页面,由状态图配置描述。当用户完成工作流时,所有页面都被释放以由垃圾收集器收集。

为了看到差异,我们做了一些测试来比较为使用应用程序的用户分配的内存。

开发的应用程序:

  • 使用紧密耦合的方法每个用户消耗 5 到 15MB 的堆
  • 采用松耦合方法 - 最大 2 MB

我们对结果非常满意,因为它让我们可以使用 4GB RAM 将大型系统扩展到每台服务器 1000-1500 个并发用户。

差点忘了。我们使用了 Lexaden Web Flow库。它具有 Apache 许可证。

于 2013-02-16T17:23:20.873 回答
9

我认为你应该看看这里:https ://vaadin.com/blog/-/blogs/vaadin-scalability-study-quicktickets

另外,我发现在生产中运行 Vaadin 的人提供了以下信息。

巴拉兹·霍多西:

我们有一个拥有超过 10 000 个用户的后台系统。每日用户数约为 3000,但其中一半使用系统 8 小时而无需注销。我们使用 Liferay 6.0.5 Tomcat 包和 Vaadin 作为 portlet。我们的两台服务器有 48 GB RAM,我们给 Tomcat 24 GB 堆。DB 获得了 18 GB,其余的则由系统获得。根据会话大小、并发用户和活动来衡量堆。更多内存会导致更少但更长的完整 GC。我们计划增加 Tomcat 工作人员的数量并减少堆。当你测量你的服务器时,试着增加一点内存。如果成本比降低处理器成本和购买更多 RAM 更重要。大多数情况下,稍微调整一下就很有价值。

皮埃尔-伊曼纽尔·格罗斯:

对于每天大量使用的 1000 个用户,一个纯 vaadin 应用程序:服务器 3 gb 2 核 Jetty,ulimit 为 50000 Postgresql 9,有 50 个并发用户(使用连接池)。作为软件部分,我还使用 ehcache 来缓存 DTO 对象和纯 JDBC。

于 2013-02-12T06:23:46.810 回答