高并发系统设计 40 问
唐扬
美图公司技术专家
49013 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
高并发系统设计 40 问
15
15
1.0x
00:00/00:00
登录|注册

24 | 注册中心:分布式系统如何寻址?

高成本和延迟
RPC服务端统一端口开放
变更内容推送给客户端
服务地址存储
优势
实现方式
改造为心跳模式
问题
注册中心功能
注册中心组件选择
使用注册中心
RPC服务端上线无法提前摘除流量
服务器故障时的配置修改和重启
紧急扩容时的配置修改和重启
增加保护策略
Bug导致服务节点摘除
心跳机制
主动探测
解决方案
问题
节点保护策略
心跳机制的意义
注册中心的重要性
服务治理的含义
比喻
通知风暴问题及解决
注册中心故障案例
解决思路
问题与解决方案
服务发现概念
思考时间
课程小结
服务治理
服务状态管理
服务注册与发现
注册中心

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

你好,我是唐扬。
上一节课,我带你了解了 RPC 框架实现中的一些关键的点,你通过 RPC 框架,能够解决服务之间跨网络通信的问题,这就完成了微服务化改造的基础。
但是在服务拆分之后,你需要维护更多的细粒度的服务,而你需要面对的第一个问题就是如何让 RPC 客户端知道服务端部署的地址。这就是我们今天要讲到的服务注册与发现的问题。

你所知道的服务发现

服务注册和发现不是一个新的概念,你在之前的实际项目中也一定了解过,只是你可能没怎么注意罢了。比如说,你知道 Nginx 是一个反向代理组件,那么 Nginx 需要知道应用服务器的地址是什么,这样才能够将流量透传到应用服务器上,这就是服务发现的过程。
那么 Nginx 是怎么实现的呢?它是把应用服务器的地址配置在了文件中。
这固然是一种解决的思路,实际上,我在早期的项目中也是这么做的。那时,项目刚刚做了服务化拆分,RPC 服务端的地址就是配置在了客户端的代码中,不过,这样做之后出现了几个问题:
首先在紧急扩容的时候,就需要修改客户端配置后,重启所有的客户端进程,操作时间比较长;
其次,一旦某一个服务器出现故障时,也需要修改所有客户端配置后重启,无法快速修复,更无法做到自动恢复;
最后,RPC 服务端上线无法做到提前摘除流量,这样在重启服务端的时候,客户端发往被重启服务端的请求还没有返回,会造成慢请求甚至请求失败。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了分布式系统中的服务注册与发现问题,着重介绍了注册中心的概念及其作用。作者首先提到了传统的服务发现方式存在的问题,随后详细阐述了注册中心的作用,包括服务地址存储、动态变更服务节点、优雅关闭等功能。此外,文章还涉及了服务状态管理的问题,介绍了主动探测和心跳模式两种解决思路,并分享了实际项目中的教训和解决策略。作者还提到了注册中心可能出现的通知风暴问题,并给出了解决方案。最后,文章将服务注册与发现比喻为服务治理中的一环,通过对比喻的方式帮助读者理解服务治理的重要性。整体而言,本文内容丰富,涵盖了服务注册与发现的方方面面,对于理解分布式系统中的服务注册与发现问题具有很高的参考价值。 在微服务架构中,注册中心扮演着重要角色,实现了服务的注册和发现,并解决了动态扩缩容、故障恢复和优雅关闭等问题。文章还介绍了心跳机制和保护策略,强调了注册中心在整体架构中的关键地位。通过对比喻的方式,文章帮助读者理解了服务治理的重要性。总的来说,本文内容丰富,对于理解分布式系统中的服务注册与发现问题具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《高并发系统设计 40 问》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(38)

  • 最新
  • 精选
  • 👽
    服务注册和发现的核心,其实就是——中间件。 引入了一个注册中心的中间件,来统一管理 服务端 和 客户端。 采用的保证服务端正常运行的手段是——心跳机制。 定时向注册中心发送心跳包表明自己运行正常。

    作者回复: 👍

    2019-11-25
    2
    14
  • 约书亚
    其实我觉得你们自研的注册中心应该进一步学习eureka,做成分AZ部署的。自建机房和云是两个AZ,每个AZ一个注册中心,每个注册中心自己独享一个redis。二者互相同步,通过一些机制保证同步不会陷入循环,以及旧版本数据不会覆盖新版本的。

    作者回复: 现在存储已经改成raft协议的实现了

    2019-11-18
    5
  • 旅途
    老师你好 rpc节点向注册中心发送心跳包是通过什么方式呢

    作者回复: 我之前的项目是注册中心提供http接口

    2019-12-01
    4
  • xuanyuan
    还有注册中心是 cp 模式还是 ap 模式

    作者回复: 有cp,也有ap,我推荐ap

    2020-03-22
    2
    3
  • 常见的注册中心有zookeeper,etcd,eureka,注册中心的两个基本功能: 1、存储服务提供者的地址 2、当服务提供者发生变化时,将变化通知客户端

    作者回复: 是的

    2020-03-08
    3
  • 树洞老人
    醍醐灌顶!

    作者回复: 能有帮助就好~

    2019-12-21
    3
  • sami
    个人理解注册中心的目的是为了提高可用性和可扩展性,可以不用停机来动态进行服务的发布和拆除。

    作者回复: 可以这么说吧,是他的一个重要作用

    2020-03-19
    2
  • Keith
    关于文中提到的通过配置文件来实现服务发现的问题(扩容,服务故障修复,平滑重启), 对于其他服务可能存在, 但是对于Nginx, 它有reload指令来"热重启"服务, 有健康检查以及故障移除机制, 所以这些对Nginx来说不是问题吧?

    作者回复: 算是吧,不过高并发下 reload会有性能损耗

    2019-11-23
    2
  • Alex Liu
    老师可以说一下注册中心集群怎么考虑搭建吗?理论上注册中心承载了大量的请求(30秒/台),需要多少台注册中心能够支撑上百台的服务端?

    作者回复: 一般十台之内就好了

    2020-03-26
    2
    1
  • xiaochao321
    道路交通这个比喻太形象了,很不错 街道新增了一条道路,通知给各个车辆,注册中心的注册和发现 监控每个道路的车辆运行情况 服务的监控治理 平衡每个道路的车辆数 需要交警的协调 服务的负载均衡 道路出现拥堵或者维修 服务的熔断引流 调查道路拥堵的原因 分布式的追踪

    作者回复: 谢谢🙏

    2020-06-24
收起评论
显示
设置
留言
38
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部