Jakarta ee 如何在高流量Java web应用程序中处理负载?

Jakarta ee 如何在高流量Java web应用程序中处理负载?,jakarta-ee,architecture,load,high-traffic,Jakarta Ee,Architecture,Load,High Traffic,我正在开发一个高流量的java web应用程序。目前我正在定义它的架构。我有一些问题: 在设计处理负载的体系结构时,我们应该考虑哪些关键因素? 如何防止web应用程序宕机或如何确保高可用性 我预计一次会有数百名用户登录。我计划将数据保留在应用程序范围内(静态变量),以避免在数据库中查找。在会话中,我计划存储5kB的数据。可伸缩性对于处理不断增长的流量的系统来说非常重要。无状态对于实现一个易于扩展的系统非常重要。Checkout,一个无状态的web框架。使用MyGoDB的PraseFrand(

我正在开发一个高流量的java web应用程序。目前我正在定义它的架构。我有一些问题:

    在设计处理负载的体系结构时,我们应该考虑哪些关键因素?
  • 如何防止web应用程序宕机或如何确保高可用性

我预计一次会有数百名用户登录。我计划将数据保留在应用程序范围内(静态变量),以避免在数据库中查找。在会话中,我计划存储5kB的数据。

可伸缩性对于处理不断增长的流量的系统来说非常重要。无状态对于实现一个易于扩展的系统非常重要。Checkout,一个无状态的web框架。使用MyGoDB的PraseFrand(通过PopyMaMax模块)可以很容易地实现一个可伸缩的Web应用程序。

< P>我想我认为的关键元素将是:

  • 您是否需要支持群集的应用程序服务器
  • 您需要基于硬件或软件的负载平衡器吗
  • 您将记录哪些参数来确定服务器的运行状况
  • 你会平衡你的DBs吗
  • 您的应用程序是否需要大量I/O?CPU很重?两者都有
  • 你想利用大量的网络流量吗?如果你平均每个用户有5K的数据,那么在考虑链接饱和之前你能处理多少用户?
  • 放大与缩小。确定你的应用程序哪一个做得最好并加以利用
  • 会有很多数据库事务吗
  • 您将使用共享存储吗

我希望这能有所帮助。

我的一些注意事项和最佳实践:

  • 使用坚实的原则,并非所有原则都适用于所有项目,尤其是单一责任和开放/封闭原则,帮助您更轻松地扩展/定制软件,以应对不断变化的需求和不断增长的流量
  • 在内存数据库中保持很少更改的配置数据,若需要更改,则首先更新关系数据库并调用Restfull API刷新内存对象
  • 通过估计产品增长,为大数据定义和划分逻辑,以更快地运行搜索查询。e、 g.如果mobile number是关键值,则通过考虑关系数据库或内存数据库中的单个db对象大小约束,应用模运算来确定分区id
  • 通过序列化更新操作,使同一行上的数据库更新最少。若数据状态在短时间内更新,请将其保存在内存中,并使用计划任务对关系数据库进行批更新
  • 使用可用日志库的全部功能来记录重要内容 而且有意义,更喜欢异步日志记录
  • 通过单独的队列进行历史记录,使用批插入并通过计划的作业使用它
  • 考虑使用异步API逻辑来加快执行速度,当执行由并行作业完成时,使用会话Id或返回跟踪Id请求并发送响应
  • 为消费者端点的失败通知实现重试逻辑
  • 定义独立且自给自足的每个软件子系统。子系统应通过API通信和共享数据,而不是通过共享内存或磁盘存储