《架构设计》-09-分布式服务架构(注册中心、服务发布、服务调用、服务治理)

news2024/11/22 19:04:24

文章目录

  • 1. 概述
  • 2. 集群容错策略
  • 3. 服务路由
    • 3.1 直接路由
    • 3.2 间接路由和注册中心
    • 3.3 路由规则
    • 3.4 服务路由/负载均衡/集群容错的关系
  • 4. 服务发布
    • 4.1 发布启动器
    • 4.2 动态代理
    • 4.3 发布管理器
    • 4.4 协议服务器
  • 5. 服务调用
  • 6. 服务治理

1. 概述

  • RPC架构的意义
    • 解决了分布式环境下两个独立进程之间通过网络进行方法调用和数据传输的问题

当我们通过横向拆分方法对系统进行拆分会得到一系列垂直化应用。随着垂直化应用越来越多,应用之间交互不可避免。RPC架构将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心。

  • RPC的困境

    • 当服务越来越多时,服务URL配置管理会变得非常困难,负载均衡器的单点压力也越来越大。
    • 当服务间依赖关系变得错踪复杂,甚至无法描述应用的架构关系
    • 服务的调用量越来越大,服务的容量问题就暴露出来。
  • 困境的解决:分布式服务架构

2. 集群容错策略

  • 转移失败策略(Failover)
    • 当发生服务调用异常时,重新在集群中查找下一个可用的服务提供者。
    • 为了防止无限重试,通常对失败重试最大次数进行限制。
  • 通知失败策略(Failback)
    • 当服务调用失败直接将远程调用异常通知给消费者,由消费者捕获异常进行后续处理。
  • 安全失败策略(Failsafe)
    • 当获取服务调用异常时,直接忽略。
    • 通常用于写入审计日志等操作
  • 快速失败策略(Failfast)
    • 在获取服务调用异常时,立即报错。
    • 在特定场景中可以使用该策略确保非核心业务服务只调用一次

3. 服务路由

3.1 直接路由

  • 直接路由:基于配置中心或者数据库中存储的目标服务的具体地址构建链路完成调用
  • 缺陷
    • 服务提供者地址发生改变时无法在第一时间通知消费者
    • 创建和维护配置中心或数据库持久化操作需要成本

3.2 间接路由和注册中心

图,基于发布-订阅模式和注册中心的间接路由实现方案

在这里插入图片描述

  • 注册中心的作用
    • 服务提供者发布服务到注册中心
    • 服务消费者订阅感兴趣的服务
  • 优势
    • 当服务提供者地址发生变化时,注册中心推送服务变化到服务消费者
    • 服务消费者可以配备缓存机制
      • 提高高路由的效率
      • 注册中心不可用是,仍可使用缓存数据

3.3 路由规则

  • 作用:实现动态路由
  • 使用:
    • 通常是黑白名单
    • 也可以是条件脚本

3.4 服务路由/负载均衡/集群容错的关系

在这里插入图片描述

4. 服务发布

服务发布流程时序图
在这里插入图片描述

4.1 发布启动器

  • 作用:确定服务发布形式并启动发布平台。
  • 常见发布形式
    • 配置化
      • 做法:通过以XML为代表的配置化工具
      • 优势:服务框架对业务代码零侵入,扩展和修改方便,修改能够实时生效
      • 使用:倾向于该方法
    • API调用
      • 缺点:服务框架对业务代码侵入性较强,修改代码之后需要重新编译才能生效
      • 使用:系统之间集成
    • 使用注解
      • 优势:服务框架对业务代码零侵入,扩展和修改也比较方便
      • 缺点:修改配置需要重新编译代码

4.2 动态代理

在涉及远程调用时,通常会在本地服务实现的基础上添加动态代理功能。通过动态代理实现对服务发布进行动态拦截,可以对服务发布行为本身进行封装和抽象,也便于扩展和定制化。JDK自带的Proxy机制以及类如javassist的字节码编辑库都可以实现动态代理。

4.3 发布管理器

  • 作用
    • 获取协议服务器中生成的服务URL信息并发布到注册中心
    • 发布器也负责通知发布启动器本次发布是否成功

4.4 协议服务器

  • 协议服务器:实现服务器创建和网络通信的组件
  • 作用
    • 确定发布协议及根据该协议建立网络连接
    • 并管理心跳检测、断线重连、端口绑定与释放
  • 用于发布服务的常见协议
    • HTTP协议(如图)
      在这里插入图片描述

    • RMI协议(Remote Method Invocation,如图)在这里插入图片描述

    • Hessian协议(如图)
      在这里插入图片描述

