服务发现的基础概念

服务发现与服务发现组件的基本原理

什么是服务发现

在传统的系统部署中,服务运行在一个固定的已知的 IP 和端口上,如果一个服务需要调用另外一个服务,可以通过地址直接调用,但是,在虚拟化或容器话的环境中,服务实例的启动和销毁是很频繁的,服务地址在动态的变化,如果需要将请求发送到动态变化的服务实例上,至少需要两个步骤:

服务注册 — 存储服务的主机和端口信息

服务发现 — 允许其他用户发现服务注册阶段存储的信息

服务发现的主要优点是可以无需了解架构的部署拓扑环境,只通过服务的名字就能够使用服务,提供了一种服务发布与查找的协调机制。服务发现除了提供服务注册、目录和查找三大关键特性,还需要能够提供健康监控、多种查询、实时更新和高可用性等。

服务发现的优点

服务发现的主要好处是「零配置」:不用使用硬编码的网络地址,只需服务的名字(有时甚至连名字都不用)就能使用服务。在现代的体系架构中,单个服务实例的启动和销毁很常见,所以应该做到:无需了解整个架构的部署拓扑,就能找到这个实例。

解决的问题

在一个分布式系统中,服务注册与发现组件主要解决两个问题:服务注册和服务发现。

  • 服务注册:服务实例将自身服务信息注册到注册中心。这部分服务信息包括服务所在主机IP和提供服务的Port,以及暴露服务自身状态以及访问协议等信息。
  • 服务发现:服务实例请求注册中心获取所依赖服务信息。服务实例通过注册中心,获取到注册到其中的服务实例的信息,通过这些信息去请求它们提供的服务。

除此之外,服务注册与发现需要关注监控服务实例运行状态、负载均衡等问题。

  • 监控:微服务应用中,服务处于动态变化的情况,需要一定机制处理无效的服务实例。一般来讲,服务实例与注册中心在注册后通过心跳的方式维系联系,一旦心跳缺少,对应的服务实例会被注册中心剔除。
  • 负载均衡:同一服务可能同时存在多个实例,需要正确处理对该服务的负载均衡。

    CAP原则

    CAP原则,指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性),不能同时成立。

  • 一致性:它要求在同一时刻点,分布式系统中的所有数据备份都处于同一状态。
  • 可用性:在系统集群的一部分节点宕机后,系统依然能够响应用户的请求。
  • 分区容错性:在网络区间通信出现失败,系统能够容忍。
  • 一般来讲,基于网络的不稳定性,分布容错是不可避免的,所以我们默认CAP中的P总是成立的。

一致性的强制数据统一要求,必然会导致在更新数据时部分节点处于被锁定状态,此时不可对外提供服务,影响了服务的可用性,反之亦然。因此一致性和可用性不能同时满足。
我们接下来介绍的服务注册和发现组件中,Eureka满足了其中的AP,Consul和Zookeeper满足了其中的CP。

服务发现的一般方式

客户端发现

在使用客户端发现方式时,客户端通过查询服务注册中心,获取可用的服务的实际网络地址(IP 和端口)。然后通过负载均衡算法来选择一个可用的服务实例,并将请求发送至该服务。
优点:架构简单,扩展灵活,方便实现负载均衡功能。
缺点:强耦合,有一定开发成本。

服务端发现

客户端向load balancer 发送请求。load balancer 查询服务注册中心找到可用的服务,然后转发请求到该服务上。和客户端发现一样,服务都要到注册中心进行服务注册和注销。
优点:服务的发现逻辑对客户端是透明的。
缺点:需要额外部署和维护高可用的负载均衡器。

常用的服务发现框架

常见服务发现框架 Consul、 ZooKeeper以及Etcd

ZooKeeper 是这种类型的项目中历史最悠久的之一,它起源于 Hadoop。它非常成熟、可靠,被许多大公司(YouTube、eBay、雅虎等)使用。

Etcd是一个采用 HTTP 协议的健/值对存储系统,它是一个分布式和功能层次配置系统,可用于构建服务发现系统。其很容易部署、安装和使用,提供了可靠的数据持久化特性。搭配一些第三方工具,etcd(健/值对存储系统)+ Registrator(服务注册器) + Confd(轻量级的配置管理工具)

Consul 是强一致性的数据存储,使用 Gossip 形成动态集群。它提供分级键/值存储方式,不仅可以存储数据,而且可以用于注册器件事各种任务,从发送数据改变通知到运行健康检查和自定义命令

服务发现框架的对比

原文地址:https://www.cnblogs.com/Yemilice/p/10923331.html

时间: 2024-08-01 13:02:53

服务发现的基础概念的相关文章

服务发现:Zookeeper vs etcd vs Consul

