当前位置: 首页 > news >正文

第3章通用的服务可用性治理手段——3.1 微服务架构与网络调用

当某个业务从单体服务架构转变为微服务架构后,多个服务之间会通过网络调用形式形成错综复杂的依赖关系。以负责展示用户主页的个人页服务为例,为了拼装出完整的用户主页,个人页服务需要对多个其他微服务发起RPC请求,如图3-1所示。

image-20250218000001616

  1. 从用户信息服务中获取用户昵称、头像、个性签名等用户基础信息。
  2. 从地理位置服务中获取用户活跃IP地址的归属国家和省市信息。
  3. 从内容列表服务中获取用户已发布内容的列表。而内容列表服务要进一步从计数服务中获取用户发布的内容数、点赞总数,并从内容服务中获取每条内容的具体信息,如文本、图片、发布时间、点赞数、评论数、转发数等,其中后三者又需要内容服务继续从计数服务中获取。
  4. 从关系服务中获取用户与请求发起者之间的关系,并进一步从计数服务中获取用户的关注数和粉丝数。

我们可以看到,在微服务架构中,一个微服务正常工作依赖它与其他微服务之间的多级网络调用,这是微服务架构与单体服务架构最典型的区别。

但网络是脆弱的,RPC请求有较大的概率会遇到超时、抖动、断开连接等各种异常情况,这些都会直接影响微服务的可用性。比如个人页服务在调用用户信息服务时发生网络超时,由于无法获取到用户基础信息,所以会使得个人页服务无法正常对外提供服务。

当微服务A是微服务B的调用方时,我们称B是A的下游服务,而A是B的上游服务。比如图3-1中的内容列表服务是个人页服务的下游服务,内容列表服务、内容服务、关系服务是计数服务的上游服务。一个微服务的上游服务和下游服务都会影响它的服务质量。以内容列表服务为例,如果个人页服务(上游服务)向内容列表服务发起大量网络调用,内容列表服务可能会因为承受超过此时处理能力的请求量而被打垮;如果内容服务(下游服务)的服务质量不佳,内容列表服务总是无法获取到用户内容数据,那么服务的可用性也会随之下降。

在微服务架构中,为了解决上述种种影响服务可用性的问题,笔者认为可以从如下两个方面来考虑。

  • 容错性设计。要接受网络脆弱与下游服务质量不可靠的事实,并在进行服务设计时充分考虑相应故障产生时的容错方案。
  • 流量控制。既要对上游服务调用采取预防性策略,防止打垮我们的服务;也要对下游服务有感知与保护意识,当感知到下游服务的质量下滑甚至服务不可用时,及时通过自身保护下游服务。

接下来依次介绍服务可用性治理的5种通用方案:重试、熔断、隔离、限流、降级。重试与降级是容错性设计的具体表现形式,熔断、隔离与限流则是流量控制的常见实现方式。

http://www.dtcms.com/a/290265.html

相关文章:

  • Tomcat的部署、单体架构、session会话、spring
  • ARC学习(6)arc 编译器overlap 地址重叠方式使用
  • stm32mp157f-dk2安装镜像并且部署qt全流程
  • 基于uniapp的餐厅在线选餐小程序的设计与实现
  • 信息整合注意力IIA,通过双方向的轻量级注意力机制强化目标关键特征并抑制噪声,提升特征融合的有效性和空间位置信息的保留能力。
  • Qt的QAbstractTableModel
  • 基于大数据的旅游推荐系统 Python+Django+Hive+Vue.js
  • 三大工厂设计模式
  • 电商项目_秒杀_初步分析
  • Django视图与路由系统
  • Jetpack ViewModel LiveData:现代Android架构组件的核心力量
  • echarts图铺满父元素
  • 在翻译语义相似度和会议摘要相似度评估任务中 ,分类任务 回归任务 生成任务区别
  • k8s查看某个pod的svc
  • Zookeeper 注册中心垂直介入
  • ZooKeeper学习专栏(四):单机模式部署与基础操作详解
  • 来伊份养馋记社区零售 4.0 上海首店落沪:重构 “家门口” 的生活服务生态
  • ZooKeeper学习专栏(三):ACL权限控制与Zab协议核心原理
  • Qt5线程相关事项
  • 使用 Tailwind CSS 控制元素在移动端不显示
  • 【Docker#3】Window 和 Linux 上 docker安装 相关知识
  • AWS IoT Core CloudWatch监控完整指南
  • Linux C 多线程基本操作
  • Product Hunt 每日热榜 | 2025-07-21
  • 2025最新版虚幻引擎5(UE5)入门教程:前言——你的随身教程和学习笔记
  • Freemarker实现下载word可能遇到的问题
  • 星游路-个人日志-学习积累法
  • 结构型模式-架构解耦与扩展实践
  • 遗像照片尺寸要求及手机制作打印方法
  • 【Java学习|黑马笔记|Day19】方法引用、异常(try...catch、自定义异常)及其练习