5. 服务调用

  • 服务调用流程,如图
    在这里插入图片描述
  • 包含组件
    • 调用启动器
      • 作用:确定服务的调用形式并启动调用平台
      • 使用的策略:同发布启动器
    • 动态代理
      • 作用:动态代理完成本地接口到远程调用的转换。
    • 调用管理器
      • 具备缓存功能,保存服务地址的缓存信息
        当从注册中心获取服务提供者地址信息时,调用管理器根据需要更新本地缓存,确保在注册中心不可用的情况下,调用启动器仍然可以从本地缓存中获取服务提供者的有效地址信息。
    • 协议客户端
      • 根据服务调用指定的协议类型创建客户端,并发起连接请求。
      • 负责与协议服务器进行交互并获取调用结果。
        在服务调用过程中,实现了从本地缓存获取服务路由、序列化请求消息封装成协议消息、发送协议请求并同步等待或注册监听器回调、反序列化应答消息并唤醒业务线程或触发监听器等分布式服务的基本步骤。如果调用超时或失败,将采用集群容错机制。至此,整个服务发布和调用过程形成闭环。

6. 服务治理

服务调用关系示例:
在这里插入图片描述

  • 服务监控的思路:日志埋点,即使用跟踪Id作为一次完整应用调用的唯一标识,然后将该次调用的详细信息通过日志的方式进行保存。

    • 客户端埋点
      • 注于跟踪Id、客户端IP、调用方接口、调用时间等信息
    • 服务器端埋点
      • 记录跟踪Id、调用方上下文、服务端耗时、处理结果。
  • 服务治理

    • 目标:保障线上服务运行质量,治理的对象是基于统一分布式服务框架开发的各项业务服务。
    • 定位:关注于服务运行时状态、细粒度治理,服务限流/降级、服务动态路由、灰度发布是服务治理的基本策略
    • 具体实现:
      • 可以采用通过注册中心对服务依赖进行分析,结合运行时调用关系,梳理不合理的依赖和调用路径,优化服务架构;
      • 实时收集服务调用日志,分析、汇总、存储和展示,方便开发和运维人员进行实时故障诊断,同时执行服务运行时治理方案,包括限流降级、路由、统一配置等在线调整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/600409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python写UDF对于SEO的影响

Python写UDF对于SEO的影响 作为一名有10年python编程经验的工程师,我对Python写UDF的优势深有体会。UDF(User-Defined Functions)是用户自定义函数的缩写,在数据处理和数据分析的过程中经常用到。下面我将介绍Python写UDF对于SEO…

渲染学生信息表

代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, initi…

MFC(六)框架理论

关键类 ,MFC中关键类有&#xff1a; CMFCAPP:最底层的类&#xff0c;也是最重要的类&#xff0c;统筹全局&#xff0c;管理DOCUMENT TEMPLATE CFRAMEWND:框架窗口&#xff0c;包括菜单栏、工具栏、状态栏等等&#xff0c;主要是负责窗口的布局 CVIEW:负责展示具体的数据 C…

chatgpt赋能python:Python内置变量介绍

Python内置变量介绍 Python是一种高级编程语言&#xff0c;具有简单易学、可读性强、可扩展性强等特点。在Python中&#xff0c;有许多内置变量&#xff08;built-in variables&#xff09;&#xff0c;以方便用户在编写程序时进行使用。本文将会对Python中的内置变量进行介绍…

基于SpringBoot+Vue的逍遥大药房管理系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

干货,一文弄懂RF检波器那些事

WiFi、4G、蓝牙等各种无线连接技术的普及带动各种终端设备井喷式增长&#xff0c;包括物联网、可穿戴等各种基于无线连接技术的新兴产业迅速成长起来&#xff0c;各种无线信号链解决方案涌现推动这种热潮的持续发展。在无线信号链中&#xff0c;很久没有听到有人提起一个关键的…

快速开发和使用Android串口

一、什么是串口 串口叫做串行接口&#xff0c;也称串行通信接口&#xff0c;也可以叫做COM口&#xff0c;按电气标准及协议来分包括RS-232-C、RS-422、RS485、USB等。串行接口是指数据一位一位地顺序传送&#xff0c;其特点是通信线路简单&#xff0c;只要一对传输线就可以实现…

计算机视觉—YOLO V4

计算机视觉—YOLO V4 1、YOLO V41.1、网络结构1.1.1、BackBone&#xff1a;CSPDarknet531.1.2、Neck&#xff1a;SPP结构1.1.3、Neck&#xff1a;PAN结构1.1.4、YOLO v4整体结构 1.2、优化策略 1、YOLO V4 原论文下载地址&#xff1a;https://arxiv.org/abs/2004.10934 1.1、…

Windows中安装GCC教程

GCC的安装教程 GCC简介 GCC编译器通常在Linux系统下使用&#xff0c;一般来说大部分发行的系统会默认安装&#xff0c;GCC编译器使用gcc指令在终端进行shell操作。 对于新接触Linux的朋友来说&#xff0c;简单的在Windows中练习过渡一下应该就足够了。&#xff08;我就是因为…

