服务注册中心原理

在分布式系统里的注册中心。原理是将部署服务的机器地址记录到注册中心,服务消费者在有需求的时候,只需要查询注册中心,输入提供的服务名,就可以得到地址,从而发起调用。

在微服务架构下,主要有三种角色:服务提供者(RPC Server)服务消费者(RPC Client)服务注册中心(Registry),三者的交互关系请看下面这张图:

RPC Server 提供服务,在启动时,根据配置文件指定的服务注册中心配置信息,向 Registry 注册自身的服务路由,并向Registry定期发送心跳汇报存活状态。

RPC Client 调用服务,在启动时,根据配置文件指定的服务注册中心配置信息,向 Registry 订阅服务,把Registry返回的服务节点列表缓存在本地内存中,并与 RPC Sever 建立连接。

RPC Server 节点发生变更时,Registry会同步变更,RPC Client 感知后会刷新本地内存中缓存的服务节点列表。

RPC Client 从本地缓存的服务节点列表中,基于负载均衡算法选择一台 RPC Sever 发起调用。

提示

  1. 对于一个微服务应用来说,在集群中,它既可以作为RPC Sever,也可能作为RPC Client,主要是看在rpc通信过程中,是提供服务的一方,还是调用服务的一方。

服务路由

在lms框架中,服务提供者将会以服务路由为单位向服务注册中心注册路由信息。每一个被实现了的应用服务接口方法(服务条目)都会生成一条服务路由

服务路由的格式如下:

{
"serviceDescriptor":{
"id":"IAnotherApplication_IAnotherAppService_DeleteTwo_name",
"serviceProtocol":0,
"metadatas":{ }
},
"addressDescriptors":[
{
"address":"172.19.16.1",
"port":2202,
"serviceProtocol":0
}
],
"timeStamp":1623254897
}

服务路由主要由三部分组成,分别为:服务描述符(serviceDescriptor)地址描述符(addressDescriptors)时间戳(timeStamp)

服务描述符(serviceDescriptor)

每一个服务条目对应生成一条服务路由,服务路由通过服务描述符标识其唯一性。服务描述符由如下三部分组成:

字段 说明 备注
id 服务路由(描述符)Id 具有唯一性; 生成规则:通过服务条目对应的方法的完全限定名 + 参数名
serviceProtocol 服务通信协议 rpc通信框架中,采用的通信协议
metadatas 其他元数据 可以为服务路由写入(k,v)格式的元数据

注意

    1. 在一个微服务集群中,服务路由具有唯一性。也就是说,不允许在同一个微服务集群中, 不同微服务应用中不允许出现两个一模一样的方法(应用服务接口的完全限定名和方法名、参数名一致);

地址描述符(addressDescriptors)

地址描述符是一个数组,用于存放该服务路由(服务条目)存在的微服务应用实例的IP地址信息。

字段 说明 备注
address ip地址 微服务应用实例的IP地址
port rpc通信端口号 微服务应用通信中指定的rpc端口号
serviceProtocol 服务通信协议 rpc通信框架中,采用的通信协议

warning 注意

    1. 只有被实现的应用服务接口才会生成服务路由。
    1. 在微服务应用向服务注册中心注册路由时,首先会从服务注册中心获取最新的路由信息,在内存中更新该服务路由的服务路由地址(将该微服务应用的地址更新到地址描述符中),并将更新后的服务路由地址注册到服务注册中心,其他微服务应用根据从服务注册中心订阅到更新后的服务路由信息后,会将服务路由信息更新到微服务的内存中缓存起来。
    1. 为防止同一个微服务应用同时伸缩服务实例,在微服务应用获取或是注册服务路由的过程中会加分布式锁。

时间戳

timeStamp是指向服务注册中心更新服务路由的最后时间。

使用zookeeper作为服务注册中心

当前,lms支持使用zookeeper作为服务注册中心。

lms支持为微服务集群配置多个服务注册中心,您只需要在配置服务注册中心的链接字符串registrycenter.connectionStrings中,使用分号;就可以指定微服务框架的多个服务注册中心。

为方便以后扩展其他服务作为服务注册中心,您需要在为微服务应用指定配置时,显式的指定微服务注册中心类型为(registrycenter.registryCenterType):Zookeeper

为微服务配置服务注册中心如下所示:


registrycenter: // 服务注册中心配置节点
connectionStrings: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183;127.0.0.1:2184,127.0.0.1:2185,127.0.0.1:2186 // 服务配置中心链接
registryCenterType: Zookeeper // 注册中心类型
connectionTimeout: 1000 // 链接超时时间(单位:ms)
sessionTimeout: 2000 // 会话超时时间(单位:ms)
operatingTimeout: 4000 // 操作超时时间(单位:ms)
routePath: /services/serviceroutes

除此之外,使用zookeeper作为服务注册中心,还必须要依赖ZookeeperModule模块。

注意

  • 默认启动服务模块(NormHostModuleWebHostModuleWsHostModule)均已经依赖ZookeeperModule模块。

开源地址与文档

github: https://github.com/liuhll/lms

gitee: https://gitee.com/liuhll2/lms

开发者文档: http://docs.lms-fk.com/

