服务注册与发现(中)

Posted 痴乙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了服务注册与发现(中)相关的知识,希望对你有一定的参考价值。

前言

上篇主要说明了服务注册与发现的实现方式之一, Eureka

下面,让我们来了解一下其它的实现方式 吧

服务注册发现的其它实现方式

DNSZooKeeperApache DubboConsulEtcd、以及Nacos

DNS(早期)

这种基于Pull的方式不能及时获取服务的状态的更新(例如:服务的IP更新等)。

如果服务的提供者出现故障,由于DNS缓存的存在,服务的调用方会仍然将请求转发给出现故障的服务提供方。

Zookeeper

Zookeeper是google开源的在Java语言上实现的分布式协调服务,是Hadoop和Hbase的重要组件,提供了数据/发布订阅、负载均衡、分布式同步等功能。

Zookeeper也是基于主从架构,搭建了一个可高扩展的服务集群,其服务架构如下:

  • Leader-Server:Leader负责进行投票的发起和决议,更新系统中的数据状态

  • Server:Server中存在两种类型:Follower和Observer。其中Follower接受客户端的请求并返回结果(事务请求将转发给Leader处理),并在选举过程中参与投票;Observer与Follower功能一致,但是不参与投票过程,它的存在是为了提高系统的读取速度

  • Client:请求发起方,Server和Client之间可以通过长连接的方式进行交互。如发起注册或者请求集群信息等。

Apache Dubbo

Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现 (Dubbo的服务发现模块基于zookeeper实现)。

dubbo 需求

当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。这时,需要自动画出应用间的依赖关系图,以帮助架构师理清关系。

接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?为了解决这些问题,第一步,要将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标。其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响应时间到达阈值,记录此时的访问量,再以此访问量乘以机器数反推总容量。

Apache Dubbo 技术架构

节点角色说明

节点 角色说明
Provider 暴露服务的服务提供方
Consumer 调用远程服务的服务消费方
Registry 服务注册与发现的注册中心
Monitor 统计服务的调用次数和调用时间的监控中心
Container 服务运行容器

Consul

Consul 简介

Consul是基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。Consul的功能都很实用,其中包括:服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等特性。Consul本身只是一个二进制的可执行文件,所以安装和部署都非常简单,只需要从官网下载后,在执行对应的启动脚本即可。

Consul基础特性

1.服务注册/发现

为什么微服务架构下就需要做服务注册和服务发现呢?微服务的目标就是要将原来大一统的系统架构,拆分成细粒度的按功能职责分成的小系统,这样就会出现很多小的系统,部署的节点也会随之增加。试想一下,如果没有一个统一的服务组件来管理各系统间的列表,微服务架构是很难落地实现的。Consul提供的服务注册/发现功能在数据强一致性和分区容错性上都有非常好的保证,但在集群可用性下就会稍微差一些(相比Euerka来说)。

2.数据强一致性保证

Consul采用了一致性算法Raft来保证服务列表数据在数据中心中各Server下的强一致性,这样能保证同一个数据中心下不管某一台Server Down了,请求从其他Server中同样也能获取的最新的服务列表数据。数据强一致性带来的副作用是当数据在同步或者Server在选举Leader过程中,会出现集群不可用。

3.多数据中心

Consul支持多数据中心(Data Center),多个数据中心之间通过Gossip协议进行数据同步。多数据中心的好处是当某个数据中心出现故障时,其他数据中心可以继续提供服务,提升了可用性。

4.健康检查

Consul支持基本硬件资源方面的检查,如:CPU、内存、硬盘等

5.Key/Value存储

Consul支持Key/Value存储功能,可以将Consul作为配置中心使用,可以将一些公共配置信息配置到Consul,然后通过Consul提供的 HTTP API来获取对应Key的Value。

敬请期待...

Etcd、以及Nacos留待下篇再做说明,敬请期待...

参考链接:

  • [Zookeeper 官网](http://zookeeper.apache.org/)

  • [Apache Dubbo](http://dubbo.apache.org/zh-cn/)

  • [Consul 官网](https://www.consul.io/)


以上是关于服务注册与发现(中)的主要内容,如果未能解决你的问题,请参考以下文章

微服务架构中服务注册与发现

微服务架构实践:服务注册与发现中负载方案选型

基于ZooKeeper实现服务注册与发现

springcloud-服务注册与发现

一个故事,一段代码告诉你如何使用不同语言(Golang&C#)提供相同的能力基于Consul做服务注册与发现

资深架构师带你通过手写代码实现服务的注册与发现~ 附代码示例链接!