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

文章目录

  • 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、调用方上下文、服务端耗时、处理结果。
  • 服务治理

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++语法(24) 哈希应用

C语法(23)-- 模拟实现unordered_set和unordered_map_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/130449452?spm1001.2014.3001.5501 目录 1.位图 1.定义 2.实现 3.应用 4.特点 2.布隆过滤器 1.介绍 2.设计场…

JavaSE01_初识Java

JavaSE-01【初识Java】 第一章:Java开发序言 1.1 Java语言概述 1、什么是Java语言 Java语言是美国Sun公司,在1995年推出的高级编程语言。 所谓编程语言,就是计算机语言,人们可以使用编程语言对计算机下达指令,让计…

LVGL学习(2):图片的转换和显示

我们在设计UI的过程中可能需要显示一些图片,本篇文章将介绍如何转换并显示一个固定的图片到lv_img中。 文章目录 1 图片转换1.1 GUI Guider1.2 在线转换 2 图片的显示 1 图片转换 和之前我写的一篇字体转换的文章一样:LVGL学习(1):中文字体…

UnityVR--组件5--Animation动画

目录 新建动画Animation Animation组件解释 应用举例1:制作动画片段 应用举例2:添加动画事件 Animator动画控制器 应用举例3:在Animator中设置动画片段间的跳转 本篇使用的API:Animation、Animator以及Animator类中的SetFlo…

MySQL学习(联结,组合查询,全文本搜索)

联结 SQL最强大的功能之一就是能在数据检索查询的执行中联结表; 关系表 为什么要使用关系表? 使用关系表可以储存数据不重复,从而不浪费时间和空间;如果有数据信息变动,只需更新一个表中的单个记录,相关…

Zabbix(一)

介绍 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 功能组件 Server : Zabbix server是zabbix软件的核心组件 Zabbix agent向其报告可用性、系统完整性和统计信息 Zabbix server存储所有的配置信息、统计信息和操作信…

基于Web智慧油库三维可视化管理系统

油库是协调原油生产、原油加工、成品油供应及运输的纽带,是国家石油储备和供应的基地,它对于保障国防和促进国民经济高速发展具有相当重要的意义。 建设背景 石油作为重要的战略资源,关系着国家安全和人民生活。油库是石油能源供应链中的关…

总结886

学习目标: 月目标:6月(张宇强化10讲,专业课,背诵15篇短文,考研核心词过三遍) 周目标:1800线性代数部分并完成错题记录,英语背3篇文章并回诵,检测&#xff0…

SpringCloud_微服务基础day1(走进微服务,认识springcloud,微服务(图书管理)项目搭建(一))

官方网站:柏码 - 让每一行代码都闪耀智慧的光芒! (itbaima.net) p1:前言,走进微服务 注意:此阶段学习推荐的电脑配置,至少配备4核心CPU(主频3.0Ghz以上)16GB内存,否则卡到你怀疑人生…

ABB Drive Composer Pro 2.8.1 Crack

Drive Composer 是 ABB 通用架构驱动器的启动和维护工具。该工具用于查看和设置驱动器参数,以及监控和调整过程性能。 Drive Composer入门版提供了设置参数、基本监控、从 PC 对驱动器进行本地控制以及事件记录器处理等基本功能。 Drive Composer pro是成熟的调试和…

deepin安装docker和pytorch

title: deepin安装docker和pytorch date: 2023-06-01 17:28:58 tags: [linux, torch,docker] deepin安装docker和pytorch 总体的流程图大致如下,首先是安装linux,这个直接跳过,接下来就是安装docker,之后,安装docker之…

spring cloud搭建(eureka)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习新东西是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习…

再识openmmlab,用mmDeploy实现部署的前期需要了解一些内容

OpenMMLab 是一个用于学术研究和工业应用的开源算法体系,于2018年年中开始,由 MMLab(香港中文大学多媒体实验室)和商汤科技联合启动。 如果第一接触的话,还是建议参考官方环境配置教程:Windows 环境配置 -…

OpenGL超级宝典第八章学习笔记:基元处理之曲面细分

前言 本篇在讲什么 OpenGL蓝宝书第八章学习笔记之曲面细分 本篇适合什么 适合初学OpenGL的小白 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 具有全流程的图文教学 重实践,轻…

有道云笔记也挺速度,也搞了个AI助手,能抗衡Notion AI?

前言 小编平时做技术笔记的时候,经常使用到的软件就是有道云笔记,最近无意间发现,笔记编写的页面中,竟然集成了AI助手!网易有道可真是低调!毕竟最近AI圈大火,竟然没有蹭一波热度,直…

决策树理论

这个文本讨论了决策树模型中的基尼系数。当数据集的所有数据属于同一类时,基尼系数为0,因为此时无需进行分类,已经属于同一类别。因此,选项B是正确的。 决策树是一种用于分类和预测的机器学习模型。基尼系数是衡量数据集纯度的指标…

苹果服务端通知v2处理(AppStore Server Notifications V2)

苹果服务端通知v2处理 关键词: App Store Server Notifications V2、Python源码、苹果订阅、JWS、x5c、JSON WEB TOKEN 背景 最近要接入苹果订阅功能,调研后发现订阅生命周期内的状态变更是通过苹果服务端通知返回的(什么时候普通内购也能加上减少掉单的概率)&am…

Qt在MySQL中存储音频文件

一、在存储音频视频等大文件时需要以二进制文件进行存储,首先需要了解mysql存储二进制文件的字段类型以及大小: 需要创建数据库中的图片类型为:二进制mediumblob类型,( TinyBlob 最大 255 Blob 最大 65K MediumBlob …

基于区域的图像分割

文章目录 基于区域的图像分割基本原理常用的算法实现步骤示例代码结论 基于区域的图像分割 基于区域的图像分割是数字图像处理中常用的一种方法,它通过将图像中的像素分配到不同的区域或对象来实现图像分割的目的。相比于基于边缘或阈值的方法,基于区域…

“智慧赋能 强链塑链”—— 汽车行业供应链管理数字化应用探讨

01车企供应链数字化的必要性 汽车供应链是一个复杂的系统,很多汽车企业因为供应链管理不当,造成资源浪费、成本高、客户满意度低等一系列问题;而汽车行业规模技术门槛高、配合协同复杂的特性,决定了其供应链缺口无法在短时间内填…