HSF框架

article/2025/10/5 4:37:11

HSF架构

一.HSF的基本概念

HSF全称为High-Speed Service Framework,旨在为淘系的应用提供一个分布式的服务框架,HSF从分布式应用层面以及统一的发布/调用方式层面为大家提供支持,从而可以很容易的开发分布式的应用以及提供或使用公用功能模块,而不用考虑分布式领域中的各种细节技术,例如远程通讯、性能损耗、调用的透明化、同步/异步调用方式的实现等等问题。

二.知识准备

通过以上的说明,大致了解了一下RPC与HSF的总体架构,但是总体架构离具体实现还想差很多,有些知识准备还是很有必要的。

1.对象的序列化

对象的序列化过程在RPC过程中是很重要的一个环节,序列化对于远程调用的响应速度、吞吐量、网络带宽消耗等同样也起着至关重要的作用。
在HSF1.0时只支持两种序列化方式:java 和 hessian,在HSF2.0之后就支持了五种序列化方式:java、hessian、hessian2、json、kyro。
但是目前版本中常用的序列化方式还是java 和 hessian两种。如果想细致的了解也可以多做了解。

2.动态代理

对于消费方来说,所存在的只有一个接口,虽然底层的实现原理我们知道,但是为了在使用时的高度透明,在JAVA语言层面上的表现形式则是通过动态代理的方式实现的,很多的逻辑都在InvocationHandler 中处理的。关于如何实现动态代理,还动态代理的一些使用的细节也可以稍作了解。

3.网络通信NIO

如果在网络传输过程中,采取普通的BIO,会有很多的问题存在,例如如果调用端有多个请求过来,那么就得需要多个线程去处理,每个线程都使用独立的连接,在远端的提供者端有对应的多个线程来执行相应的服务。这种方式会使得调用者和提供者之间建立大量的连接,而且是阻塞的方式,连接并不能得到充分的利用(摘自《大型网站系统与JAVA中间件》)。采用NIO则就可以避免这样的损耗,但是HSF在使用时并不是采用直接的NIO编程,而是通过第三方的框架Netty。

 

二.HSF 实现原理

1.提供服务的大致流程如下:
• server启动时候向configserver注册
• client启动时候向configserver请求list
• client缓存list,发现不可用的server,从缓存中remove
• configserver通过心跳包维护可用server的list
• list有更新的时候,configserver通过带version的报文通知client更新

 

 

从以上几个问题出发,看下HSF的实现方式。

2.HSF的整体实现方式:

 

从图中可以看出,HSF的实现方式可以理解为是C/S的架构,但是和传统的C/S架构相比还是有很大的不同,HSF没有真正的服务器,每个应用都可以成为服务的调用方和提供方。具体工作方式如下:

ConfigServer:远程调用对端的地址就是由ConfigServer 来推送的,这样用户只需要配置自己的服务端或者消费端,不需要对自己的地址进行管理。

Diamond:持久化的配置中心,用于配置服务调用的规则。

