微服务架构下的服务治理:如何在 SpringCloud 框架中实现服务的注册与发现
服务治理
RPC 远程过程调用协议的核心设计思想: 在于注册中心, 因为注册中心:管理每个服务与服务之间的一个依赖关系
服务治理: 在传统的 RPC 远程过程调用协议中,管理每个服务与服务之间的依赖关系非常复杂.可以使用服务治理技术,管理每个服务与服务之间的一个依赖关系.可以实现本地负载均衡,服务发现与注册,容错等
服务注册与发现
注册中心
在 RPC 远程过程调用协议中,有一个注册中心
SpringCloud 支持三种组册中心:
Consul(go 语言)
Eureka
Zookeeper
Dubbo 支持两种注册中心:
Zookeeper
Redis
注册中心概念: 存放服务地址相关信息(接口地址),通过别名注册获取
原理:
首先启动注册中心
服务提供者(Provider)服务在启动时,把当前服务信息以别名的方式注册到注册中心
服务消费者(Consumer)在调用接口的时候,使用服务别名从注册中心获取 RPC 远程调用地址
服务消费者(Consumer)获取 RPC 远程调用地址后,使用本地 HttpClient 技术实现调用
配置文件:
注册中心项目:
服务注册
将服务信息注册到注册中心上
配置文件:
服务提供者(Provider)项目:
服务发现
从注册中心获取服务信息
配置文件:
服务消费者(Consumer)项目:
Ribbon 负载均衡:
在集群操作中:
首先启动注册中心
多个服务提供者(Provider)服务在启动时,把当前服务信息以别名的方式注册到注册中心
多个服务消费者(Consumer)在调用接口的时候,使用服务别名从注册中心获取 RPC 远程调用地址
服务消费者(Consumer)获取 RPC 远程调用地址后,先使用 Ribbon 负载均衡器实现负载均衡再使用本地 HttpClient 技术实现调用
负载均衡基本策略: 轮询机制(默认)
集群
微服务 RPC 远程过程调用协议的核心:服务治理:注册中心
搭建注册中心集群: 可以解决注册中心故障导致整个微服务环境不可用的问题
Eureka 高可用原理:
默认情况下,Eureka 是让服务注册的服务注册中心,不注册自己
Eureka 高可用就是将自己作为服务向其它注册中心注册自己, 形成一组相互注册的服务注册中心,实现服务清单的互相同步, 达到高可用效果
注册中心集群:
在注册服务过程中,只会保证有一台注册中心有对应的服务信息数据即可,只有注册中心宕机后,才启动同步数据到其它注册中心
配置文件:
Eureka 自我保护机制
Eureka 自我保护机制: 为了防止 EurekaClient 可以正常运行时,与 EurekaServer 在网络无法通信的情况下,EurekaServer 误将 EurekaClient 服务剔除
在本地开发环境中,测试时建议关闭 EurekaServer 端自我保护机制,保证不可用服务及时被剔除:
Zookeeper
Eureka 闭源,使用 Zookeeper 替代 Eureka 作为注册中心
Zookeeper 是分布式协调工具,可以实现注册中心的功能,采用 Zookeeper 的临时节点类型
临时节点和生命周期是相关联的,如果服务断开连接之后,临时节点就会被自动删除
Consul
Consul 是开源的分布式服务发现与配置管理系统,由 HashiCorp 公司用 Go 语言开发
特点:
基于 raft 协议,比较简洁
支持健康检查
支持 Http 和 DNS 协议
支持跨数据中心的 WAN 集群
提供图形界面
跨平台
Consul 环境搭建:
下载 Consul
设置环境变量:添加 Consul 所在目录
cmd 启动:consul agent -dev -ui -node=cy(-dev:开发服务器模式启动 -node:节点名 -ui 界面访问支持,默认开启)
访问 Consul: http://localhost:8500
DiscoveryClient
获取注册中心的服务信息
用于实现本地负载均衡
版权声明: 本文为 InfoQ 作者【攻城狮Chova】的原创文章。
原文链接:【http://xie.infoq.cn/article/240b1b7c65f0215a09ac2cb89】。文章转载请联系作者。
评论