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

19 | 如何使用服务路由?

读写分离
机房隔离
白名单和黑名单功能
排除某个服务节点
动态下发
配置中心管理
本地配置
脚本路由
条件路由
读写分离
流量切换
灰度发布
分组调用
思考题
服务路由的获取方式
服务路由的规则
服务路由的应用场景
如何使用服务路由?

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

专栏上一期,我给你讲解了常用的客户端负载均衡算法,它帮我们解决了服务消费者如何从众多可用的服务节点中选取一个最合适的节点发起调用的问题。但在业务中经常还会遇到这样的场景,比如服务 A 部署在北京、上海、广州三个数据中心,所有的服务节点按照所在的数据中心被分成了三组,那么服务 A 的消费者在发起调用时,该如何选择呢?这就是今天我要给你讲解的服务路由的问题。
那么什么是服务路由呢?我的理解是服务路由就是服务消费者在发起服务调用时,必须根据特定的规则来选择服务节点,从而满足某些特定的需求
那么服务路由都有哪些应用场景?具体都有哪些规则呢?

服务路由的应用场景

根据我的实践经验,服务路由主要有以下几种应用场景:
分组调用。一般来讲,为了保证服务的高可用性,实现异地多活的需求,一个服务往往不止部署在一个数据中心,而且出于节省成本等考虑,有些业务可能不仅在私有机房部署,还会采用公有云部署,甚至采用多家公有云部署。服务节点也会按照不同的数据中心分成不同的分组,这时对于服务消费者来说,选择哪一个分组调用,就必须有相应的路由规则。
灰度发布。在服务上线发布的过程中,一般需要先在一小部分规模的服务节点上先发布服务,然后验证功能是否正常。如果正常的话就继续扩大发布范围;如果不正常的话,就需要排查问题,解决问题后继续发布。这个过程就叫作灰度发布,也叫金丝雀部署。
流量切换。在业务线上运行过程中,经常会遇到一些不可抗力因素导致业务故障,比如某个机房的光缆被挖断,或者发生着火等事故导致整个机房的服务都不可用。这个时候就需要按照某个指令,能够把原来调用这个机房服务的流量切换到其他正常的机房。
读写分离。对于大多数互联网业务来说都是读多写少,所以在进行服务部署的时候,可以把读写分开部署,所有写接口可以部署在一起,而读接口部署在另外的节点上。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了服务路由的应用场景和规则,包括分组调用、灰度发布、流量切换和读写分离等常见情况。作者详细介绍了条件路由和脚本路由两种主要规则,并给出了具体的应用示例。通过条件路由,可以实现排除某个服务节点、白名单和黑名单功能、机房隔离以及读写分离等功能;而脚本路由则是基于脚本语言的路由规则,通过自定义脚本实现特定的路由逻辑。文章还探讨了服务路由的获取方式,包括本地配置、配置中心管理和动态下发,以及它们的实际应用场景和优先级。最后,作者提出了一个思考题,引发读者对于服务路由在实际业务场景中的应用进行思考和讨论。整体而言,本文通过详细的案例和解释,帮助读者了解了服务路由的基本概念和实际应用,为读者快速了解服务路由的作用和实际应用提供了有益的指导。

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

全部留言(17)

  • 最新
  • 精选
  • mgxian
    配置中心配置路由之后也是需要下发的 那这和动态下发方式不是重复了吗 有什么主要区别呢

    作者回复: 配置中心存储可能只是做一个集中存储的地方,客户端启动的时候才会从配置中心拉取配置。动态下发是客户端订阅了配置的更新,如果有变化,客户端就会拉取

    2018-10-04
    2
  • 莲花
    如果通过路由尽量将访问限定在同一个数据中心,如果同一个数据中心访问满了,怎么分流到另一个数据中心去呢?

    作者回复: 可以通过配置中心下发指令改变订阅的分组,比如一个分组承担70%,一个承担30%

    2018-10-04
    1
  • 宝爷
    用一个简单的路由规则,如果希望百分之一的用户体验新版本,将用户id取模100等于1的用户请求转发给新的服务器。验证后逐步扩大用户比例,最终达到全量。 这里有个问题想请教一下老师,用docker和k8s部署一个mysql的服务,如果这个服务可以弹性伸缩,且我们通过一个虚拟ip来连接这个服务,那么我的请求会按照k8s的负载均衡规则进行路由,我希望操作一个用户相关的请求,都到同一个数据库里面,不知道这个应该怎么操作。如果有多个服务,而且可以动态的增减,这里应该会碰到一堆的问题,如果老师有碰到类似的问题,这里想知道老师是怎么解决的。

    作者回复: 我理解这里主要是访问路由的问题,又想用k8s做到mysql的动态扩缩容,又想按照用户访问hash到固定数据库、我不知道k8s能否自定义数据访问路由,我们的做法没有使用k8s,自定义数据访问路由

    2018-10-04
    1
  • 波波安
    我们现在处理的方式是先圈定一批友好用户作为灰度白名单用户。对于这一批用户在登录时会写特定的cookie标识,访问时ng根据cookie标识做路由策略。将请求分发到升级好的灰度集群,验证新功能。
    2018-10-14
    40
  • ylw66
    老师好,Dubbo白名单和黑名单的例子有没有写反?
    2018-12-21
    2
    6
  • Cain
    答:可以考虑使用statefulset+headless service的方式,使用k8s内部的dns,比如pod1.svc.com方式直接访问这个pod 用一个简单的路由规则,如果希望百分之一的用户体验新版本,将用户id取模100等于1的用户请求转发给新的服务器。验证后逐步扩大用户比例,最终达到全量。 这里有个问题想请教一下老师,用docker和k8s部署一个mysql的服务,如果这个服务可以弹性伸缩,且我们通过一个虚拟ip来连接这个服务,那么我的请求会按照k8s的负载均衡规则进行路由,我希望操作一个用户相关的请求,都到同一个数据库里面,不知道这个应该怎么操作。如果有多个服务,而且可以动态的增减,这里应该会碰到一堆的问题,如果老师有碰到类似的问题,这里想知道老师是怎么解决的。
    2019-02-15
    4
  • 拉欧
    可以通过网关配置规则,将特定的用户导流到某一数据中心,然后通过金丝雀发布升级这一数据中心的服务
    2018-10-09
    4
  • 酱了个油
    注册中心也可以管理访问的服务名单,这和服务路由有什么区别呢?是不是一般只是帮助服务重新路由注册中心?
    2018-10-20
    2
  • 俯瞰风景.
    服务路由的目的是为了实现某些特殊的服务调用,“特殊”体现在针对某些特定服务消费者的服务调用必须通过某些特定的服务提供者。 应用场景一般是:读写分离、机房隔离、灰度发布、白名单和黑名单、排除某个服务节点等。 服务路由规则可以存放在服务消费者的本地缓存中,为了方便管理,也会在配置中心统一管理;在同一维护的时候,一般会在服务治理平台修改规则然后同步到配置中心。消费者通过消费订阅的方式下拉最新的服务路由规则到本地缓存中。
    2021-10-08
    1
  • 🤔
    istio:https://istio.io/latest/docs/tasks/traffic-management/request-routing/#route-based-on-user-identity
    2022-04-28
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部