我正在尝试在Amazon Elastic Load Balancer后面设置我的应用程序服务器。我想有一个专用于旧版本的服务器,以及专用于新版本的所有其他服务器。我想在路径参数中使用版本ID来实现它
e.g。
当前版本(3.0):http://example.com/APPNAME/service
旧版本(2.2):http://example.com/APPNAME/v2.2/service
我想知道:
答案 0 :(得分:53)
去年夏天推出具有基于路径的路由支持的新应用程序负载均衡器后(请参阅前面的更新),AWS现在还添加了Host-Based Routing Support for AWS Application Load Balancers:
[...]您现在可以创建路由传入的应用程序负载均衡器规则 基于Host标头中指定的域名的流量。 对 api.example.com 的请求可以发送到一个目标组,即请求 到 mobile.example.com 到另一个,以及所有其他人(通过默认方式) 规则)可以发送到第三个。您还可以创建组合的规则 基于主机的路由和基于路径的路由。这将允许你 将请求路由到 api.example.com/production 和 api.example.com/sandbox 指向不同的目标群体。
AWS刚刚(2016年8月11日)推出了一个新的Application Load Balancer for the Elastic Load Balancing service,其旨在提高实时应用程序,微服务,基于容器的架构和流应用程序的灵活性和性能:
这个新的负载均衡器,它还支持WebSocket协议和 HTTP / 2,在应用层运行并提供基于内容的功能 路由支持。这允许应用程序负载均衡器进行路由 跨一个或多个服务或容器运行的请求 Amazon Elastic Compute Cloud(Amazon EC2)实例,有助于减少 成本和简化服务发现。 [强调我的]
正如introductory blog post所强调的那样,ELB [...]的新应用程序负载均衡器选项在第7层运行,并支持许多高级功能[whereras]原始选项(现在称为经典负载均衡器仍可供您使用,并继续提供第4层和第7层功能。
更具体地说,ELB现在支持手头的场景,因为每个Application Load Balancer允许您定义最多10个基于URL的规则来将请求路由到目标组(AWS计划给予随着时间的推移,您可以访问其他路由方法。
这是不可能的 - Amazon ELB主要(但见下文)提供传输层负载平衡(OSI第4层),它仅基于其负载均衡决策TCP连接但忽略应用程序有效负载。后者将允许应用层负载平衡(OSI第7层),其中应用有效负载确实被考虑用于负载平衡决策。
Amazon ELB中的默认配置实际上为HTTP / HTTPS / SSL提供了基本的应用程序级支持(例如,终止SSL连接和插入X-Forwarded-*
标头),但您无法调整此配置;换句话说,ELB确实在中查看了HTTP请求,但在这方面你无法控制ELB的行为。
Choosing Listeners for Your Load Balancer中更详细地解释了这一点,例如:
在Elastic Load Balancing中使用TCP / SSL(第4层)
当您使用TCP进行前端和后端连接时,您的 负载均衡器将将请求转发给后端实例 无需修改标题。此配置也不会 为会话粘性或X-Forwarded- *标题插入cookie。
[...]
在Elastic Load Balancing中使用HTTP / HTTPS(第7层)
对前端和后端使用HTTP(第7层)时 连接,您的负载均衡器解析请求中的标头和 在重新发送请求之前终止连接 注册实例。这是由提供的默认配置 Elastic Load Balancing。
[强调我的]
Architectural Overview也提供了说明和更多细节。
答案 1 :(得分:2)
自您发布问题以来,已有多年,但亚马逊最近宣布了应用(第7层)负载均衡功能。这应该支持您正在寻找的东西。
基本上,您可以根据"规则"定义流量路由到的不同目标组。 (例如,URL路径模式)。可以根据需要对规则进行优先排序。
详情请见https://aws.amazon.com/elasticloadbalancing/applicationloadbalancer/
答案 2 :(得分:0)
这是我见过的可能的解决方案。它不如使用原生Nginx Plus进行负载平衡那么理想,但是如果你需要使用ELB,它就可以工作。
让我们想象一下这样的架构:
ELB
|
Server 1 Server 2 Server...
(Current) (Current) (Current)
\ | /
Server X
(Legacy)
第一层中的每个服务器运行" current"实现。他们还在应用层前面运行Nginx或Apache作为Web服务器(这通常是任何Web应用程序前面的最佳实践,IMO)。
每个Nginx / Apache配置文件都包含一行检查URL参数,表明这是一个遗留调用,它将请求代理到服务器X.如果它不是旧调用,它只会继续请求"电流"应用
缺点是您在当前服务器中使用几个周期来代理旧服务器,但您的架构非常简单,并且您拥有集中流程。