Java 应用程序从单片升级到微服务

Java 应用程序从单片升级到微服务,java,microservices,session-management,Java,Microservices,Session Management,我们有13年历史的单片java应用程序,使用 用于处理UI调用的Struts 2 用于db调用的JDBC/Spring JDBC模板 春迪 Tiles/JSP/Jquery for UI 使用这一源代码创建了两个可部署项 在线应用的战争 用于运行后端作业的JAR 当前的UI非常旧。我们的目标是使用微服务重新设计应用程序。我们已经确定了可以作为独立微服务运行的模块 我们心中有以下问题 我们应该选择哪种UI框架(Angular/React还是自主开发的)。Angular似乎非常慢,就页面加载而言,我

我们有13年历史的单片java应用程序,使用

  • 用于处理UI调用的Struts 2
  • 用于db调用的JDBC/Spring JDBC模板
  • 春迪
  • Tiles/JSP/Jquery for UI
  • 使用这一源代码创建了两个可部署项

  • 在线应用的战争
  • 用于运行后端作业的JAR
  • 当前的UI非常旧。我们的目标是使用微服务重新设计应用程序。我们已经确定了可以作为独立微服务运行的模块

    我们心中有以下问题

  • 我们应该选择哪种UI框架(Angular/React还是自主开发的)。Angular似乎非常慢,就页面加载而言,我们需要更好的性能
  • UI/Javascript应该直接调用后端web服务,还是应该在部署的WAR中有一个spring控制器代理,它将UI调用转发给API。如果单个UI调用需要从不同的微服务获取/更新数据,这也会有所帮助
  • 我们应该如何涵盖微服务安全方面
  • 如果我们想拥有同一微服务的多个实例,我们应该选择哪种负载平衡器
  • 由于它是一个银行应用程序,我们的组织不允许使用Elastic Search/Lucene进行搜索。因此,我们需要建议单独使用Oracle进行报告
  • 我们应该如何运行后端作业
  • 还有一个主要的支付微服务,它将创建支付。由于支付量巨大,因此需要多个实例。我们将如何管理用户登录会话。我们是否应该选择内存中的分布式会话存储(可能是memcache)

  • 正如你提到的,这是一个银行网站,所以安全将是第一要务。这里我对FE和BE有一些建议

    FE:您最好使用
    preactjs
    它是一个类似react的库,但与react相比,它更轻、更快。对于ui,您可以使用
    样式化组件
    ,而不是使用一些繁重的第三方库。这还将提高性能,显然还有用于图像和大文件的CDN

    BE:根据您的需要,您最好选择混合解决方案
    node
    可能是一个不错的选择。用于会话。 设置一个身份验证服务器,让您的服务验证用户,它将在未来用于任何类型的服务。您将公开某种客户端API

    Auth用户案例:您可以使用redis获取会话信息,从Auth服务器验证用户,并在以后将信息添加到redis。检查用户是否从redis登录。这将减少Auth服务器的负载。(我在加密交换中使用了相同的策略,并且进行得非常顺利)

    负载平衡器:不太熟悉java,但对于node JS
    PM2
    来说,这对您来说没什么大不了的,只需一个命令,它就会启动多个实例并自行平衡。 如果您有巨大的流量,那么您最好使用一些消息服务,如
    rabbitmq
    ,这将通过防止您扩展服务器来降低服务器成本

    BE Jobs:我已经用
    节点
    完成了大量任务,在那里做得很好。您可以使用分叉或跨越。这将为特定作业启动一个新实例,并在完成后终止,您可以轻松地生成日志


    为了进一步澄清,我在这里:)

    正如你提到的,这是一个银行网站,所以安全将是第一要务。这里我对FE和BE有一些建议

    FE:您最好使用
    preactjs
    它是一个类似react的库,但与react相比,它更轻、更快。对于ui,您可以使用
    样式化组件
    ,而不是使用一些繁重的第三方库。这还将提高性能,显然还有用于图像和大文件的CDN

    BE:根据您的需要,您最好选择混合解决方案
    node
    可能是一个不错的选择。用于会话。 设置一个身份验证服务器,让您的服务验证用户,它将在未来用于任何类型的服务。您将公开某种客户端API

    Auth用户案例:您可以使用redis获取会话信息,从Auth服务器验证用户,并在以后将信息添加到redis。检查用户是否从redis登录。这将减少Auth服务器的负载。(我在加密交换中使用了相同的策略,并且进行得非常顺利)

    负载平衡器:不太熟悉java,但对于node JS
    PM2
    来说,这对您来说没什么大不了的,只需一个命令,它就会启动多个实例并自行平衡。 如果您有巨大的流量,那么您最好使用一些消息服务,如
    rabbitmq
    ,这将通过防止您扩展服务器来降低服务器成本

    BE Jobs:我已经用
    节点
    完成了大量任务,在那里做得很好。您可以使用分叉或跨越。这将为特定作业启动一个新实例,并在完成后终止,您可以轻松地生成日志


    为了进一步澄清,我在这里:)

    这是一个非常广泛的问题。您需要咨询架构师来深入了解您的应用程序,因为在这里您不可能得到有意义的深入答案。 然而,作为一个粗略的指南,这里有一些简单的答案:

  • 我们应该选择哪种UI框架(Angular/React还是自主开发的)。Angular似乎非常慢,就页面加载而言,我们需要更好的性能
  • 这取决于应用程序实际需要做什么。Angular是领先的框架之一,通常一点也不慢。您可能做错了什么(您是否做了太多的细粒度调用?后端速度慢吗?)。React也是一个s