Apache IoTDB 荣获国家网信办 2022 年中国开源创新大赛决赛一等奖,三位核心研发荣获表彰!...

项目获得权威认可&#xff01; 2023 年 5 月 15 日&#xff0c;2022 年中国开源创新大赛组委会对外公布“2022 中国互联网发展创新与投资大赛公益项目暨2022年中国开源创新大赛”决赛获奖名单&#xff0c;并于 2023 年 5 月 31 日在北京举办“2022年中国开源创新大赛总结发布活…

chatgpt赋能python:用Python编写FizzBuzz——解析最简单的编程题

用Python编写FizzBuzz——解析最简单的编程题 作为每个程序员的入门题目&#xff0c;FizzBuzz是一个简单但常见的问题。FizzBuzz要求我们用数字1到100来打印输出&#xff0c;但是当数字是3的倍数时&#xff0c;需要输出Fizz&#xff1b;当数字是5的倍数时&#xff0c;需要输出…

力扣高频SQL50题(基础版)——第三天

力扣高频SQL50题(基础版)——第三天 1 产品销售分析Ⅰ 1.1 题目内容 1.1.1 基本题目信息1 1.1.2 基本题目信息2 1.1.3 示例输入输出 1.2 示例sql语句 # Write your MySQL query statement below SELECT p.product_name,s.year,s.price FROM Sales s INNER JOIN Product p …

chatgpt赋能python:Python几次方函数介绍

Python几次方函数介绍 Python作为一门高级编程语言&#xff0c;具有丰富的数学函数库。其中&#xff0c;几次方函数在许多数值计算、数据分析和科学计算中都得到广泛应用。Python中的几次方函数有多种实现方式&#xff0c;包括内置函数pow()、运算符**、NumPy库的numpy.power(…

(3)NUC 980 kenerl编译

解压 用到的配置文件位置&#xff1a; /NUC980-linux-4.4.y-master/arch/arm/configs/nuc980_defconfig 执行&#xff1a; 编译linux内核源码。了解其 配置文件在 arch/arm/configs/nuc980_defconfig (1) make nuc980_defconfig 载入配置文件 (2) make menuconfig --->Devi…

机器龙的制作

1. 功能说明 本文示例将实现R326样机机器龙边张合嘴巴、边煽动翅膀、边摆动尾巴运动的功能。 2. 结构说明 本项目使用的机器龙样机是用可以用探索者零件或者探索者兼容零件制作。样机主要由头部模块、翅膀模块、尾巴模块、四足行走模块四部分组成。其中头部模块由2自由度并联关…

从元宇宙到生成式AI:炒作、现实和未来前景

不久前&#xff0c;科技界充斥着一种被称为元宇宙的未来主义概念。这个相互关联的虚拟现实空间宇宙&#xff0c;个人可以在模拟环境中进行交互&#xff0c;被誉为技术的未来。如今围绕元宇宙的炒作已经彻底失败了。技术重点现在已经转向生成AI&#xff0c;重点是像GPT-4和谷歌的…

一文搞懂Flutter的手势事件——事件分发与冲突处理详解

本文字数&#xff1a;43617字 预计阅读时间&#xff1a;110分钟 前言 之前有两篇文章都围绕着runApp()进行展开&#xff0c;讲解了布局绘制的详细过程。 https://www.jianshu.com/p/2ef749ff4d40/https://www.jianshu.com/p/f37f8da235ec 那么接下来我们想详细的说一说Flutter是…

哔哩哔哩视频云画质与窄带高清AI落地实践

视频赛道卷到下半场&#xff0c;一定会面临体验与成本的对抗&#xff0c;尤其是在行业大环境“过冬”的背景下&#xff0c;想要在有限带宽下获得最佳的画质观感变得异常具备挑战性。从视频云业务场景的视角来看&#xff0c;如何有效解决cross-domain问题、如何突破低业务延迟下…

留学生用ChatGPT写论文?真的会被开除!!!

转眼进入6月&#xff0c;大家的论文完成的怎么样了&#xff1f;很多留学生都有这样的疑问&#xff0c;用ChatGPT写论文靠谱吗&#xff1f; 其实在最近&#xff0c;&#xff0c;ChatGPT被学生用来辅助写论文&#xff0c;已经不是什么新鲜事了。它作为新型人工智能&#xff0c;搜…

二十三种设计模式:状态模式

状态模式&#xff0c;就是把所有的状态抽象成一个个具体的类&#xff0c;然后继承一个抽象状态类&#xff0c;在每一个状态类内封装对应状态的行为&#xff0c;符合开放封闭原则&#xff0c;当增加新的状态或减少状态时&#xff0c;只需修改关联的类即可。很适合多分支行为方法…