精华内容
下载资源
问答
  • 什么是服务发现

    千次阅读 2018-09-07 11:34:52
    引言 ... 服务发现是什么 服务发现的模式 客户端模式 服务端模式 几种服务发现框架的简介 Eureka 服务注册反注册机制 Consul ...

     

    引言

    随着微服务的大范围应用,服务发现这个词也变的越来越火热。下面这篇文章,就会对服务发现这个概念进行介绍,介绍主要包含三部分,服务发现的定义,服务发现的模式以及目前比较成熟的服务发现应用。

    服务发现是什么?

    其实,我们日常的很多普通操作,都是在做服务发现。

    这里写图片描述

    如上图所示,这是一个在浏览器输入域名,然后获取网站服务的流程。这个流程中,DNS服务器会根据我们的域名解析出一个ip地址,返回ip地址中对应链接包含的内容。我们根据特定的标志(域名)来获取我们所需要的服务,这就是服务发现。而在微服务的领域,我们将应用拆分成一个个的微服务之后,服务发现,则变成了微服务之间相互获取彼此的信息。

    然而,在微服务的场景下,使用DNS服务器作为服务发现的实现者会存在以下几个问题。

    • DNS服务器不支持动态变更,不能够随着服务的状态变更(上线、下线、故障)而对域名映射变更。

    • DNS只能支持域名和ip地址的一一映射,但在微服务的场景中,很多微服务都会部署多个实例,这也就要求标志与服务要有一对多的映射。

    • DNS服务无法解决多数据中心的问题。

    总的来说,服务发现就是程序如何通过一个标志来获取服务列表,并且这个服务列表是能够随着服务的状态而动态变更的。

    服务发现的模式

    目前,服务发现主要存在有两种模式,客户端模式与服务端模式,两者的本质区别在于,客户端是否保存服务列表信息。下面用两个图来表示客户端模式与服务端模式。

    客户端模式

    这里写图片描述

    在客户端模式下,如果要进行微服务调用,首先要进行的是到服务注册中心获取服务列表,然后再根据调用端本地的负载均衡策略,进行服务调用。

    服务端模式

    这里写图片描述

    在服务端模式下,调用方直接向服务注册中心进行请求,服务注册中心再通过自身负载均衡策略,对微服务进行调用。这个模式下,调用方不需要在自身节点维护服务发现逻辑以及服务注册信息,这个模式相对来说比较类似DNS模式。

    对两者进行对比的话,他们的优劣也十分的明显

    客户端模式

    服务端模式

    只需要周期性获取列表,在调用服务时可以直接调用少了一个RT。但需要在每个客户端维护获取列表的逻辑

    简单,不需要在客户端维护获取服务列表的逻辑

    可用性高,即使注册中心出现故障也能正常工作

    可用性由路由器中间件决定,路由中间件故障则所有服务不可用,同时,由于所有调度以及存储都由中间件服务器完成,中间件服务器可能会面临过高的负载

    服务上下线对调用方有影响(会出现短暂调用失败)

    服务上下线调用方无感知

    目前来说,大部分服务发现的实现都采取了客户端模式。下面就会对两种比较经典的服务发现框架进行介绍

    几种服务发现框架的简介

    在这一小节中,我们将会通过三个方面以及一些具体的例子来介绍服务发现框架是如何工作的,它们各自的特点又是些什么。包括如何对服务进行注册/反注册,在CAP(一致性,可用性,分布式)之间的选择。

    Eureka

    eureka是netflix用于服务注册和发现的框架。在这个框架中,分为server和client两种角色。server负责保存服务的注册信息,同时server之间也可以彼此相互注册,client则需要向特定的server进行注册。

    服务注册/反注册机制

    这里写图片描述

    图片来源:携程技术中心

    如上图所示,Eureka采用了客户端的模式,服务首先需要向注册中心注册,调用方则需要在本地维护一个服务注册列表。

    具体的操作为:client/server通过RESTful Api向server进行服务注册,并且定期调用renew接口来更新服务的注册状态,若server在60s内没有收到服务的renew信息,则该服务就会被标志为下线。而如果服务需要主动下线的话,向server调用cancel就可以了。

    Eureka同时支持多个注册中心,以保证注册中心的高可用性。

    这里写图片描述

    图片来源:携程技术中心

    在多注册中心(server)的情况下,单个server在接收到服务的注册/更新信息的时候,它还会将这些信息同步给同样为server的peer(replicate to peer),为了避免广播风暴,这些信息只会传递一次,也就是说,接收到的server,不会再同步给自身的peer。

    服务注册完成之后,当client需要进行服务调用的时候,就可以向server获取当前的服务列表,再根据服务列表中的ip地址以及端口号进行调用了。

    更加具体一些的介绍,可以看这篇文章

    由于eureka的相关配置都是存储在配置文件中,因此如果需要动态增加server数量的话,就必须修改配置重启client,以确保server的一致性。所以在服务器端弹性配置上不够灵活。还有一个缺点是,由于一个client需要维持与多个server之间的联系,这个会占用额外的系统资源,另外这个框架在github上也有将近一年没有更新了。

    Consul

    Consul是目前较为流行的一个服务发现以及配置工具,Consul能够承担包括服务注册与发现、健康检查(health check)以及键值对存储等,同时,Consul还支持多个数据中心。

    Consul的微服务架构

    如上图所示,基于Consul的微服务一般都是集群,集群由一个个的Consul Agent组成,在这些Consul Agent里面,分为两种角色,Server 以及 Client。Consul是基于Raft协议实现的,这些Server里包含了Raft中的Leader以及follower。而client则只是向这些server进行键值对的读/写。

    服务注册/反注册机制

    当我们在本地启动Consul Agent之后,我们可以通过Consul的Restful Api(curl -request PUT http://consul/v1//agent/service/register)向Consul Agent注册服务信息,提交服务的端口号,ip地址,以及健康检查的方式。随后,这个Client就按照配置中的周期以及方式执行健康检查,当健康检查失败的时候,就会像Server Agent发送服务不可用的消息,这个服务就会被Consul标记为不可用了。

    我们也能够通过Get方法请求相同的地址来获取当前agent中注册的所有服务信息。

    小结

    这篇文章通过三个方面介绍了服务发现。

    • 服务端模式和客户端模式的区分,客户端模式下,所有客户端需要维护服务列表信息,负载均衡策略而服务端模式下则无需这些额外的实现。换而言之,在服务端模式下,更容易实现多语言的接入,更具有通用性,但是在客户端模式下,则具有了更快的响应时间以及更强的容灾能力。

    • 服务发现中的CAP选择,由于微服务本身就是面向分布式的,因此所有框架都天然地支持分布式,那么具体的选择差异就体现在了可用性以及一致性上。Eureka认为部分服务注册信息没有实时同步实际上并不影响服务之间的依赖调用(一个服务节点失败了,客户端会选择另外一个节点进行重试),因此选择了高可用的架构。而Consul是基于Raft协议的,因此一致性更加重要。

    参考文章

    展开全文
  • 什么是服务注册: 服务在启动的时候,将服务注册进注册中心(服务知道注册中心的相关信息) 什么是服务发现: 服务提供一个接口,对外暴露,有服务发现需求者可以通过该接口查询服务信息 我自己的理解 ...

    什么是服务注册:
    服务在启动的时候,将服务注册进注册中心(服务知道注册中心的相关信息)
    什么是服务发现:
    服务提供一个接口,对外暴露,有服务发现需求者可以通过该接口查询服务信息

    我自己的理解

    展开全文
  • 什么是服务发现 服务提供者是什么, 简单说就是一个HTTP服务器,提供了API服务,有一个IP端口作为服务地址。 服务消费者是什么? 就是一个简单的进程,想要访问服务提供者提供的服务来做一些事情。 一个HTTP服务器既...

    最近学习spring-cloud ,注册到nacos,就想为什么会有服务发现这个词呢??
    什么是服务发现

    服务提供者是什么, 简单说就是一个HTTP服务器,提供了API服务,有一个IP端口作为服务地址。 服务消费者是什么?

    就是一个简单的进程,想要访问服务提供者提供的服务来做一些事情。 一个HTTP服务器既可以是服务提供者对外提供

    服务,也可以是消费者需要别的服务提供者提供的服务,这就是服务依赖。复杂的服务甚至有多个服务依赖

    服务发现有三个角色,服务提供者、服务消费者和服务中介。 服务中介是联系服务提供者和服务消费者的桥梁。服务提供者

    将自己提供的服务地址注册到服务中介,服务消费者从服务中介那里查找自己想要的服务地址,然后使用这个服务。 服务中介

    提供多个服务,每个服务对应多个服务提供者。

    服务中介就是一个字典,字典里有很多key-value键值对,key是服务名称,value是服务提供者的地址列表。服务注册就是调用

    字典的put方法放东西,服务查找就是调用字典的get方法获取东西

    当服务提供者新加入时,要求服务中介能及时告知服务消费者。

    二、Redis作为服务中介

    Redis里面有丰富的数据结构,用来存储服务字典很合适。 对每一个服务名称,可以用一个set结构存储服务的IP:port字符串

    如果服务提供者加入,调用sadd命令加入服务地址,如果服务挂掉,调用srem命令移除服务地址。 对服务消费者使用smembers

    指令来获取所有服务地址然后在消费进程里随机调一个,或者使用srandmember命令直接获取随机服务地址。

    如果服务提供者进程备暴力杀死了,不能主动调用srem命令怎么处理? 这个时候服务列表中多了一个黑地址指向了不存在的服务

    二消费者完全不知道,这个时候服务中介就成了黑中介了。 因此,引入服务保活和检查机制,病更换数据结构。服务提供这需要每隔5秒

    左右向服务中介汇报存活, 服务中介将付地址和汇报时间记录在zset数据结构的value和score中。 服务中介需要每隔10秒左右检查zset

    数据结果。

    那么服务列表变动时如何通知消费者?

    第一种方式是轮询,消费者需要每隔几秒查询服务列表是否有改变。 如果服务很多,服务列表很大, 消费者很多,Redis会右一定压力。

    这时可以引入服务列表的版本号控制,给每个服务提供一个key/value设置服务的版本号,就是在服务列表发生变动时,递增这个版本号。

    消费者只要轮询这个版本号的变动即可直到服务列表是否发生了变化。

    第二种方式就是采用pubsub。 及时性明显好于轮询。缺点就是每个pubsub都会占用消费者一个线程和一个额外的Redis连接。 为了减少

    对线程和连接的浪费,我们使用单个pubsub广播全局版本号的变动。 所谓全局版本号就是任意服务列表发生了变动,这个版本号都会地藏。

    接受到版本变动的消费者再去检查各自的依赖服务列表的版本号是否发生了变动。

    Redis的单点问题怎么解决?

    现流行的服务发现系统都是使用分布式数据库zookeeper etcd consul等来作为服务中介,他们是分布式的多节点的,挂掉了一个节点没关系

    系统仍然可以正常工作。 那如果整个zk集群都挂掉? 其实每个服务消费者在本地内存里都会存一份当前的服务列表,即使服务中介集群挂掉,

    也是可以使用当前的服务列表正常工作的。 也可以Redis-sentinel可以在主节点挂掉的时候,自动升级从节点为主节点

    三、服务配置重加载

    服务发现一般只是用来注册和查找服务列表这样一个比较单纯的功能。不过现代的服务发现系统还会集成服务配置管理功能。这样可以实现服务

    配置的实时重加载。 服务中介还会存储一个单独的key/value用来存储这个服务的配置信息。当这个配置项在后台被修改时,服务中介会实时通知

    相关服务器变更配置信息。 比如数据库地址变动,业务参数修改等。

    四、服务管理后台

    为了便于服务管理,一般服务发现还会提供一个服务管理后台,用于管理人员查看服务集群的状态。如果服务注册和汇报时提供冗余的配置信息,服务

    管理后台就可以呈现更为详细的服务信息。服务管理后台还可以将所有的服务依赖组织起来,形成完整的依赖。

    展开全文
  • Spring Cloud 一系列框架的集合,它利用 Spring Boot 的开发便利性简化 了分布式系统的开发,比如服务发现、服务网关、服务路由、链路追踪等。他的设计目的为 了简化 Spring 应用的搭建和开发过程。该框架遵循...

    什么是Springcloud

    Spring Cloud 是一系列框架的集合,它利用 Spring Boot 的开发便利性简化 了分布式系统的开发,比如服务发现、服务网关、服务路由、链路追踪等。他的设计目的是为 了简化 Spring 应用的搭建和开发过程。该框架遵循“约定大于配置”原则,采用特定的方 式进行配置,从而使开发者不用定义大量的 XML 配置。Spring Cloud 并不重复造轮子,而是将市 面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。换句话说: Spring Cloud 提供了构建分布式系统所需的“全家桶”。核心组件:Eureka、Ribbon、Feign、 Hystrix、Zuul.

    为什么要使用这个呢?因为之前的嗯项目架构都是集中式的。这就会导致一个问题在项目当中出现任何一个小问题都会让整个项目不能使用。修改完之后需要让整个项目全量更新,所以基于传统架构的这种方式,我们在这个项目当中把,架构调整了一下,采用了微服务的架构。那使用了微服务架构之后,在整体的分配任务上呀,还有扩展性上来讲,比以前的开发以及这个效率上都有很显著的提高。

    我介绍一下spring cloud里边儿的一些组件吧,我们项目当中使用的。首先就是它的注册中心Eureka。所有的微服务。都需要连接Eureka去进行管理。它里边儿会有心跳协议,会知道每个微服务具体的一个在线状态。以及给其他调用微服务的这些去提供一些这这个微服务的基本信息

    接着就是这个远程调用feign,它提供了微服务之间的远程调用的一个组件,它是基于HTTP的。然后,远程调用这个组件集成了负载均衡ribbon。它可以有效的分辨出当前注册中心当中这个为服务有多少实例,会根据内部的算法去均衡的域访问这些实例,它的算法有轮询还有随机,这个算法我们也可以自定义,它默认的算法呢是轮循去访问

    接着就是。熔断器hystrix。那他这个组件儿在我们项目当中用的时候,就是在远程调用时。如果任何一个微服务响应超时或者发生异常,熔断器就会介入,把当前请求切断。然后去执行我们的回调方法,返回回调方法当中的数据。这样的话会保证我们微服务当中的请求链路不会卡死,而且,这样的话不会让用户在前台一直在等着。会有一个非常好的用户体验。

    接着就是我们的网关。Zuul。网关在我们项目当中充当的地位就是一个所有请求的入口。所有请求进来之后,首先通过网关有网关,根据路径儿去解析,然后转发到对应的微服务上,当然这个网关还充当了一个功能,就是一个鉴权功能,我们项目当中,登陆了之后,会给用户颁发一个token。用户在访问的时候,这个token会携带在请求头当中,经过我们网关时,网关会拦截取出token。验证token的真实性。验证通过之后才会访问到我们的微服务。这就是我们项目当中微服务具体使用的一些场景以及它的组件。

    服务注册和服务发现是什么意思,springcloud是如何实现的

    在微服务项目中,我们通常会用到服务之间的相互调用,我们通常在属性文件中进行所有的需要请求的微服务的地址端口等信息。随着越来越多的 服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会下架,而某些位置可 能会发生变化。手动更改属性可能会产生问题。 Eureka 提供了服务注册和服务发现的功能,服务注册是让所有微服务将自己的信息注册到注册中心,服务发现是让微服务可以拉取注册中心里的服务列表,方便结合feign进行远程调用,由于所有服务都在 Eureka 服务器上注册并通过调用 Eureka 服务器完成查找, 因此无需处理服务地点的任何更改和处理。

    展开全文
  • 什么使用服务发现

    2019-06-04 19:48:32
    什么使用服务发现? 想象一下,如果你在写代码调用一个有REST API或Thrift API的服务,你的代码需要知道一个服务实例的网络地址(IP地址和端口)。运行在物理硬件上的传统应用中,服务实例的网络地址相对静态的...
  • 什么要使用服务发现

    千次阅读 2018-03-01 16:40:40
    什么要使用服务发现?假设我们写的代码会调用 REST API 或者 Thrift API 的服务。为了完成一次请求,代码需要知道服务实例的网络位置(IP 地址和端口)。运行在物理硬件上的传统应用中,服务实例的网络位置相对...
  • kubernetes: 服务发现

    2019-10-12 16:27:42
    什么是服务发现: 服务发现有三个角色,服务提供者、服务消费者和服务中介。服务中介是联系服务提供者和服务消费者的桥梁。服务提供者将自己提供的服务地址注册到服务中介,服务消费者从服务中介那里查找自己想要的...
  • 对于服务注册和发现是什么意思,也可以使用另一个问题:Spring Cloud如何实现? 当我们开始一个项目的时候,我们通常需要对属性文件中...Eureka服务注册和服务发现可以在这种情况下提供帮助,由于所有服务都在Eu...
  • 服务发现与服务注册-Eureka

    千次阅读 2018-05-29 22:19:56
    什么是服务发现与服务注册 简单的来说就是一个微服务要调用另一个微服务,就必须知道这个微服务的地址及端口信息。采用一张注册表,注册上线可用的微服务及相关信息,微服务则从注册表上查找所需的其它微服务...
  • 微服务体系中,服务注册与服务发现是两个最核心的模块。服务A调用服务B时,需要通过服务发现模块找到服务B的IP和端口列表,而服务B的实例在启动时需要把提供服务的IP和端口注册到服务注册中心。一个典型的结构如下图...
  • 服务治理主要针对分布式服务框架的微服务,处理服务调用之间的关系、服务发布和发现、故障监控与处理,服务的参数配置、服务降级和熔断、服务使用率监控等。 需要服务治理的原因: 过多的服务 URL 配置困难 ...
  • 服务发现的理解: 1. 什么是服务发现? 3. 为什么需要服务发现? 4. 服务发现具备哪些关键特性? 5. 服务发现的经典机制有哪些? 6. 有什么解决方案? 7. 实际生产中如何选择?
  • 微服务中的服务发现

    千次阅读 2017-07-17 17:29:53
    什么是服务发现在介绍服务发现之前,先来介绍一下什么是微服务,所谓的微服务其实就是将一套软件拆分为多个服务,每个服务专注于一个功能点,然后将业务流程拆分为几个不同的服务之间的组合,从而实现高内聚低耦合的...
  • 什么是服务注册中心

    2019-09-20 13:49:00
    Eureka服务注册中心,我们先来看第一个内容,什么是服务注册中心,服务注册中心是服务实现服务化的 管理的核心组件,类似于目录... ... 服务注册中心的作用有两点,第一点是服务的注册,第二点是服务的发现,那么什么是服务...
  • 本文作者通过ZooKeeper与Eureka作为 Service发现服务(注:WebServices 体系中的UDDI就是个发现服务)的优劣对比,分享了Knewton在云计算平台部署服务的经验。本文虽然略显偏激,但是看得出Knewton在云平台方 面...
  • 分布式下的服务发现

    2018-10-11 10:03:27
    什么是服务发现 首先,服务发现中有三个角色:服务提供者、消费者、中介;以租房的过程为例:房东座位服务提供者,将房屋信息(服务地址)在中介机构注册登记;租房人在中介查找自己想要住的地址,然后根据地址所...
  • 什么是服务治理?

    2021-02-04 13:13:22
    以当下较为主流的微服务架构为线索,来阐释下什么是服务治理。 首先需要明确,不管是什么事物需要”治理“,那一定是该事物存在一定问题。比如环境治理。那么服务,或者说微服务为什么需要治理? 对于服务来说,...
  • 最简单的情况下:只有A,B两个服务,他们都有自己的IP地址,如果A调用B,那么需要在A中配置B的地址就可以了。 但是如果B的服务有多个,如下图: 在分布式系统中,多个自治的B并不共享主内存。因此B的服务不仅多,...
  • 无意间看见有博主推荐了一个网站,这个网站可以查看网站后台服务器是什么操作系统,很无聊吧(这位博主主要为了说明Linux操作系统的应用领域)。而我因为无聊,发出来玩的。 献上网址: 这个网址进去后长这样...
  • 什么是服务发现 在传统的系统部署中,服务运行在一个固定的已知的 IP 和端口上,如果一个服务需要调用另外一个服务,可以通过地址直接调用,但是,在虚拟化或容器话的环境中,服务实例的启动和销毁是很频繁的,服务...
  • 什么要使用服务发现? 传统的项目而言,服务器端的服务实例的网络地址相对固定的。而基于云端、现代化的微服务服务实例的网络地址往往动态更新的。由于服务器端的服务实例扩展、维护、升级,导致服务器端服务...
  • 服务发现 服务治理

    2020-02-18 17:34:47
    传统服务 vs 微服务 nginx 负载均衡策略 轮询 (配置文件的维护与更新) 服务发现 客户端的发现 服务端发现 服务的部署 更新 与扩容 ...什么是服务编排? 包括服务的部署 更新 扩容 messo docker swarm kuberbetes ...
  • 服务发现技术选型那点事儿

    千次阅读 2020-10-10 14:37:01
    引子——什么是服务发现 近日来,和很多来自传统行业、国企、政府的客户在沟通技术细节时,发现云原生所代表的技术已经逐渐成为大家的共识,从一个虚无缥缈的概念渐渐变成这些客户的下一个技术战略。自然,应用架构...
  • 一、什么是服务发现? 服务发现并没有怎样的高深莫测,它的原理再简单不过。只是市面上太多文章将服务发现的难度妖魔化,读者被绕的云里雾里,顿觉自己智商低下不敢高攀。 服务提供者是什么,简单点说就是一个HTTP...
  • Eureka-服务注册于发现

    千次阅读 2017-06-21 15:32:33
    2.什么是服务发现?服务发现就像聊天室一个,每个用户来的时候去服务器上注册,这样他的好友们就能看到你,你同时也将获取好友的 上线列表.在微服务中,服务就相当于聊天室的用户,而服务注册中心就像聊天室服务器一样,...
  • 什么是服务网格

    2018-11-13 19:24:33
    在从单体应用程序向分布式微服务架构的转型过程中...它的需求包括服务发现、负载均衡、故障恢复、指标收集和监控以及通常更加复杂的运维需求,例如 A/B 测试、金丝雀发布、限流、访问控制和端到端认证等。 A/B测试 ...
  • 许多公司都把它用于服务发现。但在云环境中,面对设备及网络故障时的恢复能力需要重点考虑的问题。因此,将应用部署在云上,就必须要预见到硬件故障、网络延迟以及网络分区等问题,进而构建出恢复能力强的系统。...
  •  在服务发现领域,ZooKeeper并不最佳的选择。原因可以从客户端和服务端两个方向进行分析。   客户端 ZK服务端集群的地址列表写死在客户端的,不支持动态变更; 不支持同机房优先策略; 没有针对服务端集群...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,264
精华内容 6,905
关键字:

什么是服务发现