Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring RESTful服务应用程序体系结构_Java_Spring_Jakarta Ee_Soa_Saas - Fatal编程技术网

Java Spring RESTful服务应用程序体系结构

Java Spring RESTful服务应用程序体系结构,java,spring,jakarta-ee,soa,saas,Java,Spring,Jakarta Ee,Soa,Saas,目前,我们正在使用Spring、Hibernate、MySQL和tomcat构建web服务应用程序。我们没有使用真正的应用服务器SoA体系结构。关于持久层——今天我们将Hibernate与MySQL结合使用,但一年后我们可能会使用MongoDB和Morphia 这里的想法是创建系统的体系结构,而不考虑具体的数据库引擎或持久层,并获得最大的好处 让我解释一下-。我们这里有两个案例: 情景一: 我们有一个被复制的数据库(开始时没有)和不同的应用程序。每个应用程序都表示一个war,它有一个控制器、应用

目前,我们正在使用Spring、Hibernate、MySQL和tomcat构建web服务应用程序。我们没有使用真正的应用服务器SoA体系结构。关于持久层——今天我们将Hibernate与MySQL结合使用,但一年后我们可能会使用MongoDB和Morphia

这里的想法是创建系统的体系结构,而不考虑具体的数据库引擎或持久层,并获得最大的好处

让我解释一下-。我们这里有两个案例:

情景一: 我们有一个被复制的数据库(开始时没有)和不同的应用程序。每个应用程序都表示一个war,它有一个控制器、应用程序上下文和servlet xml。域和持久层作为maven库导入-每个应用程序中都包含一个版本

优点:

  • 易于维护的小型应用程序
  • 分布式解决方案-例如,每个应用程序都可以移动到自己的tomcat实例或不同的机器上
缺点:

  • 在不同应用程序之间使用hibernate会话和同步会话时可能出现的问题。我不知道这是可能的,在所有的实现
场景二——一个应用程序,它具有内部逻辑来分割和组织不同的服务——新闻和用户

优点:

  • 一个持久层-hibernate的全部功能
  • 更多j2ee查看扩展到下一个级别的选项-集成EJB并移动到应用程序服务器
缺点:

  • 一个巨大的战争应用需要更多的努力来维持
  • 不像第一个场景中那样分发
我更喜欢第一个场景,但我担心这种情况下的Hibernate行为以及我能从中获得的所有好处

我非常感谢你对那个案子的意见

干杯
  • 在不同应用程序之间使用hibernate会话和同步会话时可能出现的问题。我不知道这是可能的,在所有的实现

  • 有两种解决方案可以解决这个问题:

    陶土 看看

    此外,还有一个稍旧的幻灯片共享,它在图片中传达了要点

    英菲尼斯潘 看看


    使用第一个解决方案(分布式)可能是正确的选择

    这完全取决于业务问题是什么

    当然,
    分布式的
    很酷而且容错,而且,。。但是RAM和磁盘越来越便宜,所以“扩大规模”(并拥有两个热复制副本)实际上并不是那么糟糕=>这些是您描述的“第二种”方法的道具

    但假设你采用的方法是#1。如果您这样做,您将受益于将来切换到NoSQL,因为您现在有副本集/分片等。。实际上有几个节点支持这个概念

    但是。。100%的一致性是a必须具备的吗?(例如,产品是否与环境有关)。您计划变得多大=>您准备好维护数百台服务器了吗?您是否有复杂的聚合查询需要运行快于xteen小时


    这些问题,除了你对业务的理解之外,应该有助于你在#1或#2上着陆。

    因此,这是一个非常晚的答案,但最后我准备回答。我将在这里详细介绍REST服务应用程序的进一步开发

    最后,我终于找到了解决方案1,这是一个很好的答案,可以选择在稍后阶段迁移到解决方案2

    这是应用程序体系结构-稍后我将添加图形

    持久性层-该层包含域模型、所有数据库操作。使用SpringRoo从数据库模型生成,生成存储库和服务层,便于以后的迁移

    业务层-此处是操作所需的所有业务逻辑。此层依赖于持久性层

    演示层验证,控制器调用业务

    所有这些都是在Tomcat上运行的,没有附加的应用服务器。在稍后的阶段,可以将其移动到应用服务器,并完全实现服务定位器模式

    基础架构—地理位置服务器,带有地理负载平衡器,MySQL复制环位于所有服务器之间,一台备份服务器和一台备份服务器之间,以防出现故障

    我的想法是构建更现代的系统架构,但根据我使用Java技术的经验,这是一种“正常风险”情况


    有了更多的经验-更漂亮的解决方案:)期待着

    非常感谢您的回答!我红了你贴的主题-现在我们的系统不涉及在线金钱。我需要根据您的答案重新思考问题——目前我正在制作数据库模型并指定REST服务。我会写在这里选择解决方案。目前,我们将有更多的读取比写入确定一个数据,应该从不同的位置快速访问。