前言

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

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

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

DNSZooKeeperApache DubboConsulEtcd、以及Nacos

DNS(早期)

DNS作为服务注册发现的一种方案,它比较简单。只要在DNS服务上,配置一个DNS名称与IP对应关系即可。定位一个服务只需要连接到DNS服务器上,随机返回一个IP地址即可。由于存在DNS缓存,所以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 需求

在大规模服务化之前,应用可能只是通过 RMI 或 Hessian 等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过 F5 等硬件进行负载均衡。

当服务越来越多时,服务 URL 配置管理变得非常困难,F5 硬件负载均衡器的单点压力也越来越大。 此时需要一个服务注册中心,动态地注册和发现服务,使服务的位置透明。并通过在消费方获取服务提供方地址列表,实现软负载均衡和 Failover,降低对 F5 硬件负载均衡器的依赖,也能减少部分成本。

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

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

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 官网
  • Apache Dubbo
  • Consul 官网

end

如有问题,请留言或者发送邮件,感谢您的阅读

服务注册与发现(中)相关推荐

  1. SpringCloud--Eureka服务注册与发现 Eureka 集群搭建 详细案例!!!

    SpringCloud组件--Eureka 完整笔记 一.Eureka基础知识 1.1.什么是服务治理 ? 1.2. 什么是服务注册与发现? 1.3.Eureka两组件:Eureka Server和E ...

  2. 二、Eureka服务注册与发现

    SpringCloud系列目录: 一.SpringCloud简介 二.Eureka服务注册与发现 三.Eureka注册与发现之Eureka Comsumer 四.Eureka.Server Provi ...

  3. SpringCloud[01]Eureka服务注册与发现

    文章目录 Eureka服务注册与发现 1. Eureka基础知识 1. 什么是服务治理 2. 什么是服务注册与发现 3. Eureka包含两个组件:**Eureka Server** 和 **Eure ...

  4. EureKa服务注册与发现(集群部署Eureka与支付模块集群部署、订单模块访问负载均衡调用支付服务实现)

    上一遍文章完成了,聚合父工程.消费模块.支付模块.公共模块的搭建.RestTemplate调用支付模块 该篇项目创建gitv2.0的管理分子完成学习 1.Eureka基础知识 1.1. 什么是服务治理 ...

  5. SpringCoud - 基础入门(服务注册与发现、服务调用、服务降级与熔断篇)

    SpringCloud:是一系列框架的有序集合,也是一套完整的微服务解决方案.利用SpringBoot的开发便利巧妙的简化了分布式系统基础设施的开发,如发现注册.配置中心.消息总线.负载均衡.断路器. ...

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

    想象一下,如果你在写代码调用一个有REST API或Thrift API的服务,你的代码需要知道一个服务实例的网络地址(IP地址和端口).运行在物理硬件上的传统应用中,服务实例的网络地址是相对静态的, ...

  7. 【夯实Spring Cloud】Spring Cloud中的Eureka服务注册与发现详解

    本文属于[夯实Spring Cloud]系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习Spring Cloud技术,希望能给读者带来一些干货.系列目录如下: [夯实Spring Cloud]D ...

  8. GO微服务实战第十四节 案例:如何在 Go-kit 和 Service Meh 中进行服务注册与发现?

    今天我和你分享的是如何在 Go-kit 和 Service Mesh 中进行服务注册与发现的案例. 在上一课时中,我们基于搭建好的 Consul 集群,通过 Consul 中提供的 HTTP API ...

  9. python服务发现与注册_(转)微服务架构中服务注册与发现

    https://blog.csdn.net/u011537073/article/details/69663858 想象一下,如果你在写代码调用一个有REST API或Thrift API的服务,你的 ...

最新文章

  1. 海外web平台访问速度慢的原因之一
  2. Day 07 艺术家是靠天赋还是努力
  3. Android 架构 -- Room
  4. centos7 界面中文都是方块_Centos 7 项目管理系统部署之Trac(一)
  5. final在java中怎么用_Java中final的简单使用说明
  6. boost::mpi模块对gather() 和gatherv() 集合的测试
  7. Apache Flink 零基础入门(三)编写最简单的helloWorld
  8. ChannelInitializer 的添加
  9. Java 读取指定目录下的文件名和目录名
  10. Centos7下安装redis
  11. 最近点对模板__hdu1007
  12. 力扣题目——653. 两数之和 IV - 输入 BST
  13. A useful link to learn PDF
  14. Linux命令详解词典高频命令(三)
  15. css3(属性选择器,结构伪类选择器,伪元素选择器 ,css3盒子模型,滤镜filter, cale, 过渡transition))
  16. 无限火力跳跳机器人_2021LOL无限火力机器人最强出装和天赋介绍
  17. Arduino与Proteus仿真实例-MPX4250压力传感器驱动仿真
  18. 在visi_Visi如何使用Weave和Docker
  19. ofdm系统matlab仿真论文,基于MATLAB的OFDM仿真(SIMULINK仿真)
  20. 全国硕士研究生入学统一考试计算机学科专业基础综合冲刺指南

热门文章

  1. Linux创建用户,用户切换,权限相关实验
  2. WGCLOUD默认登录账号密码是什么
  3. 武林秘籍之Spring AOP 切面编程的简单应用
  4. 积累20180604
  5. OmniPlan 3破解码
  6. SOA构建电子政务平台 可用多种通信手段访问
  7. 常见CAD/CAM控件大全
  8. 大数据实战 --- 淘宝用户行为数据分析
  9. ​数字基建狂潮中:区块链处于什么位置?
  10. 笔记:Inductive Robust Principal Component Analysis