首页 > 其他分享 >四、《微服务:从设计到部署》--服务发现

四、《微服务:从设计到部署》--服务发现

时间:2022-08-16 19:01:01浏览次数:49  
标签:服务 中心 -- 部署 实例 注册 使用 客户端

客户端发现(client-side discovery)

当使用客户端发现模式时,客户端负责确定可用服务实例的网络位置和请求负载均衡。客户端查询服务注册中心(service registry),它是可用服务实例的数据库。之后,客户端利用负载均衡算法选择一个可用的服务实例并发出请求。

服务实例的网络位置在服务注册中心启动时被注册。当实例终止时,它将从服务注册中心中移除。通常使用心跳机制周期性地刷新服务实例的注册信息。

该模式相对比较简单,除了服务注册中心,没有其他移动部件。此外,由于客户端能发现可用的服务实例,因此可以实现智能的、特定于应用的负载均衡决策,比如使用一致性哈希。该模式的一个重要缺点是它将客户端与服务注册中心耦合在一起。你必须为你使用的每种编程语言和框架实现客户端服务发现逻辑。

服务端发现(server-side discovery)

该模式的一大的优点是其把发现的细节从客户端抽象出来。客户端只需向负载均衡器发出请求。这消除了为服务客户端使用的每种编程语言和框架都实现发现逻辑的必要性。另外,如上所述,一些部署环境免费提供此功能。然而,这种模式存在一些缺点。除非负载均衡器由部署环境提供,否则你需要引入这个高可用系统组件,并进行设置和管理。

服务注册中心

它是一个包含了服务实例网络位置的数据库。服务注册中心必须是高可用和最新的。虽然客户端可以缓存从服务注册中心获得的网络位置,但该信息最终会过期,客户端将无法发现服务实例。因此,服务注册中心使用了复制协议(replication protocol)来维护一致性的服务器集群组成。Netflix Eureka 是一个很好的服务注册中心范例。它提供了一个用于注册和查询服务实例的 REST API。服务实例使用 POST 请求注册其网络位置。它必须每隔 30 秒使用 PUT 请求来刷新其注册信息。通过使用 HTTP DELETE 请求或实例注册超时来移除注册信息。正如你所料,客户端可以使用 HTTP GET 请求来检索已注册的服务实例。

服务注册方式

  1. 1.    自注册模式
  • 当使用自注册模式时,服务实例负责在服务注册中心注册和注销自己。此外,如果有必要,服务实例将通过发送心跳请求来防止其注册信息过期。
  • 该方式的一个很好的范例就是 Netflix OSS Eureka 客户端。Eureka 客户端负责处理服务实例注册与注销的所有方面。实现了包括服务发现在内的多种模式的 Spring Cloud 项目可以轻松地使用 Eureka 自动注册服务实例。你只需在 Java Configuration 类上应用 @EnableEurekaClient 注解即可。
  • 自注册模式有好有坏。一个好处是它相对简单,不需要任何其他系统组件。然而,主要缺点是它将服务实例与服务注册中心耦合。你必须为服务使用的每种编程语言和框架都实现注册代码。
  • 将服务与服务注册中心分离的替代方法是第三方注册模式。
  1. 2.    第三方注册模式
  • 当使用第三方注册模式时,服务实例不再负责向服务注册中心注册自己。相反,该工作将由被称为服务注册器(service registrar)的另一系统组件负责。服务注册器通过轮询部署环境订阅事件来跟踪运行实例集的变更情况。当它检测到一个新的可用服务实例时,它会将该实例注册到服务注册中心。此外,服务注册器可以注销终止的服务实例。
  • 第三方注册模式同样有好有坏。一个主要的好处是服务与服务注册中心之间解耦。你不需要为开发人员使用的每种编程语言和框架都实现服务注册逻辑。相反,仅需要在专用服务中以集中的方式处理服务实例注册。
  • 该模式的一个缺点是,除非部署环境内置,否则你同样需要引入这样一个高可用的系统组件,并进行设置和管理。

