背景
本文记录下接入微服务时,名字服务的使用体验以及名字服务的相关知识概念。作为“消费”侧,理解概念以帮助熟练使用工具即可,并不需要深入其中的原理。
使用体验
在做网关相关需求时,用到了名字服务。第一次接触名字服务,直接通过 sdk 调用 api,传入服务的名字,就能拿到有效的服务地址(由 ip+host 组成)。
在代码中,可以去掉之前的名称 => ip
映射相关的配置,对于不同环境下的后端服务(例如开发、测试、正式),也可以通过命名空间来进行解决。
调用方得到的 ip:host 地址,是已经负载均衡的,“智能”地从服务地址列表中获取到当前合适的地址。作为调用侧,代码无感。
调用方调用完成后,将调用成功状态、消耗时间上报名字服务中心,服务中心会更智能地对服务实例进行调整。
名字服务的作用
在微服务架构下进行服务治理,解决负载均衡、服务注册、服务发现、服务熔断、动态路由、限频限流等问题。
在名字服务中,有三个角色:调用方、服务提供方、名字服务中心。
对服务提供方来说,它的主要功能是:
- 服务注册:启动时注册服务地址
- 服务销毁:关闭/异常时销毁服务地址
- 心跳上报:上报心跳到名字服务中心
对调用方来说,它的主要功能是:
- 服务发现:从名字服务中心获取服务的相关信息(地址、负载均衡权重、健康状态等等)
- 服务上报:上报服务调用结果
对名字服务中心,它的主要功能是:
- 健康检查:定时检测服务是否存活。对应服务提供方的“心跳上报”
- 负载均衡:根据服务权重、调用结果等信息,动态化分配
- 限频限流