云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

全站加速_日本域名注册_折扣

小七 141 0

consur的负载平衡策略

consur是一个免费的开源工具,提供服务发现、健康检查、负载平衡和一个全球分布的键值存储。此外,它还提供了一组用于构建编排工作流和工具的原语。在微服务体系结构中,应用程序通常跨多个IP地址运行并绑定到各种端口。服务发现有助于查找这些不同的服务,而不管它们位于何处。由于同一服务的多个实例通常在微服务体系结构中同时运行,因此我们需要一种策略,以便在处理运行状况的变化、实例数量的变化和集群状态的变化时,均衡地平衡服务的所有健康实例的流量。这是负载平衡层的工作。本文讨论了在微服务架构中使用consur实现负载平衡的一些常见策略。»直接执政官使用consur实现负载平衡的一种方法是使用consur的内置负载平衡功能。consur将健康检查与服务发现相结合。这意味着不正常的主机不会从查询返回到服务发现层。在这种模式下,应用程序和服务在每次希望在数据中心中找到其他服务时都直接与consur通信。请考虑以下配置文件,其中包含后端服务的IP地址:服务:后端:10.2.5.391硬编码IP地址通常被认为是一种不好的做法,特别是在微服务体系结构中。随着应用程序在整个系统中的移动,保持此配置文件的最新性变得非常困难,尤其是在多个计算机集群中。相反,更好的方法是利用consur的DNS发现层。服务:后端:backend.service.consur就像"www.hashicorp.com网站是一个网址,也是backend.service.consur". TLD或域后缀是可配置的,但默认值是.consuv。任何以TLD结尾的请求都将交给领事。service命名空间告诉consur查找服务(而不是作为机器的节点)。backend是要查找的服务的名称。要求backend.service.consur"解析为一组IP地址的方式与请求相同"www.hashicorp.com网站"解析为一组IP地址。然而,对于consur,该解决方案在服务发现层进行,并集成到健康检查机制中。每次应用程序或内核解析该DNS条目时,它都会收到一个随机的循环响应,该响应是与集群中的健康服务相对应的IP地址列表。DNS接口提供了基本上零接触的服务发现集成到任何应用程序中。»赞成的意见不依赖外部工具或流程无需监控或维护其他服务默认情况下高度可用尽可能接近实时DNS易于使用,工作量最小群集运行状况检查是最小负载»欺骗单点故障-即使consur在默认情况下是高可用的,如果consur不可用或不可访问,此模式也不提供故障转移需要在应用程序中直接使用httpapi,或者进行DNS查询并假设端口,或者进行两次DNS查询来查找地址和端口应用程序和conver之间的紧密耦合»法维奥Fabio是一个开源工具,它为consur管理的服务提供快速、现代、零配置的负载平衡HTTP(S)和TCP路由器。用户通过健康检查在consur中注册服务,fabio会自动将流量路由给他们。不需要其他配置。用户使用以urlprefix-开头的标记注册服务,例如:urlprefix-/我的服务例如,fabio在我的服务中请求fabio/a服务时,会自动发送到fabio的服务。Fabio还支持更高级的路由配置。»赞成的意见与执政官的丰富融合与DNS方法相比,对负载平衡的控制更多拥有超过4000名GitHub明星的强大社区支持和采用支持TCP代理访问日志和其他一些很棒的特性HashiCorp Vault集成用于路由可视化的可选Web UI非常详细的开源文档»欺骗需要附加服务才能运行和监视与CONSUR和CONSUR标签紧密耦合»Nginx/HAProxy带consur模板使用consur进行负载平衡的另一种方法是使用第三方工具(如Nginx或HAProxy)来平衡流量,并使用诸如consur Template之类的开源工具来管理配置。在这种模式下,consur模板动态管理nginx.conf公司或者haproxy.conf公司定义负载平衡器和服务器列表的配置文件。这个列表是模板化的,consur模板作为服务运行,以保持模板的最新状态。consur-Template与consur集群有一个连续的连接,当服务池发生更改时,consur-Template将写入一个新的配置文件,并向Nginx或HAProxy进程发出重新加载其配置的信号。以下是Nginx consur模板模板示例:上游myapp{{{范围服务"myapp"}}服务器{.Address}}:{.Port}}{{end}}}在本例中,conver模板将监视所有名为"myapp"的服务。如果它们的任何状态发生了变化,consur模板将呈现一个新的配置文件,并向Nginx进程发出重新加载的信号。上面的模板将呈现nginx.conf公司这样地:上游myapp{服务器10.2.5.60:13845服务器10.6.96.234:45033服务器10.10.20.123:18677}需要注意的是,在这种模式下,Nginx和HAProxy都不知道consur的存在;它们只是读取自己的配置,就好像这些值是由操作员或配置管理工具硬编码的一样。»赞成的意见处理在非默认端口上运行的应用程序,而无需额外的API请求Nginx和HAProxy都是经过战斗考验的工具组织可能已经拥有这些工具的专业知识或现有的基础设施如果consur下线了,还保留着最后一次服务状态良好的记录consur Template还与Vault集成,这使得当配置文件包含诸如TLS私钥或共享密码之类的机密数据时,这是一个理想的解决方案»欺骗需要两个附加的服务来管理和监视-Nginx/HAProxy和consur模板由于阻塞查询,效率低下的模板会给consur集群带来很大的压力实践"一个容器一个服务"范式的挑战"flappy"集群(服务在健康和不健康之间切换的集群或具有大量连续快速流失的集群)可能会导致Nginx/HAproxy配置的不稳定性»带有定制模块的Nginx最近我设定了一个目标,尝试从等式中删除consur模板,但保持Nginx经过时间考验的灵活性和熟悉性。社区中有一些非常有趣和创新的方法,即:Zachary Schneider通过lua Nginx模块为CONSUR提供动态Nginx上游Nginx upsync模块Nginx-Pro域名解析ngx_http_set_后端启发了将C中的Nginx模块绑定到Golang的consur最终,这些方法要么涉及太多的活动部件,要么包含超出consur中基本服务发现的功能。因此,我编写了ngx_http_consur_后端_模块,该模块根据每个对nginx的请求动态地选择一个上游。看起来像这样:http协议{服务器{听80;服务器名称example.com网站;位置/我的服务{consur$后端服务名称;proxy_pass $backend;}}}对于每个请求,consur键告诉Nginx委托给定制模块并选择一个随机的健康后端,然后将请求代理到该后端。当然还有需要改进的地方,但是这个概念证明表明,不需要中介工具就可以将Nginx和consur直接连接在一起。»赞成的意见处理在非默认端口上运行的应用程序,而无需额外的API请求没有外部工具-只需运行Nginx并直接指向consur使用官方的consursdk客户机库可以提供HTTP/2、过时的查询等»欺骗需要从源代码处编译Nginx以安装自定义模块对后端的每个请求调用consur(每个请求都会吃掉请求的RTT和consur解析的RTT)需要Nginx自定义模块的知识才能做出贡献对于TLS私钥或共享密码,不与Vault集成模块还没有经过战斗测试»哈普罗西1.8HAProxy 1.8(在撰写本文时,目前是一个候选版本)添加了通过DNS进行服务发现的内置功能,而无需使用第三方工具或模块。HAProxy已经有了一段时间的内置DNS解析,但是HAProxy 1.8通过SRV记录和对EDNS的支持带来了端口解析,使其与consur完美结合。»赞成的意见没有外部工具-只需运行HAProxy并直接指向执政官处理优雅的重新加载、ttl等支持Kubernetes和Docker Swarm服务发现»欺骗需要HAProxy在故障情况下的灵活性不如consur模板»结论利用Consul实现负载平衡的策略和技术有很多。这篇文章详细介绍了一些最常见的技术,希望能激发灵感,以新的、令人兴奋的方式将行业标准的负载平衡工具与consur集成起来。无论您是直接使用consur,弥合与consur模板的差距,自己编译Nginx的自定义版本,还是尝试HAProxy 1.8发布候选版本,我们都期待您如何平衡您的微服务。