总结

  1. 在微服务应用中,运行的服务实例集会动态变更。实例有动态分配的网络位置。因此,为了让客户端向服务发出请求,它必须使用服务发现机制。
  2. 服务发现的关键部分是服务注册中心。服务注册中心是一个可用服务实例的数据库。服务注册中心提供了管理 API 和查询 API 的功能。服务实例通过使用管理 API 从服务注册中心注册或者注销。系统组件使用查询 API 来发现可用的服务实例。
  3. 有两种主要的服务发现模式:客户端发现与服务端发现。在使用了客户端服务发现的系统中,客户端查询服务注册中心,选择一个可用实例并发出请求。在使用了服务端发现的系统中,客户端通过路由进行请求,路由将查询服务注册中心,并将请求转发到可用实例。
  4. 服务实例在服务注册中心中注册与注销有两种主要方式。一个是服务实例向服务注中心自我注册,即自注册模式。另一个是使用其他系统组件代表服务完成注册与注销,即第三方注册模式。
  5. 在某些部署环境中,你需要使用如 Netflix Eureka 、ectd 或 Apache ZooKeeper 等服务注册中心来设置你自己的服务发现基础设施。在其他部署环境中,服务发现是内置的,例如,Kubernetes 和 Marathon,可以处理服务实例的注册与注销。他们还在每一个扮演服务端发现路由角色的集群主机上运行一个代理。
  6. 一个 HTTP 反向代理和负载均衡器(如 NGINX)也可以作为服务端发现负载均衡器。服务注册中心可以将路由信息推送给 NGINX,并调用优雅配置更新,例如,你可以使用 Consul Template。NGINX Plus 支持额外的动态重新配置机制 — 它可以使用 DNS 从注册中心中提取有关服务实例的信息,并为远程重新配置提供一个 API。

 

 

标签:服务,中心,--,部署,实例,注册,使用,客户端
From: https://www.cnblogs.com/l-926/p/16592613.html

相关文章

  • 基础长链剖分
    基础长链剖分基本上整个互联网上长链剖分都是使用CF1009F和树上\(k\)级祖先两题。本篇也无法避免qwq,因为这两题确实经典。定义定义重儿子表示其子节点中子树深度......
  • Relocation R_X86_64_32 against `.rodata' can not be used when making a PIE objec
    1、一种情况是由于gcc默认使用-fPIE,所以要求链接的库也必须由-fPIE库。解决方法是在编译是加入 -no-pie2、还有一种情况是没有吧上次make生成的文件清理干净。导致更改......
  • omc.
    OMC099(4b)D因为\((abc)^{\dfrac13}\le\dfrac{a+b+c}3\)(基本不等式),将\(a=xy,b=yz,c=xz\)代入得到\((xyz)^{\dfrac23}\le\dfrac{xy+yz+xz}3=\langle......
  • 【MySQL】分组GROUP BY
    目录1.GROUPBY分组使用2.使用多个列分组3.GROUPBY中使用WITHROLLUP1.GROUPBY分组使用例:求员工表中各部门的平均工资使用GROUPBY子句将数据按部门分SELECT depa......
  • 动手实验查看MySQL索引的B+树的高度
    一:简化几个概念:h:统称索引的高度;h1:聚簇索引的高度;h2:二级辅助索引的高度;k:中间结点的扇出系数。二:索引结构叶子节点其实是双向链表,而叶子节点内的行数据是单向链表,该......
  • xpath
    xpath1、xpath安装与使用安装安装lxml库pipinstalllxml-ipip源2、解析流程与使用解析流程实例化一个etree的对象,把即将被解析的页面源码加载到该对象调......
  • top命令常用方法
    https://feichen.blog.csdn.net/article/details/104562895?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommend......
  • 如何在Ubuntu系统中安装和卸载Docker
    简介本文简单介绍如何在Ubuntu系统中安装和卸载Docker。先决条件系统要求安装Docker需要以下Ubuntu版本之一的64位版本:UbuntuJammy22.04(LTS)UbuntuImpish21......
  • 如何解决生产环境MySQL的死锁问题
    生产问题云服务上的生产环境中发现我们数据库出现了一个异常,异常堆栈信息如下:Errorupdatingdatabase.Cause:com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRol......
  • 浅拷贝和深拷贝
    浅拷贝     functioncopy(obj){      letnewobj={}     for(letiinobj){        newobj[i]=obj[i]  ......