Docker-如何编写自定义负载均衡器?

时间:2019-04-11 04:35:57

标签: linux docker networking load-balancing

为了更多地了解Docker,我想尝试编写一个自定义负载均衡器。我正在考虑使用默认的网桥驱动程序创建docker网络,并将负载均衡器应用程序放入该网络的代理容器中。我将运行具有多个副本的一个或多个服务,并且代理将使用轮询将流量路由到每个容器。

我想代理应该知道同一网络中存在的所有其他实例以及它们提供的服务以进行负载平衡。这些是我的想法:

  • 对于网络中运行的每个容器,向代理发送请求以告知其可用性状态。我认为这是可行的,但需要自定义所有容器(以定期发送请求)。
  • 让代理查询主机的网络状态:我注意到命令docker network inspect提供了有关网络配置以及网络内部运行的容器的详细信息,因此我认为可以将此信息发送给代理也是。

我的问题是:哪种方法更可取?第二种方法是否可行?如果是,我是否应该寻找任何指南或文档?我对操作系统和网络有一点了解,因此非常感谢将这些内容组合在一起的帮助。

1 个答案:

答案 0 :(得分:1)

您还必须研究服务发现 / 服务注册表以及如何将其与负载均衡器一起使用。

发件人:Service Discovery and Load Balancing

  

服务发现

     

当我们处理微服务架构时,很可能在多个服务器甚至多个数据服务器上拥有多个服务。尽管最终用户可能不太在意这些服务的位置,但是我们的应用程序高度关注每个服务的连接详细信息。 Service Discovery解决了这个问题。

     

1。什么是服务发现?

     

正如我们提到的,当服务散布时,它们变得难以管理。很难跟踪每个服务的位置以及连接每个服务所需的详细信息。服务发现的确切含义,发现我们所有公开服务的过程以及如何与它们连接。

     

使用Service Registry解决了跟踪多个服务的过程。每个服务在创建后都会向服务注册表进行注册,服务注册表负责处理和维护连接到每个服务所需的信息。

     

...

     

由于微服务可能会不时关闭,因此考虑如何在Service Registry中处理这种情况很重要。 通常,服务注册表与负载均衡器层配对(在上一节中提到),当发现实例不再存在时,它将无缝地进行故障转移。因此,如果服务实例出现故障,那么Service Registry将无法返回所需的信息,并且负载平衡器将在处理这些信息的同时缓存服务注册表查找。