加入我们

qq群: 934306776

lms框架服务注册中心的更多相关文章

  1. silky微服务框架服务注册中心介绍

    目录 服务注册中心简介 服务元数据 主机名称(hostName) 服务列表(services) 终结点 时间戳 使用Zookeeper作为服务注册中心 使用Nacos作为服务注册中心 使用Consul ...

  2. 使用Spring Cloud搭建服务注册中心

    我们在之前的博客中已经介绍过阿里的分布式服务框架dubbo[Linux上安装Zookeeper以及一些注意事项][一个简单的案例带你入门Dubbo分布式框架],但是小伙伴们应该也看到了,阿里的dubb ...

  3. 服务注册中心之ZooKeeper系列(一)

    一.服务注册中心介绍 分布式服务框架部署在多台不同的机器上.例如服务A是订单相关的处理服务,服务B是订单的客户的相关信息服务.此时有个需求需要在服务A中获取订单客户的信息.如下图: 此时就面临以下几个 ...

  4. spring cloud(二)服务(注册)中心Eureka

    Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...

  5. springboot+cloud 学习(一)高可用服务注册中心(Eureka)

    先说说Eureka Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringClo ...

  6. 服务注册中心Eureka vs Zookeeper vs Consul

    前言 在现在云计算和大数据快速发展的今天,业务快速发展和变化.我们以前的单一应用难以应对这种快速的变化, 因此我们需要将以前单一的大应用不断进行差分,分成若干微小的应用或者服务,这就是微服务的思想.但 ...

  7. SpringCloud学习(3)——Eureka服务注册中心及服务发现

    Eureka概述: Eureka是Netflix的一个子模块, 也是核心模块之一.Eureka是一个基于REST的服务, 用于定位服务, 以实现云端中间层服务发现和故障转移.服务注册与发现对于微服务框 ...

  8. SpringCloud IDEA 教学 (一) Eureka的简介与服务注册中心的建立

    写在开头 SpringCloud进来成为业界排名靠前的微服务框架,最核心功能就是搭建微服务,并在此基础上衍生出一系列功能,如断路器(Hystrix).断路监控.管理配置.Zuul.OAuth2等功能. ...

  9. Spring cloud Eureka 服务治理(搭建服务注册中心)

    服务之类是微服务架构中最为核心的基础模块,它主要用来实现各个微服务实例的自动化注册和发现. 1. 服务注册 在服务治理框架中,通常会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机. ...

随机推荐

  1. golang:面向对象总结

    所谓的面向对象其实就是找一个专门做这个事的人来做,不用关心具体怎么实现的.所以说,面向过程强调的是过程,步骤.而面向对象强调的是对象,也就是干事的人. Go语言:面向对象语言特性 方法 嵌入 接口 没 ...

  2. [Java]数据分析--聚类

    距离度量 需求:计算两点间的欧几里得距离.曼哈顿距离.切比雪夫距离.堪培拉距离 实现:利用commons.math3库相应函数 1 import org.apache.commons.math3.ml ...

  3. [Java] 数据库编程JDBC

    背景 持久化:把Java对象保存在硬盘中 序列化:将对象转换为二进制对象,再保存 保存在关系型数据库中 Object-Relational Mapping(对象-关系映射框架,或ORM框架):把对象属 ...

  4. GCC链接时库顺序问题

    GCC或G++在编译链接时,如果命令行中含有库,则要特别注意了.根据<C专家编程>5.3节中的提示,GCC在链接时对命令行时的处理顺序是从左到右.证据是GCC的MAN: -l librar ...

  5. USB历代标准及接口发展

    USB历代标准及接口发展 浊酒一杯家万里关注 2017.11.20 14:54:21字数 3,684阅读 2,514 文章转自中关村在线 1,多功能正反插 苹果让大众认识Type-C "Ty ...

  6. Linux 使用命令发送邮件

    1.关闭本机的sendmail服务或者postfix服务 #执行下面的命令,关闭sendmail和postfix服务 #sendmial [root@db-backup ~]# service sen ...

  7. DDD划分领域、子域,核心域,支撑域的目的

    名词解释 在DDD兴起的原因以及与微服务的关系中曾举了一个研究桃树的例子,如果要研究桃树,将桃树根据器官分成根.茎.叶.花.果实.种子,这每一种器官都可以认为是一个研究领域,而领域又有更加具体的细分, ...

  8. 第三方跨平台进程和系统监控库gopsutil

    gopsutil psutil是一个跨平台进程和系统监控的Python库,而gopsutil是其Go语言版本的实现.本文介绍了它的基本使用. Go语言部署简单.性能好的特点非常适合做一些诸如采集系统信 ...

  9. 在gitlab网页上合并分支

    在gitlab网页上合并分支 使用gitlab网页将代码合并分 下面将dev分支代码合并至master 1.点击request merge 2.源分支为当前分支,目标分支默认为master,确认无误, ...

  10. Oracle的Rman差异增量备份

    所谓增量备份,顾名思义即是每次备份操作那些发生了"变化"的数据块.在RMAN增量备份中有两种:Differential(差异备份)和Cumulative(增量备份)方式.由于需求这 ...