服务:服务是调用方和提供方交流的依凭,一般是一个接口,表示一个业务行为以及相关的数据含义。通过使用HSFApiProviderBean能够暴露一个服务,将机器的地址注册到configserver,并且能够通过12200端口进行服务提供,通过HSFApiConsumerBean能够包装出一个客户端,它是服务接口的一个代理,并且它从configserver上订阅了服务的地址列表,能够在这个列表上完成随机调用,做到负载均衡与HA((High Available,高可用性群集)。

网络通信:HSF的底层网络通信是使用netty框架实现的,是基于epoll的NIO的网络通讯框架,HSF在此使用的是长连接,通过合理的服务部署及负债均衡,基本不存在I/O方面的限制。

 

三.HSF设计架构


关于HSF的架构基本可以理解为C/S结构设计方式。(虽然HSF没有自己的服务器)
Server端除了configServer外还有一个diamond用来保存一些持久化的配置信息,这里不进行过多的介绍。

Client是HSF的重点,下面是各模块的功能介绍:
Proxy:这一层主要负责接口的代理。基本上所有的RPC框架都会用到代理模式,相信大家不陌生。需要注意的是HSF的代理层还进行了软负载和单元化的处理。
Remoting:这一层是HSF的应用层协议,定义了报文格式,各个字段的含义等信息,内容比较多,之后单独写一篇文章来介绍。
Processer:这一层主要是处理HSF自身的业务逻辑,包括埋点、限流、鉴权等。
Netty:上面三层会将一次服务调用或者服务返回包装成一个报文,然后通过这层传输。

HSF调用流程


上图是HSF整个的调用过程,从左向右看:
第一条线路相当于consumer进行服务调用的过程,首先经过proxy层,将请求经过代理类包装出去;然后是Remoting层进行协议的包装,最后io层发送出去。
第二条线路相当于provider将结果返回后解析的过程,与上一流程刚好相反。
右边的provider两条调用流程相信大家都能按照上面的过程理解,就不一一讲解了。

 

四.HSF处理请求流程

1.HSF提供端初始化

 

2.HSF消费端初始化

 

3.消费方请求到提供方,响应一次调用

 

4.实现细节

心跳检测:

1、客户端主动关闭连接:客户端第一次与服务端建立链接后,就会周期性(27s)发送心跳包的callback调用,如果连续三次收不到服务端的心跳包回应,客户端主动关闭链接

2、服务端主动关闭连接:当连接59s没有调用(对方网络不可用,或者full gc太久),相当于两次(2*27s)收不到心跳包的时间

从上图可以看出RPC要解决以下几个问题:

如何解决网络通信问题,主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。

如何解决寻址问题,客户端如何找到制定的服务端,也就是保证准确有效的完成一次服务调用的前提。

参数的传递及服务端在收到客户端请求后如何实现其具体功能并返回,由于网络传输协议是二进制的,内存中的参数值必须要解决序列化,反序列化,以及对半包,粘包的处理。

 

五.HSF的优点:

1.服务的自动注册、发现

通过注册中心,实现服务的注册/注销与服务的发现。当服务启动后,会调用publish来将服务发布到中心,而服务的消费者,通过调用订阅接口传入的监听器来更新服务提供者列表。HSF提供了三种注册中心实现,分别是ConfigServer,Zookeper,和配置文件模式。

         

这里仅对Zookeper进行分析,ZookeeperMetadataAddressService 实现了上述接口,在初始化中实例化了一个ZookeeperRegistry来进行管理,其使用了一个封装了zookeperclient的实例-ZkclientZookeeperClient,在注册服务的时候根据url参数中的Constants.DYNAMIC_KEY来确定创建Persistent节点还是Ephemeral节点,Ephemeral节点生命周期与本机连接绑定,这样就可以实现本机离线后的服务自动注销的功能。

2) 服务提供者与消费者之间长连接。

  HSF采用长连接方式进行通信,相比短连接,长连接更具性能优势,避免连接重复创建与销毁带来的缓冲区申请与释放。HSF抽象了连接AbstractClient(Client),并采用了netty框架作为底层实现。netty是一个性能非常优秀的通信框架,基于反应器模式,内部采用了管线模式来解耦不同层次的逻辑之间的耦合问题。HSF为了强化TCP连接的可用性,增加HeartBeat功能,使用了一个Netty提供的 HashedWheelTimer 的定时任务调度器来执行心跳包的发送(补充:此HashedWheelTimer原理采用轮片式的桶结构,避免每次操作对全部任务的迭代操作,只对将要到期的桶进行操作,此原理也可用于缓存系统设计,在需要进行垃圾回收的情况下只需要按照桶为单位进行内存回收)。

3) 非侵入性

  HSF最大优点是非侵入性,它使用了JAVA的Proxy机制来实现这一特点,在通过xml配置文件配置Consumer的时候,实际上是调用了 HSFApiConsumerBean ,在它的初始化方法中,读取了配置的实现接口,并在ProcessComponent中用一个封装了Proxy注册功能,并实现了InvocationHandler接口的类HSFServiceProxy去管理。使用者在自己的代码中无需做任何特殊处理,就像使用本地方法一样去调用其方法。

4) 版本管理

  这一特性可以很灵活的帮助上线运营的服务在升级过程中避免服务不可用的情况。

5) 服务治理

  可以通过网页可视化查看、管理、测试服务的可用。

6) 扩展灵活

  可以接入自动服务降级功能(熔断) - 根据配置或服务的执行结果,在调用级控制服务是否调用执行,避免服务整体瘫痪,提升服务的可用性。


http://chatgpt.dhexx.cn/article/v5DQLXp9.shtml

相关文章

HSF 实现原理

HSF 实现原理 提供服务的流程 - server启动时候向ConfigServer注册 - client启动时候向ConfigServer请求list - client缓存list,发现不可用的server,从缓存中remove - ConfigServer通过心跳包维护可用server的list - list有更新的时候,…

HSF原理剖析

