从 0 开始学微服务
胡忠想
微博技术专家
64643 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 43 讲
开篇词 (1讲)
结束语 (1讲)
从 0 开始学微服务
15
15
1.0x
00:00/00:00
登录|注册

05 | 如何注册和发现服务?

Watcher机制
ZooKeeper的长连接和会话超时控制机制
数据版本
znode
分布式一致性协议
ZooKeeper集群
服务变更查询接口
服务订阅接口
心跳汇报接口
服务反注册接口
服务注册接口
异地多活和数据一致性
分布式集群部署
注册中心的关键作用
白名单机制
服务状态变更通知
服务健康状态检测
目录存储
集群部署
注册中心API
交互关系图
三种角色:服务提供者、服务消费者、服务注册中心
总结
注册中心实现方式
注册中心原理
思考题
注册中心的原理和实现方式
如何注册和发现服务?
文章

该思维导图由 AI 生成,仅供参考

专栏上一期,我给你介绍了服务发布和引用常用的三种方式:RESTful API、XML 配置以及 IDL 文件。假设你已经使用其中一种方式发布了一个服务,并且已经在一台机器上部署了服务,那我想问你个问题,如果我想调用这个服务,我该如何知道你部署的这台机器的地址呢?
这个问题就跟我想去吃肯德基一样,我可以去谷歌地图上搜索肯德基,然后谷歌地图会返回所有的肯德基店面的地址,于是我选择距离最近的一家去吃。这里面谷歌地图就扮演了一个类似注册中心的角色,收录了所有肯德基店面的地址。
同理,我想知道这台服务器的地址,那是不是可以去一个类似“谷歌地图”的地方去查呢?是的,在分布式系统里,就有一个类似的概念,不过它的名字可不是叫什么地图,而是叫注册中心。但原理和地图其实差不多,就是将部署服务的机器地址记录到注册中心,服务消费者在有需求的时候,只需要查询注册中心,输入提供的服务名,就可以得到地址,从而发起调用。
下面我来给你详细讲解下注册中心的原理和实现方式

注册中心原理

在微服务架构下,主要有三种角色:服务提供者(RPC Server)、服务消费者(RPC Client)和服务注册中心(Registry),三者的交互关系请看下面这张图,我来简单解释一下。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何注册和发现服务的相关内容。在微服务架构下,服务提供者、服务消费者和注册中心是三种主要角色。注册中心的实现涉及注册中心API、集群部署、目录存储、服务健康状态检测、服务状态变更通知和白名单机制等问题。注册中心在实现服务化中扮演着关键角色,通过分布式集群部署来保证高可用性,并且需要解决数据一致性等问题。读者可以通过本文了解注册中心的原理和实现方式,以及与传统DNS实现服务发现的不同之处。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学微服务》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(52)

  • 最新
  • 精选
  • oddrock
    1. 注册中心的服务注册和发现都是基于API的,可以自动化注册与发现,dns则是人工注册。这样也导致前者实时性、容错性好于后者。 2. 注册中心可以注册http、rpc等各种服务,dns只能注册http服务 3. 注册中心对已注册的服务会有主动的、自动化的健康检查机制,dns没有。 4. 注册中心一般是一级分布式的,dns则是多级架构,例如根域名服务器、权威域名服务器等 5. 注册中心的安全机制相对dns弱一些,毕竟是内部使用。

    作者回复: 总结的不错

    2018-09-01
    149
  • snakorse
    不同意某楼的观念,dns同样也可以用于非http服务的,我觉得dns相较于zk这样的注册中心,劣势在于1. dns的维护管理比较麻烦,甚至需要手工配置 2.dns更新后生效有延迟 3. 客户端一般只能同时连接到一个server ip,无法做请求的负载均衡,而注册中心的方式通常客户端会与所有server建立连接形成连接池,从而在调用端实现请求的负载均衡

    作者回复: 理解很深刻👍

    2018-09-01
    91
  • 注册中心采用consul,注册通过docker registrator自动注册反注册、健康检查,服务发现采用consul_template nginx的grpc代理,业务代码不需要关注注册中心,这种模式业务耦合行就非常小了,只需要给业务知晓nginx即可。

    作者回复: 专栏有一讲开源注册中心选型里会提到你说的这种应用外注册的方式,特别是适合容器化的应用,业务不需要引入注册中心SDK

    2018-09-01
    21
  • LinkMaq
    其实dns最大的劣势是不能实现端口级别的服务发现

    作者回复: 是,只能做到ip级别

    2018-11-06
    2
    16
  • 包子
    其实我想说,zk并不合适做注册中心,注册中心应该是一个AP的系统

    作者回复: 对 专栏后面会详细分析

    2018-09-12
    2
    9
  • 爪哇夜未眠
    老师好,请问zookeeper和eureka作为注册中心的区别呢

    作者回复: 专栏后面有一节会讲,简单说下zk注重强一致性,在网络分区的情况下就不可用了,而eureka注重可用性,即使网络分区了,数据有短暂不一致,也要可用

    2018-09-02
    2
    7
  • 技术修行者
    可以列举一下业界常用的服务发现组件吗?它们之间有什么优劣?

    作者回复: 后面有一节专门讲zk、eureka、consul

    2018-09-01
    3
    3
  • 花生
    如果网络不稳,服务提供者频繁掉线,重新上线,注册中心频繁向服务消费者通知服务列表变更,这样会否导致系统崩溃?

    作者回复: 注册中心如何防止网络抖动引起的问题,专栏后面有讲

    2018-12-12
    2
  • 飞天的科技猪
    很棒的文章,我想如果用rabbitMQ,topic 加上binding 实现consumer的注册而且web的管理也提供了存活的查询,service routing也有rabbitMQ负责了,这个架构有什么缺陷吗?

    作者回复: 主要是rabbitMQ主要用作消息队列,不适合用来持久化存储服务信息吧,数据一致性的问题怎么解决的

    2018-09-06
    1
  • 金hb.Ryan 冷空氣駕到
    注册中心和dns的区别应该在数据模型和推送机制上,注册中心能够更灵活例如分组、版本控制

    作者回复: 可以说注册中心更适合现代架构,灵活可定制

    2018-09-02
    1
收起评论
显示
设置
留言
52
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部