商业网站架构问题

时间:2010-04-29 18:57:50

标签: java spring architecture tomcat wicket

我必须编写一个架构案例研究,但有一些我不知道的事情,所以我想对以下内容提出一些建议:

该网站必须同时处理5k用户。 后端由商业软件,一些Web服务,一些消息队列和数据库组成。

我想建议在后端使用Spring,处理不同的元素,并公开一些Rest服务。

我也想在前面推荐检票口(这里不是重点)。

我不知道的是:我必须在相同的tomcat服务器或两个不同的服务器上安装正面和背面吗?我很想在前面安装两台服务器,带有负载均衡器(在这种情况下不需要会话复制)。但如果我有两个前端服务器,我必须有两个后台服务器吗?我不想制造某种瓶颈。

根据我在this blog上所读到的内容,只有第一个提到的网站,一个tomcat才会收取巨额费用。但我找不到任何关于此的信息,所以我不知道它是否合理。

如果你能引起我的注意,那么我可以继续我的案例研究,这将非常有帮助。

谢谢:)

3 个答案:

答案 0 :(得分:5)

每层有多个服务器可能有两个主要原因;高可用性和性能。如果你出于HA的原因不这样做,那么不幸的答案就是'它取决于'。

拥有两台前端服务器并不会强迫您拥有两台后端服务器。后端是否会承受足够高的负载而需要两台服务器?它将在很大程度上取决于它正在做什么,并且最好通过负载测试和/或分析来揭示。但是,对于处理5000个并发用户的网站,我的猜测是肯定的......

答案 1 :(得分:2)

这完全取决于您的申请。你的课程有多重? (Wicket以在会议中投入大量资金而闻名)。你的后端处理有多重。

提出可以扩展的东西可能是个更好的主意。负载平衡器,可以继续添加新服务器以进行扩展。

测量是你能做的最好的事情。创建JMeter脚本并找出应用程序中断的位置。从那里建立了一个计划。

答案 2 :(得分:1)

扩展我的评论:仔细考虑客户向您的服务器发出请求的典型过程:

  • 启动连接,这对客户端和服务器都有开销;
  • 它通过该连接发出一个或多个请求,在连接期间保留服务器上的资源;
  • 它会关闭连接,通常会释放应用程序资源,但通常会在关闭之后在服务器上占用端口号几秒钟。

因此,在设计架构时,您需要考虑以下事项:

  • 您可以在服务器上同时打开多少个连接?如果您使用Tomcat或其他标准服务器,每个连接有一个线程,则可能遇到同时拥有5,000个线程的问题; (另一方面,基于NIO的架构可以处理数千个连接,而不需要每个连接一个线程);如果你在一个共享的环境中,你可能根本无法拥有那么多开放的连接;
  • 如果客户端在“会话”期间没有保持其连接打开,那么请求数量和/或每个连接的时间之间的正确平衡是什么,同时考虑到建立和关闭连接的开销(初始化)如果相关的加密会话,创建连接时的网络开销,连接关闭后端口“hogged”一段时间)

然后更一般地说,我会考虑:

  • 无论你采用什么样的架构,如果特定组件被证明是瓶颈,你可以轻松地重新构建/替换它们吗?
  • 对于您使用的每个“黑匣子”组件/框架,它为您解决了哪些实际问题,以及它的局限性是什么? (不要只是使用Tomcat,因为你老板的伙伴最好的男人告诉他们关于酒吧...)

我也同意其他人所说的话 - 在某些时候你不需要过于理论化。设计一些合理的东西,然后运行一个试验台,看看它是如何实际应对您预期的数据量的。 (您可能没有构建整个应用程序,但您可以开始做出预测“我们将让X客户端每Z分钟发送Y个请求,并且这些请求的p%将花费n毫秒并将r行写入数据库” ...)