微服务架构中的服务发现、负载均衡与可扩展性
1. 服务发现
1.1 服务发现的重要性
服务发现的核心作用是确保微服务之间能够相互找到对方。从表面上看,这似乎是一个简单的任务,比如可以通过在所有计算机上分发详细记录微服务 IP 地址和端口的配置文件来实现,常见的配置管理系统也能支持此类文件的部署。然而,这种静态配置的方式并不足以满足实际需求,主要原因如下:
- 微服务的动态性 :微服务会不断地启动和停止,这不仅可能是由于服务器故障,还可能是新的部署或者环境扩展(启动新服务器)导致的。因此,服务发现需要具备动态性,固定配置无法适应这种变化。
- 解耦与扩展性 :通过服务发现,调用方微服务与被调用方微服务之间的耦合度降低。这对于扩展性有积极影响,客户端不再绑定到具体的服务器实例,而是可以根据不同服务器的当前负载联系不同的实例。
- 集中管理与监控 :当所有微服务采用统一的服务发现方法时,会形成一个所有微服务的中央注册表。这有助于进行架构概述,并且所有系统都可以获取监控信息。
在采用消息传递的系统中,服务发现可能并非必需。消息传递系统已经实现了发送方和接收方的解耦,双方只知道用于通信的共享通道,而不知道通信伙伴的身份。这种通过通道实现的解耦提供了服务发现所具备的灵活性。
1.2 服务发现与配置的区别
原则上,可以通过配置解决方案来实现服务发现,因为最终目的只是传递服务在哪个位置可达的信息。然而,配置机制实际上并不适合用于服务发现。对于服务发现而言,高可用性比配置服务器更为重要。在最坏的情况下,服务发