我正在为我们的 Web 应用程序规划一个新的基础架构。我们有两台 JBossAS5 服务器,它们在集群中运行。会话状态将通过 JBoss Cache 进行复制。
在此之前,应该有一些缓存,以加快静态元素的交付速度。但是,我们应用的大部分流量将通过 HTTPS 传输。
到目前为止,我一直在考虑在 JBossAS 前面设置两个 Varnish 缓存,每个缓存都配置为通过循环方式对两个 JBossAS 进行负载平衡。由于 Varnish 不处理 HTTPS,因此需要在 Varnish 前面设置两个处理 HTTPS 的 Pound 代理。这两个 Pound 将通过 Heartbeat/LinuxHA 实现高可用性。
到 www.example.com 的流量将会穿过我们的防火墙,从那里到磅的虚拟 IP,从那里到 Varnish,从那里到 JBossAS。
问题 1:这有意义吗?或者这是否过于复杂,可以用更简单的方法达到相同的目标?
问题 2:如果我的布局没问题,我该如何配置 pound -> Varnish 步骤?我是否应该 a) 通过 Heartbeat/LinuxHA 使 Varnish 服务也具有高可用性,并将流量从 pound 引导到 Varnish 的虚拟 IP,或者我应该 b) 配置两个独立的 Varnish,并在 pound 中使用负载平衡来处理不同的 Varnish?
不幸的是,由于成本原因,无法实现硬件负载平衡。这不是一个企业系统,而是一个非政府组织系统,我们总是缺钱……整个系统并不是任务关键型的,但我希望它尽可能可靠,因为我们的 IT 并非总是在短时间内可用(我们没有雇用任何全职 IT 人员……)。
非常感谢您的见解!
安德烈亚斯。
答案1
我认为你的方法很有意义。如果你不需要对动态对象进行高级缓存,那么我建议使用 nginx,因为它具有缓存、https 和负载平衡功能。我确实喜欢 Varnish,我认为大多数网站都可以通过使用它获得很多好处,但根据你的信息,使用 nginx(+ heartbeat 或 carp)更有意义。
- Nginx 可以缓存动态对象,但我认为不可能基于 uris(或其中的一部分)、cookie、连接 ip 等编写规则。Nginx 可以缓存到磁盘和 memcached,因此您的一对 nginx 或多或少可以具有相同的缓存。
- 可以平衡负载,我认为基于会话、IP 哈希等等。
- https 做得很好。
祝你好运! :)
答案2
我认为所提出的解决方案过于复杂。有多种技术适合您的情况。
我使用 LVS 进行负载平衡,使用 SQUID 进行缓存,尤其是对于 Jboss。对于静态内容,通常最好从 Apache 提供服务。您仍然可以使用这些技术来实现心跳或起搏器冗余。
我使用 SQUID 的主要原因是重写,但我处理的很多内容都是动态的。缓存是一个额外的好处。我的大多数 Java 应用程序几乎没有静态内容,所以我经常跳过 mod_jk 部分。重点是,您的要求甚至可以大大简化我提出的解决方案。
一个可能的例子:
NAT 到 SQUID (HA 集群 ->乌贼透明代理低压开关柜VIP -> LVS VIP 至 Apache 集群 ->mod_jk到 Jboss
答案3
您不想使用硬件负载平衡器的原因是什么?
由于您描述了 HA 设计,我猜这是一个任务关键且可能流量很大的站点。因此,您可能有预算购买此类设备以在该层提供 HA。
诸如 F5 BigIP 之类的设备将为您提供比 Pound 更多的功能和可靠性。您将能够执行 SSL 卸载来处理 https 以及缓存和压缩。
答案4
添加更多层肯定会使维护变得更加困难,但我认为基本方法没有任何问题。我的第一个想法是 Squid 可以满足您的缓存 http 和 https 连接的要求。我在一个照片托管网站上成功地使用了它大约 4 年。
鱿鱼在这里:http://www.squid-cache.org/。显然有一些性能方面的考虑:http://deserialized.com/reverse-proxy-performance-varnish-vs-squid-part-2/,但也许这些缺点都被 https 的支持所抵消了。