3

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

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

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

4

3 回答 3

2

我想我会考虑的关键要素是:

  • 您需要集群感知应用服务器吗?
  • 您需要基于硬件或软件的负载平衡器吗?
  • 您将记录哪些参数来确定服务器的运行状况?
  • 你会负载平衡你的数据库吗?
  • 您的应用程序 I/O 是否繁重?CPU重?两个都?
  • 您是否希望利用大量网络流量?如果您平均每个用户有 5K 的数据,那么在您认为链接饱和之前,您可以处理多少用户?
  • 扩大规模与扩大规模。确定您的应用最擅长的应用并加以利用。
  • 会有很多数据库事务吗?
  • 您会使用共享存储吗?

我希望这有帮助。

于 2012-02-21T03:33:05.713 回答
0

可扩展性对于预期处理不断增长的流量的系统非常重要。无状态对于实现简单的规模系统非常重要。签出http://www.playframework.org/,一个无状态的 Web 框架。将 playframework 与 mongodb 一起使用(通过 PlayMorphia 模块),您可以轻松实现可扩展的 Web 应用程序。

于 2012-02-21T02:35:20.313 回答
0

我的一些考虑和最佳实践:

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