分布式 RPC 框架HSF

news2024/12/27 11:02:29

分布式 RPC 框架HSF

  • 概述
  • HSF架构
  • 调用方式
  • 优势
  • 应用场景

概述

  • HSF (High-speed Service Framework),高速服务框架,是在阿里巴巴内部广泛使用的分布式 RPC 服务框架。
  • HSF 作为阿里巴巴的基础中间件,联通不同的业务系统,解耦系统间的实现依赖。HSF 从分布式应用的层面,统一了服务的发布/调用方式,从而帮助用户可以方便、快速的开发分布式应用,以及提供或使用公共功能模块。为用户屏蔽了分布式领域中的各种复杂技术细节,如:远程通讯、序列化实现、性能损耗、同步/异步调用方式的实现等。
  • HSF(High-speed Service Framework),高速服务框架,是阿里系主要采用的服务框架,其目的是作为桥梁联通不同的业务系统,解耦系统之间的实现依赖。其高速体现在底层的非阻塞I/O以及优秀的序列化机制上,实现了同步和异步调用方式,并且有一套软负载体系,实现分布式应用。

HSF架构

HSF 作为一个纯客户端架构的 RPC 框架,本身是没有服务端集群的,所有的 HSF 服务调用都是服务消费方(Consumer)与服务提供方(Provider)点对点进行的。然而,为了实现整套分布式服务体系,HSF 还需要依赖以下外部系统。

在这里插入图片描述

  • 地址注册中心

    • HSF 依赖注册中心进行服务发现,如果没有注册中心,HSF只能完成简单的点对点调用。因为作为服务提供端,没有办法将自己的服务信息对外发布,让外界知晓;作为服务消费端,可能已经知道需要调用的服务,但是无法获取能够提供这些服务的机器。而注册中心就是服务信息的中介,提供服务发现的能力。
    • 在阿里巴巴集团内部,地址注册中心的角色是由 ConfigServer 承担的。
  • 持久化配置中心

    • 持久化的配置中心用于存储 HSF 服务的各种治理规则,HSF 客户端在启动的过程中会向持久化配置中心订阅各种服务治理规则,如路由规则、归组规则、权重规则等,从而根据规则对调用过程的选址逻辑进行干预。
    • 在阿里巴巴集团内部,持久化配置中心的角色是由 Diamond 承担的。
  • 元数据存储中心

    • 元数据是指 HSF 服务对应的方法列表以及参数结构等信息,元数据不会对 HSF 的调用过程产生影响,因此元数据存储中心也并不是必须的。但考虑到服务运维的便捷性,HSF客户端在启动时会将元数据上报到元数据存储中心,以便提供给服务运维使用。
    • 在阿里巴巴集团内部,元数据存储中心的角色是由 Redis 承担的。
  • HSF 控制台

    • HSF 控制台通过打通地址注册中心 ConfigServer、持久化配置中心 Diamond、元数据存储中心 Redis,为用户提供了一些列服务运维功能,包括服务查询、服务治理规则管理、服务测试、服务 Mock、单机运维等,旨在提高 HSF 服务研发的效率、运维的便捷性。
    • 在阿里巴巴集团内部,HSF 控制台的角色是由 HSFOPS 承担的

调用方式

HSF 作为分布式 RPC 服务框架,支持多种服务的调用方式。

  • 同步调用:HSF客户端默认以同步调用的方式消费服务,客户端代码需要同步等待返回结果。

  • 异步调用:对于服务调用的客户端来说,并不是所有的 HSF 服务都需要同步等待返回结果的。对于这些服务,HSF 提供异步调用的形式,让客户端不必同步阻塞在 HSF 调用操作上。HSF 的异步调用,有 2 种:

    • Future 调用:客户端在需要获取调用的返回结果时,通过 HSFResponseFuture.getResponse(int timeout) 主动获取结果。
    • Callback 调用:Callback 调用利用 HSF 内部提供的回调机制,当指定的 HSF 服务消费完毕拿到返回结果时,HSF 框架会回调用户实现的 HSFResponseCallback 接口,客户端通过回调通知的方式获取结果。
  • 泛化调用
    对于一般的 HSF 调用来说,HSF 客户端需要依赖服务的二方包,通过依赖二方包中的 API 进行编程调用,获取返回结果。而泛化调用是指不需要依赖服务的二方包,从而发起 HSF 调用、获取返回结果的方式。在一些平台型的产品中,泛化调用的方式可以有效减少平台型产品的二方包依赖,实现系统的轻量级运行。

  • HTTP 调用
    HSF 支持将服务以 HTTP 的形式暴露出来,从而支持非 Java 语言的客户端以 HTTP 协议进行服务调用。

  • 调用链路 Filter 扩展
    HSF 内部设计了调用过滤器,并且能够主动发现用户的调用过滤器扩展点,将其集成到 HSF 调用链路中,使扩展方能够方便的对 HSF 请求进行扩展处理。

