服务注册中心原理

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

在微服务架构下,主要有三种角色:服务提供者(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模块。

注意

  • 默认启动服务模块(NormHostModule、WebHostModule、WsHostModule)均已经依赖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. TCP 中的两个细节点

    TCP 超时和重传 没有永远不出错误的通信,这句话表明着不管外部条件多么完备,永远都会有出错的可能.所以,在 TCP 的正常通信过程中,也会出现错误,这种错误可能是由于数据包丢失引起的,也可能是由于数 ...

  2. Flutter 2.2 更新详解

    Flutter 2.2 版已正式发布!要获取新版本,您只需切换到 stable 渠道并更新目前安装的 Flutter,或前往 flutter.cn/docs/get-started 从头开始安装. 虽 ...

  3. [Scala] 面向对象

    类定义 当属性是private时,scala会自动为其生成get和set方法 只希望scala生成get,不生成set,可定义为常量 不生成get和set方法,使用private[this]关键字 1 ...

  4. 面向对象——python核心编程第二版

    类与实例 类与实例相互关联着:类是对象的定义,而实例是"真正的实物",它存放了类中所定义的对象的具体信息. class MyData(object): pass >>& ...

  5. cento 7使用minicom串口调试工具

    cento 7使用minicom串口调试工具   因为要使用串口配置设备,所以考虑要用串口管理软件,windows下比较容易了,直接用超级终端也好,用CRT也可以,CentOS系统稍微麻烦一点,前几天 ...

  6. 使用Wok管理kvm虚拟机

    [Centos7.4] !!!测试环境我们首关闭防火墙和selinux [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# ...

  7. IT菜鸟之计算机硬件

    现在的人们几乎无时无刻都会碰到计算机!不管是桌面计算机.笔记本电脑.平板计算机.智能型手机等等,这些东西都算计算机.虽然接触的怎么多,但是,我们一般很少会专门了解计算机内部的构成,下面就是自己在听课结 ...

  8. docker私有仓库搭建及使用

      1.下载官方镜像 sudo docker pull registry 下载完成后,docker images可以查看到pull下来的镜像registry 2.启动registry容器,用于提供私有 ...

  9. IDEA debug ConcurrentLinkedQueue时抽风

    1. 介绍 如标题所见,我在使用IDEA debug ConcurrentLinkedQueue的Offer方法时,发生了下面的情况. 代码如下: ConcurrentLinkedQueue<s ...

  10. 基于Jittor框架实现LSGAN图像生成对抗网络

    基于Jittor框架实现LSGAN图像生成对抗网络 生成对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的 ...