分布式-服务治理(上)
分布式-服务治理(上)
xiaoyan服务注册与发现
微服务架构的核心机制
在微服务架构下,一个分布式系统通常由多个微服务组成。当用户发起一个请求时,可能需要多个服务协同工作,以此相互配合来维持系统的正常运行。然而,随着业务需求的不断变化,微服务的节点数量可能会动态调整,这就带来了一系列的挑战。
试想一下,一个微服务可能存在多个节点,在需要的时候我们会临时增加或减少该微服务的节点数量。传统的做法是将这些节点的配置信息写死在微服务的配置代码中。当我们动态调整微服务时,就需要手动地去更新配置信息,并且重新启动服务,这样一来就增加了维护成本。
为了解决上述问题,我们需要一个统一管理的平台,让微服务间自动地完成协调治理。当有新增的节点时,能够自动识别并增加到自己的配置;当有挂掉的节点时,微服务能够自动识别并将其从可用列表中删除。服务注册与发现机制就是为此而设计的,微服务的可用列表统一由注册中心维护。通过注册中心,微服务可以动态地获取可用的服务列表。当服务配置更新时,注册中心会将变更推送给相关调用的微服务,无需手动更新,从而降低了维护成本,实现了服务的优雅上下线。
一个完善的服务注册与发现中心应具备以下功能:
服务的注册与服务查询(最基本)
服务状态变更通知、服务健康检查、不可用服务剔除
服务权重配置
服务注册与发现基本流程
服务注册
当启动一个服务时,该服务会向注册中心发送自己的服务信息(地址、端口、服务名称等),注册中心将这些信息保存起来,这就是服务注册。
流程步骤:
- 服务启动:微服务启动时,初始化并配置服务信息。
- 注册请求:微服务向注册中心发送注册请求,包含服务名称、IP地址、端口号等信息。
- 注册中心处理:注册中心接收到注册请求后,将服务信息存储在服务注册表中。
服务发现
一个服务要调用另外一个服务的节点,于是向注册中心请求所需服务的可用节点信息,这就是服务发现。当服务获取到调用服务的可用节点信息后,通常会将该信息缓存到本地,方便下次使用,同时也能够保证当注册中心挂掉时,不影响当前服务正常调用被调用的服务。
流程步骤:
- 服务调用请求:调用方服务向注册中心发送服务发现请求,请求所需服务的可用节点信息。
- 注册中心响应:注册中心返回可用的服务节点列表,包含服务名称、IP地址、端口号等信息。
- 本地缓存:调用方服务将获取到的服务节点信息缓存到本地,方便下次使用。
健康检测
为了保证服务的可用性,注册中心还会通过“心跳机制”来检测服务是否可用。如果服务不可用,注册中心会主动剔除该服务并通知相关服务,更新服务地址信息。
流程步骤:
- 心跳检测:注册中心定期向微服务发送心跳检测包,微服务在规定时间内响应心跳包。
- 服务状态更新:如果注册中心在一定时间内未收到微服务的响应,则认为该服务不可用,并将其从可用列表中剔除。
- 状态变更通知:注册中心将服务状态变更通知推送给相关调用的微服务,调用方更新被调用服务地址信息。
总结:服务注册与发现机制通过服务注册、服务发现和健康检测三个核心流程,实现了微服务架构中的动态服务管理和优雅上下线。通过服务注册,微服务向注册中心注册自己的信息;通过服务发现,调用方服务获取被调用服务的可用节点信息;通过健康检测,注册中心确保服务的可用性,并在服务状态变更时通知相关调用方。
配置管理
在微服务架构中,随着业务规模的扩展,服务器节点数量不断增加,导致程序配置的复杂性和管理难度显著提升。传统的配置管理方式逐渐暴露出以下问题:
- 配置文件碎片化:随着服务数量的增加,配置文件数量急剧增长,导致配置管理的复杂性增加,难以进行统一管理。
- 配置更新效率低下:传统方式下,配置修改后通常需要重启服务器才能生效,这不仅增加了运维成本,还可能导致服务中断。
- 配置安全性不足:配置信息通常硬编码在代码库中,容易暴露敏感信息,且难以进行权限控制和审计。
为了应对这些挑战,配置中心(Configuration Center)应运而生。配置中心通过集中化管理微服务的配置信息,提供了一系列高级功能,以提升配置管理的效率和安全性。
配置中心的核心功能
一个完善的配置中心应具备以下核心功能:
- 权限控制:配置的修改和发布应设置严格的权限控制机制,确保只有授权人员才能进行相关操作,从而保障配置的安全性和合规性。
- 日志记录与审计:配置中心应详细记录所有配置操作的日志,包括修改、发布、回滚等操作,以便于后续的问题排查和审计。
- 配置推送机制:
- 推送模式:配置中心主动将配置变更推送给应用服务器,要求服务器与配置中心保持长连接。虽然实现复杂度较高,但能够实现配置的实时更新,适用于对实时性要求较高的场景。
- 拉取模式:应用服务器主动从配置中心获取最新的配置信息。这种方式实现简单,但实时性较差,适用于对配置更新频率要求不高的场景。
- 灰度发布:配置中心应支持配置的灰度发布功能,即只将配置变更推送给部分服务器,以便在不影响整体服务的情况下进行配置验证和测试。
- 版本管理与回滚:配置中心应记录所有发布的配置版本,并支持一键回滚到指定版本。这不仅有助于快速恢复配置,还能提供配置变更的历史记录,便于问题追溯和分析。
常见配置中心
在微服务架构中,选择合适的配置中心对于提升系统的可维护性和扩展性至关重要。目前市场上存在多种配置中心解决方案,包括Apollo、Nacos、Kubernetes ConfigMap、Disconf和Spring Cloud Config等。
功能 | Apollo | Nacos | Spring Cloud Config |
---|---|---|---|
UI配置界面 | 有 | 有 | 无(通过Git操作) |
配置实时生效 | 支持(HTTP长轮询1s内) | 支持(HTTP长轮询1s内) | 不支持(重启生效,或手动refresh) |
版本控制 | 支持 | 支持 | 支持(Git实现) |
权限控制 | 支持 | 支持 | 支持(Git实现) |
灰度发布 | 支持 | 支持 | 不支持 |
告警通知 | 支持 | 支持 | 不支持 |
监听查询 | 支持 | 支持 | 支持 |
多语言 | 主流语言,Open API | 主流语言,Open API | 仅支持Spring应用 |
多环境 | 支持 | 支持 | 不支持 |
Apollo和Nacos都是国内公司开源的知名项目,Apollo是携程开源的,Nacos则是阿里开源的。Apollo的配置中心功能更加齐全,而Nacos在一些细微的功能上则略显简单,比如说在Nacos1.1.0版本才支持的灰度发布,但是Nacos可以作为服务注册中心。Spring Cloud Config作为Spring生态组件,可以方便与Spring Cloud体系无缝衔接,但整体的设计比较简单。