【问题标题】:Feedback on different backends for GWT对 GWT 不同后端的反馈
【发布时间】:2011-07-22 00:03:25
【问题描述】:

我必须重新设计一个现有应用程序,该应用程序在后端使用 Pylons (Python),在前端使用 GWT。
在重新设计的过程中,我还可以更改后端系统。
我试图了解各种后端系统(Java、Python 等)的优缺点,但我会感谢社区的一些反馈。

现有应用程序:

现有应用程序是使用 GWT 1.5 开发的(现在在 2.1 上运行)并且是多主机页面设置。
Pylons MVC 框架定义了一组控制器/主机页面,其中嵌入了 GWT 小部件(“经典网站”)。

数据存储在 MySQL 数据库中,并由后端使用 SQLAlchemy/Elixir 访问。服务器/客户端通信使用 RequestBuilder (JSON) 完成。

该应用程序不是具有复杂 CRUD 功能(事务、锁定等)或复杂权限系统(需要一个简单的 ACL)的典型业务应用程序。

该应用程序用于科学数据的可视化(图表、表格)。客户端界面主要用于以只读模式显示数据。可能有一些 CRUD 功能,但这不是应用程序的主要方面。
只有一部分科学数据将被传输到客户端界面,但该子集是从大型数据集生成的。
现有的后端使用 numpy/scipy 从 db/files 读取数据,创建矩阵并过滤它们。
访问或使用应用程序的用户数量相对较少,但每个用户/请求的后端负担相当高,因为它必须读取和过滤大型数据集。

对新系统的要求:

我想从多主机页面设置转移到 MVP 架构(一个单一主机页面)。
所以后端只服务一个主机页面,并作为 AJAX 调用的数据源。
数据仍将存储在关系数据库中(PostgreSQL 而不是 MySQL)。
会有一个简单的 ACL(定义谁可以看到什么样的数据),也许还有一些 CRUD 功能(但这不是优先事项)。
数据集的大小将会增加,因此后端的负担可能会更高。不会有很多并发请求,但少数几个必须由后端快速处理。后端服务器的硬件(RAM 和 CPU)不是问题。

可能的后端解决方案:

Python(SQLAlchemy、Pylons 或 Django):

优点:

  • 快速原型制作。
  • 重复使用现有应用程序的部分内容
  • 用于处理大型数据集的 Numpy/Scipy。

缺点:

  • 弱类型语言 -> 调试会很痛苦
  • 服务器/客户端通信(JSON 解析或使用 3rd 方库)。
  • Python GIL -> 通过并发请求进行扩展?
  • 服务器语言 (python) 客户端语言 (java)

Java(Hibernate/JPA、Spring 等)

优点:

  • 客户端和服务器都使用一种语言 (Java)
  • “更容易”调试。
  • 服务器/客户端通信(RequestFactory、RPC)更易于实现。
  • 性能、多线程等
  • 可以传输对象图(RequestFactory)。
  • CRUD“易于”实现
  • Multitear 架构(功能)

缺点:

  • Multitear 架构(复杂,需要大量配置)
  • 数组/矩阵的处理(不确定java中是否有numpy/scipy的挂件)。
  • 并未使用 Java Web 应用程序层/框架的所有功能(矫枉过正?)。

我没有提到任何其他后端系统(RoR 等),因为我认为这两个系统对于我的用例来说是最可行的。 老实说,我对 Java 并不陌生,但对 Java Web 应用程序框架相对较新。我知道 Pylons 的使用方法,但在新设置中不会使用太多 Pylons 功能(MVC、模板),因为它可能仅用作 AJAX 后端。

如果我使用 Java 后端,我必须决定是使用 RESTful 服务(并将客户端与服务器明确分开)还是使用 RequestFactory(更紧密的耦合)。 “RESTful”没有具体要求。如果是 Python 后端,我可能会使用 RESTful 后端(因为无论如何我都必须处理客户端/服务器通信)。

虽然将主要显示科学数据(不是任何域对象图的一部分),但相关元数据也将显示在客户端上(这将有利于 RequestFactory)。
在 python 的情况下,我可以重用用于加载和过滤科学数据的代码。
如果是 Java,我将不得不重新实现这部分。

两种后端系统都有其优点和缺点。 如果您有任何进一步的反馈,我将不胜感激。
也许有人在后端和/或该用例方面都有经验。

提前致谢

【问题讨论】:

    标签: java python gwt architecture web-frameworks


    【解决方案1】:

    我们过去也有同样的困境。 我参与了设计和构建具有 GWT 前端和 Java(Spring、Hibernate)后端的系统。我们的一些其他(相关)系统是用 Python 和 Ruby 构建的,所以专业知识就在那里,就像你的问题一样。

    我们决定主要使用 Java,以便我们可以为整个堆栈使用一种语言。由于相同的人同时在客户端和服务器端工作,因此使用单一语言工作减少了从客户端代码移动到服务器代码时(例如,在调试时)进行上下文切换的需要。事后看来,我觉得我们被证明是正确的,这是一个很好的决定。

    我们使用了 RPC,正如您自己提到的,它确实简化了 c/s 通信的实现。我不能说我很喜欢它。 REST + JSON 感觉更正确,至少在服务器和客户端之间创造了更好的解耦。我想您必须根据您是否期望将来可能需要独立地重新实现客户端或服务器来决定。如果这不太可能,我会使用 KISS 原则,因此使用 RPC 在这种特定情况下保持简单。

    关于你提到的Java的缺点,我倾向于同意原则(我自己更喜欢RoR),但不同意细节。多层和配置架构并不是真正的问题 IMO - Spring 和 Hibernate 现在已经足够简单了。 IMO 在该项目中跨客户端和服务器使用 Java 的优势胜过使用 python 的相对易用性,此外,您将在接口中引入复杂性(即通过执行 REST 与本机 RPC)。

    我无法评论 Numpy/Scipy 和任何 Java 替代方案。我没有那里的经验。

    【讨论】:

      猜你喜欢
      • 2012-03-01
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多