微服务注册最全详解(图文全面总结)

开发 架构
不论使用那种工具,服务注册一定是要确保高可用的,否则重则的是所有的服务都没法调用,轻则新的服务不能上线,所以一般都会考虑本地有缓存服务地址等方案。

微服务注册是微服务的核心组件,常见的有:ZooKeeper,Consul,Nacos,Eureka...等等,下面我就重点来详解微服务注册@mikechen

微服务注册

服务注册指的是将自身服务信息注册到注册中心,服务信息包括:服务所在主机IP、服务的端口号Port、暴露服务协议等信息。

如下图所示:

图片图片

Service B 把自己注册到注册中心,这就叫 服务注册。

服务注册作用

服务注册就是维护一个登记簿,它管理系统内所有的服务地址。

当新的服务启动后,它会向登记簿交待自己的地址信息,服务的依赖方直接向登记簿要服务地址就行了。

同时服务注册还要负责一件事情,服务状态的维护,假如一个服务突然down掉,它应该能够感知,并把down掉的服务摘掉,然后主动或被动的把这个信息告知服务消费方。

服务注册实现

服务注册有两种形式:客户端注册和代理注册。

1.客户端注册

客户端注册是服务自己要负责注册与注销的工作,当服务启动后注册线程向注册中心注册,当服务下线时注销自己。

图片图片

这种方式的缺点是注册注销逻辑与服务的业务逻辑耦合在一起,如果服务使用不同语言开发,那需要适配多套服务注册逻辑。

2.代理注册(第三方注册)

代理注册也叫第三方注册,指的是一个单独的代理服务负责注册与注销。

当服务提供者启动后以某种方式通知代理服务,然后代理服务负责向注册中心发起注册工作。

图片图片

第三方注册的优点非常明显,就是服务跟服务注册表是分离的,不需要为每种编程语言和架构完成服务注册逻辑,替代的,服务实例是通过一个集中化管理的服务进行管理的。

这种方式的缺点是多引用了一个代理服务,并且代理服务需要配置管理一个高可用的系统。

微服务注册框架

当下用于服务注册的工具非常多ZooKeeper,Consul,Etcd, 还有Netflix家的Eureka等等。

1.ZooKeeper

这里服务注册的实现会运用Zookeeper的watch机制来实现。

比如:客户端注册监听他关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,Zookeeper会通知客户端。

client端会对某个znode建立一个watcher事件,当该znode发生变化时,zk会主动通知watch这个znode的client,然后client根据znode的变化来做出业务上的改变等。

如下图所示:

图片图片

2.Consul

Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。

Consul架构,如下图所示:

图片图片

图片上 datacenter 分成上下两个部分, 但是这两个部分又不是完全隔离的,他们之间通过 WAN GOSSIP 进行报文交互。

3.Etcd

Etcd是使用Go语言开发的一个开源的、高可用的分布式key-value存储系统,可以用于配置共享和服务的注册和发现。

Etcd架构如下图所示:

图片图片

从 架构图中我们可以看到etcd 主要分为四个部分:

  • HTTP Server

用于处理用户发送的 API 请求,以及其它 Etcd节点的同步与心跳信息请求。

  • Store

用于处理 Etcd支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等。

  • Raft

Raft 是强一致性算法的具体实现,是 Etcd的核心。

  • WAL

Write Ahead Log,预写日志系统,是 Etcd的数据存储方式,Etcd就通过 WAL 进行持久化存储,这个与MySQL持久化存储机制类似。

Write-Ahead Logging 是数据库中一种高效的日志算法,对于非内存数据库而言,磁盘I/O操作是数据库效率的一大瓶颈。

在相同的数据量下,采用WAL日志的数据库系统在事务提交时,磁盘写操作只有传统的回滚日志的一半左右,大大提高了数据库磁盘I/O操作的效率,从而提高了数据库的性能。

4.Eureka

Eureka 作为 Spring Cloud 微服务框架的注册中心,与之对应的是 Dubbo 框架的ZooKeeper。

Eureka基本架构,如下图所示:

图片

上图简要描述了Eureka的基本架构,由3个角色组成:

1.Service Provider: 暴露服务的服务提供方。

2)Service Consumer:调用远程服务的服务消费方。

3)EureKa Server: 服务注册中心和服务发现中心。

不论使用那种工具,服务注册一定是要确保高可用的,否则重则的是所有的服务都没法调用,轻则新的服务不能上线,所以一般都会考虑本地有缓存服务地址等方案。


责任编辑:武晓燕 来源: mikechen的互联网架构
相关推荐

2024-07-26 10:35:00

2024-09-04 09:43:36

2024-08-29 10:23:42

2024-05-31 13:34:57

2024-08-12 16:09:31

2024-08-13 15:07:20

2024-11-06 09:54:58

SpringJava开发

2024-09-26 13:33:12

2024-08-07 14:56:00

Nginx反向代理配置

2024-07-12 08:42:58

Redis高性能架构

2024-11-06 12:29:02

2024-09-14 11:36:02

2016-01-28 14:41:06

CC++编码

2021-03-18 18:59:42

苹果Apple ID账号

2015-09-18 16:55:45

云计算

2022-10-08 07:31:26

微服务编排体系

2016-01-15 09:38:49

2022-06-17 12:05:25

微服务注册

2024-10-31 11:52:05

缓存预热系统

2024-08-30 10:29:21

点赞
收藏

51CTO技术栈公众号