摘自:http://dockone.io/article/667 [编者的话]本文对比了Zookeeper.etcd和Consul三种服务发现工具,探讨了最佳的服务发现解决方案,仅供参考. 如果使用预定义的端口,服务越多,发生冲突的可能性越大,毕竟,不可能有两个服务监听同一个端口.管理一个拥挤的比方说被几百个服务所使用的所有端口的列表,本身就是一个挑战,添加到该列表后,这些服务需要的数据库和数量会日益增多.因此我们应该部署无需指定端口的服务,并且让Docker为我们分配一个随机的端口.唯一的问题

consul服务注册与服务发现的巨坑

最近使用consul作为项目的服务注册与服务发现的基础功能.在塔建集群使用中遇到一些坑,下面一个个的记录下来. consul集群多node consul集群的node也就是我们所说的consul实例.集群由多个node组成,为了集群的可用性,需要超过半数的node启用server.如5个node中建议3个启用server模式,3个node组成的集群就2个node启用server模式.看到这里的时候你一定觉得没有什么问题呀,但是consul坑就是多.加入你的集群组成如下: Node Address

【微服务架构】SpringCloud之Eureka(服务注册和服务发现基础篇)(二)

上篇文章讲解了SpringCloud组件和概念介绍,接下来讲解一下SpringCloud组件相关组件使用.原理和每个组件的作用的,它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路有(Zuul),客户端负载均衡(Ribbon),Archaius,Turbine等  今天学习的是Eureka即注册中心 一:Eureka简介 Eureka是Spring Cloud Netflix的一个子模块,也是核心模块之一.用于云端服务发现,一个基于REST的服务,用于定位服务,以实

java版b2b2c社交电商spring cloud分布式微服务(二)Eureka(服务注册和服务发现基础篇)

一:Eureka简介 电子商务社交平台源码请加企鹅求求:叁五叁六贰四柒贰五九.   Eureka是Spring Cloud Netflix的一个子模块,也是核心模块之一.用于云端服务发现,一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移. 服务注册与发现对于微服务系统来说非常重要.有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访问到服务.他的功能类似于dubbo的注册中心(register). 服务发现:服务发现是微服务基础架构

SpringCloud分布式微服务b2b2c电子商务(二)Eureka(服务注册和服务发现基础篇)

一:Eureka简介 Eureka是Spring Cloud Netflix的一个子模块,也是核心模块之一.用于云端服务发现,一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移.了解springcloud架构可以加求求:三五三六二四七二五九,服务注册与发现对于微服务系统来说非常重要.有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访问到服务.他的功能类似于dubbo的注册中心(register).服务发现:服务发现是微服务基础架构的

linux基础概念和个人笔记总结(6)

防伪码:曾经梦想仗剑走天涯,回过头,却发现还是放不下家的牵挂 后续理论的验证图文详解,我会更新,希望大家可以参考 第十一章 FTP文件传输服务 1.FTP连接 控制连接:tcp21端口,用于发送ftp命令信息 数据连接:tcp20端口,用于上传.下载数据 数据连接的建立类型: a.主动模式:服务器从20端口主动向客户端发起连接 b.被动模式:服务端在指定范围内某个端口被动等待客户端连接 2.FTP用户的类型 匿名用户:anonymous或ftp 本地用户:账号名称.密码等信息都保存在passwd

LVS 实验笔记1 一些基础概念

基础概念 rsync 同步软件 效率不高 inotify 通知 三种集群: LB: load balance 提高服务器的并发能力 HA: 高可用 high availability不会因为一台服务器宕机导致服务不可用 HP:high perfomence  高性能计算集群 并行处理集群 分布式文件系统 将大任务切割为小任务,分别进行处理 health check:健康检查 NFS:net filesystem 共享存储设备 DAS:直接附加存储 块级别交换数据 直接连到多态主机,性能好,但是要

C# 基础概念

1.     面向对象的思想主要包括:继承 多态 封装 ●       封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部. ●       继承:子类拥有父类的所有数据和操作. ●       多态:一个程序中同名的不同方法共存的情况. 有两种形式的多态– 重载与重写. 2.     什么是装箱和拆箱 装箱(boxing)和拆箱(unboxing)机制使得在C#类型系统中,任何值类型.引用类型和object(对象)类型之间进行转换,这种转换称为绑定连接.简单地

伯克利教授Stuart Russell:人工智能基础概念与34个误区

伯克利教授Stuart Russell:人工智能基础概念与34个误区 机器之心 9 个月前 机器之心 Russell 是加州大学伯克利分校人工智能系统中心创始人兼计算机科学专业教授,同时还是人工智能领域里「标准教科书」<人工智能:一种现代方法>作者(谷歌研究主管 Peter Norvig 也是该书作者).在这篇文章中,他以 Q&A 的方式讲解了人工智能的未来以及常见的误解. 1. 什么是人工智能? 是对让计算机展现出智慧的方法的研究.计算机在获得正确方向后可以高效工作,在这里,正确的方