优势

  • 高性能的网络通信
    在网络通信层面,HSF 采用开源的高性能、异步事件驱动的 NIO 框架 Netty 作为网络通信框架。
    在协议层面,HSF 2.x 做了大量优化,使用了更适用于 RPC 场景的 RPCRemoting 协议替换了 HSF 1.x 中的 TBRemoting 协议,性能有了大幅提高。目前,HSF 在物理机上的压测数据约为 30w QPS。

  • 无侵入的代理服务
    HSF 利用了 Java 语言的代理机制,将协议封装、选址、远程调用等一系列 RPC 逻辑进行了封装,对用户透明。用户在使用 HSF 进行远程服务调用时,只需要进行简单的 Spring 配置,就可以专注于自己的业务逻辑,编码方式与本地调用没有任何区别。

  • 强大的服务管控
    HSF 配套的控制台(HSFOPS)提供了丰富的服务管控功能,例如:

    • 服务查询:提供多种维度的服务查询功能,展示服务的实时状态。
    • 服务治理:提供多种服务治理规则的管理功能,如路由规则、归组规则、同机房规则、权重规则等,让用户通过配置服务治理规则,完成服务集群的管理、流量的划分。
    • 服务测试:提供快速测试、调用服务的能力,用户只需通过在页面上输入服务调用的参数,即可方便的完成一次 HSF 服务的调用,提升研发效率。
    • 服务 Mock:提供 HSF 服务的 Mock 能力,使用时无需关注服务端是否存在,只需要在 HSFOPS 上配置好 Mock 规则,HSF 客户端即可通过 hsf-mock 插件获取配置的 Mock 数据,并且对代码没有入侵。

应用场景

  • HSF 诞生于阿里巴巴内部诸多系统进行服务化改造的诉求,也就是说 HSF 本身就是对应用服务化进行支撑的框架。一般意义上,一个公司的业务系统发展脉络基本都是类似的:从单个应用到多个应用,从本地调用到远程调用,随着发展需要对远程服务进行高效的资源管理,这个过程中,RPC框架解决了主要的技术问题。

  • 因此,如果你希望自己的应用可以进行服务化改造,将单个巨型应用拆分成多个职责分明的基础服务应用,进而将这些基础服务提供给更多上层应用使用,那么,HSF 将会是你最佳的选择。

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

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

相关文章

WebSocket笔记

1. websocket介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。 HTTP协议和WebSocket协议对比: HTTP是短连接W…

iOS--动静态库

文章目录 认识动静态库静态库动态库静态的打包静态库的使用动态库的打包动态库的使用 动静态库的本质就是可执行程序的"半成品"。 需要完成一个可执行程序需要经历以下四个步骤: 预处理:完成头文件的展开,去掉注释,宏替换,条件编译…

微信小程序学习笔记(五)——优化