前言 HSF是一个分布式的远程服务调用框架,其实我更喜欢把分布式几个字去掉,因为HSF本身并不是一个单独的服务(指一个进程),他是附属在你的应用里的一个组件,一个RPC组件(远程过程调用——Remote Procedure …

java的hsf高速框架,高速服务框架HSF

一、简述 HSF(High-speed Service Framework),是在阿里巴巴内部广泛使用的分布式 RPC 服务框架。 HSF 连通不同的业务系统,解耦系统间的实现依赖。HSF 从分布式应用的层面,统一了服务的发布与调用方式,从而帮助用户更加方便、快速…

RPC中间件-HSF

目录 目标 版本 需要考虑什么 服务发布与订阅的流程 发布与订阅的入口类 服务的元数据 注册流程图示 服务器端服务映射结构 服务订阅的流程图示 消费者端的映射结构 消费者调用服务的流程 服务代理 协议模板服务 协议服务 消费者调用服务的流程图示 目标 针对淘…

HSF学习

一、HFS简介 1、 HFS其本质是一种RPC框架,用于服务的远程调用,定义唯一服务三元素:接口(serviceInterface)、版本(serviceVersion)、组(serviceGroup),类似m…

HSF概述

高速服务框架HSF(High-speed Service Framework),是在阿里巴巴广泛使用的分布式RPC服务框架。 文章目录 概述HSF架构功能应用开发方式 概述 HSF连通不同的业务系统,解耦系统间的实现依赖。HSF从分布式应用的层面,统一…

HSF架构原理

一.HSF的基本概念 HSF全称为High-Speed Service Framework,旨在为淘系的应用提供一个分布式的服务框架,HSF从分布式应用层面以及统一的发布/调用方式层面为大家提供支持,从而可以很容易的开发分布式的应用以及提供或使用公用功能…

HSF用户指南

用户指南 HSF(High-speed Service Framework),高速服务框架,是阿里系主要采用的服务框架,其目的是作为桥梁联通不同的业务系统,解耦系统之间的实现依赖。其高速体现在底层的非阻塞I/O以及优秀的序列化机制上,实现了同…

阿里巴巴分布式服务框架HSF

HSF称之为高速服务框架HSF(High-speed Service Framework),是在阿里巴巴广泛使用的分布式RPC服务框架。 HSF连通不同的业务系统,解耦系统间的实现依赖。HSF从分布式应用的层面,统一了服务的发布与调用方式&#xff0c…

HSF的原理分析

一.HSF的基本概念 HSF全称为High-Speed Service Framework,旨在为淘系的应用提供一个分布式的服务框架,HSF从分布式应用层面以及统一的发布/调用方式层面为大家提供支持,从而可以很容易的开发分布式的应用以及提供或使用公用功能…

HSF框架基本介绍

HSF介绍 HSF全称high speed frameworkd,是Alibaba内部使用的RPC框架,最初与Dubbo进行内部竞争,由于多方面的原因最终选择了HSF。 主要原因如下: HSF代码量少一些,轻量一些,代码量大概2/3, Dubbo设计更加全面功能更多…

HSF简介

产品概述 HSF (High-speed Service Framework),高速服务框架,是在阿里巴巴内部广泛使用的分布式 RPC 服务框架。 HSF 作为阿里巴巴的基础中间件,联通不同的业务系统,解耦系统间的实现依赖。HSF 从分布式应用的层面,统…

企业流程篇--项目管理(七)

线索到现金(LTC): 介绍: ​ LTC-- Lead To Cash。即从线索到现金,端到端的项目管理流程。 ​ 1)LTC涵盖从线索到现金的所有项目阶段,是销售、工程、服务等业务主流程和人事、财务、项目管理、业绩管理等管理流程的集成。 ​ 2)把目标聚焦于满足客户需求、可交付、可回…

一个完整的软件项目管理流程包括什么?有什么软件项目管理工具?

软件项目管理全流程,及各环节方法,辅助工具。 项目的类型不同,其流程必然会不一样,关于通用项目管理的流程其他回答讲述已经非常完善(个人推荐这篇:泛项目管理流程包括哪些?)&#…

系统集成项目管理工程师知识点集锦

系统集成项目管理工程师知识点集锦 1. 项目的特点有哪些?2. 项目的组织方式有哪些?分别具有什么优缺点?3. 项目管理过程组有哪些?4. 怎么样才能成为一位优秀的项目经理?5. PMO的主要职能有哪些?6. 项目经理…

第4章 项目整体管理 与 第16章 项目变更管理

第4章 项目整体管理 与 第16章 项目变更管理 了解项目管理知识体系叙述的结构 子过程、ITTO、过程组、知识领域 什么是项目整体管理(P-187) 了解 项目整体管理:包括为识别、定义、组合、统一和协调各项目管理过程组的各种过程和活动而开展的过程与活动。兼具统一、…

项目范围管理

> # 范围管理 过程 输入 输出 工具 技术 项目范围管理 6个过程 1.编制范围管理计划过程 定义、确认、控制项目范围的过程进行描述 2.收集需求 为实现项目目标,明确、记录项目干系人相关需求的过程 3.定义范围 详细描述产品范围和项目范围,编制项目范围…

项目研发管理流程

之前公司我除了带架构和业务研发团队,PMO也在我这边管理,对于200多人的研发团队,下面介绍下整个研发管理流程,瀑布式开发模式,虽然比较慢,不过很稳,适合传统企业。 1、立项阶段 发起人提出需求&…

项目管理复习题

蓝字位注释,红字为错误原因,紫字为重点 本复习题链接:https://pan.baidu.com/s/1ZJ4l6mKxAt9dqhw0Qa58xA 提取码:j4jz 笔记:https://blog.csdn.net/weixin_42139734/article/details/108661001 第一章 一、填空题…

项目管理第四章项目整合管理

项目管理第四章项目整合管理 项目整合管理:项目整合管理包括为识别、定义、组合、统一与协调项目管理过程组的各过程进项目管理活动而进行的各种过程和活动。项目整合管理包括以下选择:资源分配,平衡竞争需求,研究各种备选方案&a…