我对构建下面引用的文章中的架构很感兴趣。
我目前有一个价格适中的第 4 层负载均衡器,我的应用服务器是 SSL 端点。我想在我的负载均衡器和我的应用服务器之间放置一个 SSL 服务器场。然后,我将在 SSL 服务器场和我的应用服务器之间放置另一个廉价的负载均衡器,以进行第 7 层路由。
我的 Web 应用程序有相当多的消费者流量,6 台服务器可以处理大约 50% 的容量。此外,我的基础设施流量比消费者流量高出几个数量级。这是来自世界各地的数据,必须实时与我的 Web 应用程序集成。总共我有 18 台应用服务器来处理所有流量,外加 6 台数据库服务器。我将在接下来的 2 周内再添加 6 台应用服务器,再过 2 周再添加 6 台。保守估计,到今年年底我需要扩展到 120 台服务器。
我现在的动机是将消费者流量与基础设施流量分开。消费者流量的优先级高于基础设施流量,我不能让基础设施方面的冲击导致面向消费者的服务器瘫痪。拥有一个始终正常运行的网站是重中之重。但是,如果其中一个消费者应用服务器出现故障,我希望将该流量路由到指定用于基础设施流量的服务器。
复杂之处在于,所有流量都使用相同的主机名进行寻址,并且几乎 100% 都是 https。在我的案例中,区分基础设施和消费者流量的唯一方法是通过 URL(我继承的糟糕架构),因此我需要一个第 7 层负载平衡器才能进行路由。但是,要做到这一点,我需要一个基于硬件的花哨 SSL 终结器或如上所述的 SSL 服务器场。由于我的用户群正在迅速扩大,我担心如果我走硬件路线,它会很快变得非常昂贵,特别是因为我需要 4 个所有东西来实现高可用性(2 个设施中的 2 个相同设置)。同时,上图看起来非常灵活,并且更具水平可扩展性。
有人之前建过这个吗?有预建的配置吗?我应该考虑什么,应该使用什么软件(我听说过有人使用带有 mod-ssl、nginx 和 stunnel 的 apache)?此外,什么时候购买昂贵的负载平衡器比构建 SSL 服务器场更有意义?
答案1
对于 120 个服务器集群,咨询专业人士。我没想到你会得到如此详细的答案适合您的应用。
我们设置的最复杂的集群配置只有 20 台服务器,其中只有 12% 是 HTTPS 流量(14Mbit 纯 SSL)。
我们的典型架构是...
如果有帮助的话,对于 Web 集群,我们通常使用:
lvs (initial ssl load balancing)
-> pound (ssl-unwrapping)
-> varnish (caching)
-> haproxy (load balancing)
-> nginx (static content)
-> php (dynamic content)
-> mysql (db)
我们曾使用stunnel
与(代替Pound)结合使用HAProxy
,但它在链条的下游引起了一些复杂情况(无法设置标题)。
磅
我们使用它,它运行得非常好,以至于我们无法将它推到我们拥有的硬件和Apache jMeter
测试期间推送的流量的极限。
还有一条注释主页关于pound
性能改进
如果 PCRE、tcmalloc(来自 Google perftools 包)和/或 Hoard 可用,Pound 将链接它们。这将显著提高性能,强烈推荐。
但pound
被认为适用于“低”流量应用,但似乎不像其竞争对手那样具有良好的扩展性,这一点其他人已经在基准测试中记录下来
软件 SSL 终止器基准测试
- http://vincent.bernat.im/en/blog/2011-ssl-benchmark-round2.html
- http://vincent.bernat.im/en/blog/2011-ssl-benchmark.html
- http://barry.wordpress.com/2008/04/28/load-balancer-update/
CPU 使用率可能是关键问题
CPU 消耗将是你最大的问题,因此明智地使用SSL 密钥大小会有所帮助,1024 位(现在已被大多数 SSL 机构弃用)与 2048 位与 3072 位密钥将线性增加开销。
以下是一些关于 SSL 性能的优秀读物,http://www.imperialviolet.org/2010/06/25/overclocking-ssl.html
您最终会发现,这里没有“正确”的答案,只有测试、再次测试、然后再进行一些测试,才能找到在您的场景中哪种方法最有效。
答案2
您可以使用 Linux 防火墙将基础设施与消费者流量分开。使用 netfilter/iptables 字符串匹配功能,您可以根据 url 匹配流量。匹配流量后,您可以使用此功能执行 QoS 或以不同方式转发流量。