下拉刷新后主动关闭 Page({onPullDownRefresh: function() {// ...wx.stopPullDownRefresh()} })在发起请求时设置 loading,请求结束后关闭 Page({onLoad: function(options) {wx.showLoading({title: 数据加载中...}) // 展示 loadingwx.request({// ...complete: …

leetcode每日一练-第206题-反转链表

一、思路 迭代 二、解题方法 以输入为 1 -> 2 -> 3 -> 4 -> 5 的链表为例 三、code class Solution { public:ListNode* reverseList(ListNode* head) {ListNode* prevnullptr;//反转后的链表ListNode* currhead;//当前更新的原有链表while(curr)//原有链表无值…

【大模型】更强的 LLaMA2 来了,开源可商用、与 ChatGPT 齐平

【大模型】可商用且更强的 LLaMA2 来了 LLaMA2 简介论文GitHubhuggingface模型列表训练数据训练信息模型信息 许可证参考 LLaMA2 简介 2023年7月19日:Meta 发布开源可商用模型 Llama 2。 Llama 2是一个预训练和微调的生成文本模型的集合,其规模从70亿到…

中间件安全-CVE漏洞复现-Weblogic+JBoss+GlassFish

服务攻防测试流程: 使用vulfocus靶场: 案例演示:中间件-Weblogic-工具梭哈 探针默认端口:7001,Weblogic是Oracle公司推出的J2EE应用服务器 使用vulfocus靶场复现漏洞 漏洞:weblogic-cve_2020_14883 启动环…

自然语言处理:赋予AI理解和交流的能力

文章目录 🍀引言🍀NLP的定义与重要性🍀NLP的应用领域🍀学好自然语言处理需要掌握以下知识🍀GPT和自然语言处理🍀总结 🍀引言 自然语言处理(Natural Language Processing,…

Visual Studio创建Web项目时候报错- 找不到“2.0.1“版本的程序包”解决方法

问题描述 在今天我开始想做一个ASP.Net Web 项目时,在创建项目的时候突然报下面这个错,也是试了很多方法,比如卸载重新安装,安装更高版本,我之前用的是2019版本,后面下载了2022的,又出现了新的…

python与深度学习(三):ANN和fashion_mnist

目录 1. 说明2. fashion_mnist实战2.1 导入相关库2.2 加载数据2.3 数据预处理2.4 数据处理2.5 构建网络模型2.6 模型编译2.7 模型训练2.8 模型保存2.9 模型评价2.10 模型测试2.11 模型训练结果的可视化 3. fashion_mnist的ANN模型可视化结果图4. 完整代码 1. 说明 本篇文章是A…

(202307)wonderful-sql:环境搭建(ubuntu 22.04 + mysql 8.0 + workbench/dbeavar,免密码-不建议免哈)

前言 能够再次参加datawhale组织的开源学习是十分兴奋的,看到datawhale能够越办越好我也是由衷地感到高兴。 这次参加的是mysql的学习,我知道这样短期的学习不会对我的能力造成多么大的提升,但是相信经过这次学习,我又将被datawh…

Kubernetes中Pod的扩缩容介绍

Kubernetes中Pod的扩缩容介绍 在实际生产系统中,我们经常会遇到某个服务需要扩容的场景,也可能会遇到由于资源紧张或者工作负载降低而需 要减少服务实例数量的场景。此时可以利用 Deployment/RC 的 Scale 机制来完成这些工作。 Kubernetes 对 Pod 的扩…

java代码审计1之环境搭建

文章目录 1、安装jdk2、配置tomcat3、配置maven3.1、配置环境变量3.2、配置源和maven配置文件 4、idea4.1、配置maven4.2、新建web项目4.3、遇到的问题(弹出404页面) 之前的文章, https://blog.csdn.net/weixin_43970718/article/details/121929434 https://blog.…

(全网最详细!)mysql、redis 、RabbitMQ只能本机访问,怎么改?

如果只能本机访问,怎么改? 一、mysql - 改my.ini 刷脚本 bind-address0.0.0.0 然后重启一下mysql服务 任务管理器-关掉mysql 搜索 计算机管理-重启mysql服务 然后 打开查询,并选择mysql数据,输入这个sql语句,点击运行 sele…

POC!VMWare RCE CVE-2023-20887

漏洞简介 VMWare Aria Operations for Networks (vRealize Network Insight) 在通过 Apache Thrift RPC 接口接受用户输入时容易受到命令注入的攻击。此漏洞允许远程未经身份验证的攻击者以 root 用户身份在底层操作系统上执行任意命令。RPC 接口受可以绕过的反向代理保护。VM…

vue3+vue-router4:报错Uncaught (in promise) Error: Invalid navigation guard

报错图示: Error: Invalid navigation guard Uncaught (in promise) Error: Invalid navigation guard 错误影响描述: 配置开发、测试、生产时候,因为是公众号,所以想在开发环境下免鉴权,不走微信获取openid接口&a…

PHP要怎么学--【思维导图知识范围】

强撸项目 总目录在此 专辑工作量PHP登陆/php登录–【强撸项目】难度★✫✰✰✰PHP注册/登录/发邮件–【强撸项目】★★★✫✰PHP在线相册–【强撸项目】★★★★✫–【强撸项目】––【强撸项目】––––– 文章目录 本系列校训学习资源的选择环境的问题本人推荐 PHP视频的知…

C语言-分支语句和循环

目录 【1】字符输入输出 【2】C语言下的垃圾字符回收 【3】分支语句 【4】循环 练习: 【1】字符输入输出 按字符的输入输出 int getchar(void); 功能:从终端输入一个字符 参数:无 返回值:输入字符的ASCII值int putchar(int…

pandas常用方法

一、提要 pandas对于处理表格类数据来说是非常方便的模块,同时也是做数据分析绕不开的第三方库。这里将工作中常用到的各种处理方法记录下来二、常用方法 接下来的以 df 表示我们要处理的 dataframe 表格数据 1、取值 # 循环遍历取值 for i in range(len(df)):y…

Spring Cloud之Gateway网关应⽤

使⽤⽹关对静态化微服务进⾏代理(添加在它的上游,相当于隐藏了具体微服务的信息,对外暴露的是⽹关)。 1. 右键⽗⼯程【 yx-parent 】选择【 New 】 - 【 Module 】选项,然后选择创建【 Maven 】类型项⽬(不…

以高质量产业载体为底色,绘就珠海高新区产业发展新图景

【作者】珠海高新招商 “珠海高新招商”以招商运营为核心,聚焦珠海工业园区、珠海5.0产业园等招商引资工作,依托专业的招商团队和丰富的创新资源,为企业提供产业园入驻、平台搭建、产业政策咨询、科技服务等全流程专业服务。推动高新区招商引…