我们有一个SaaS应用程序,允许客户使用他们自己的域名 – 非常典型。 该架构的核心是一个简单的通用虚拟主机(apache),软件负责根据主机名parsing哪个客户。
但是,我们的许多客户都要求该自定义域名支持SSL。 目前我们通过使用SSL证书添加(更高优先级)虚拟主机并重新启动apache来实现这一点。
虽然这有效,但它有一些问题:
你要么重新启动apache,这意味着暂时的市中心,或切换到一个全新的服务器堆栈的DNS。
在偶然的机会有一个问题,我们没有赶上SSL证书,Apache抛出一个致命的错误,将无法重新启动。
把这个推广到成千上万的用户是不可能的或者至less是不切实际的。
简而言之 – 它不会缩放。 我们已经在负载均衡器中探索了SSL终止…这是有希望的,但是我们找不到任何支持多个SSL证书(通过SNI)的负载均衡器。
向前发展,越来越成为产品的瓶颈 – 如果需要的话,我们愿意改变架构或者离开Apache。
我们已经在负载平衡器上探索了SSL终止…这是有希望的,但我们无法find任何支持多个SSL证书的负载均衡器(通过SNI)
真? 我不得不把这个问题的时间加倍,以确保它不是一个坏的线程,因为我想不出任何在2016年不支持SNI的负载平衡器。
虽然我最熟悉的一个是HAProxy, 从 2014年6月开始,它已经支持SNI 1.5 。
虽然1.5在技术上不支持configuration更改的真正零宕机重新加载,但它有一个“快速重新加载”选项,通常速度足以不影响典型站点。 但是如果你真的希望到达那里,有一个Yelp Engineering博客文章描述了一个“真正的零宕机时间”重新加载的方法,涉及到Linux tc和iptables在重新加载期间延迟SYN数据包的一些奇特的工作。 从文章:
重新启动HAProxy对我们的stream量基本上没有影响,只会造成很小的延迟,如图3所示。请注意,此方法在很大程度上取决于HAProxy加载其configuration的时间,因为我们正在运行如此简化的configuration,所以这些结果是非常快的。 在我们的生产环境中,我们确实观察到HAProxy重新启动期间的处罚为20毫秒。
负载平衡器意味着重新启动一个耗尽的服务器是好的,而不是要避免的东西。
客户可以申请一个新的域名或证书。 在下一批更新中,这个更改是在一个新configuration中部署到一些Web服务器上的。 排空旧的Web服务器,并停止零连接。 新的连接将进入新的工作configuration。 如果出现问题,请回到最后一个configuration。
为了提高性能和可用性,将Web服务器添加到负载平衡器。 当configuration的复杂性太大时,添加负载平衡器。