zookeeper VS etcd VS consul
如果使用预定义的端口,服务越多,发生冲突的可能性越大,毕竟,不可能有两个服务
监听同一个端口。管理一个拥挤的比方说被几百个服务所使用的所有端口的列表,本身就是
一个挑战,添加到该列表后,这些服务需要的数据库和数量会日益增多。因此我们应该部署
无需指定端口的服务,并且让 Docker 为我们分配一个随机的端口。唯一的问题是我们需要
发现端口号,并且让别人知道。
当我们开始在一个分布式系统上部署服务到其中一台服务器上时,事情会变得更加复杂,
我们可以选择预先定义哪台服务器运行哪个服务的方式,但这会导致很多问题。我们应该尽
我们所能尽量利用服务器资源,但是如果预先定义每个服务的部署位置,那么要实现尽量利
用服务器资源是几乎不可能的。另一个问题是服务的自动伸缩将会非常困难,更不用说自动
恢复了,比方说服务器故障。另一方面,如果我们将服务部署到某台只有最少数量的容器在
运行的服务器上,我们需要添加 IP 地址到数据列表中,这些数据需要可以被发现并存储在
某处。
当我们需要存储和发现一些与正在工作的服务相关的信息时,还有很多其他的例子。为
了能够定位服务,我们需要至少接下来的两个有用的步骤。
服务注册——该步骤存储的信息至少包括正在运行的服务的主机和端口信息
服务发现——该步骤允许其他用户可以发现在服务注册阶段存储的信息。
除了上述的步骤,我们还需要考虑其他方面。如果一个服务停止工作并部署/注册了一
个新的服务实例,那么该服务是否应该注销呢?当有相同服务的多个副本时咋办?我们该如