HSF的原理分析

article/2025/10/5 4:40:58

一.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/9VaVpKYo.shtml

相关文章

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…

软件项目管理知识点总结

软件项目管理 第1章 软件项目管理概述1、项目的基本概念(注意与日常运作的区分)和特征;2、软件项目及特征;3、项目管理的基本概念;4、项目管理知识体系(以2017年发布的PMBOK6的十个知识领域为准&#xff09…

项目管理工具推荐

文章目录 禅道官方说明功能特点 JIRA功能特点 TaigaWorktile功能特点 禅道 官方说明 禅道 项目管理软件 是国产的开源项目管理软件,专注研发项目管理,内置需求管理、任务管理、bug管理、缺陷管理、用例管理、计划发布等功能,实现了软件的完整生命周期管理。 细分需求、任务、…

项目整体管理

> 项目整体管理 定义 是对项目管理过程组中的不同过程和活动进行识别、定义、整合、统一、协调的过程 负责管理项目的需求、范围、进度、成本、质量、人力资源、沟通、风险和采购 主要有6个过程 1.制定项目章程 编写项目章程的过程,通过发布项目章程,…

大学生创新项目管理系统

word完整版可点击如下下载>>>>>>>> 大学生创新项目管理系统.rar_创新项目管理系统-互联网文档类资源-CSDN下载内容包括详细设计文档word版,附带开题报告和相关PPT等文档,供大家参考学习。也可在本博客主页找到创新项目管理系统更…

项目质量管理过程

项目质量管理包括执行组织确定质量政策、目标与职责的各过程和活动,从而使项目满足其预定的需求。项目质量管理在项目环境内使用政策和程序,实施组织的质量管理体系;并以执行组织的名义,适当支持持续的过程改进活动。项目质量管理…

软件项目管理

目录 前言项目管理概述项目与软件项目项目管理与软件项目管理项目管理知识体系过程管理与软件项目管理的关系软件项目管理过程 项目初始-项目确立项目立项项目招投标项目授权 敏捷开发总结scrum模型——迭代式增量软件开发过程术语文档scrum过程 XP模型 项目初始——生存期生存…

软件项目全流程管理

1、背景(个人絮叨,只想看干货的请直接跳转至第二节) 本人工作8年,最初以研发身份进入软件行业,1年后内部转岗,开始接触项目管理、产品管理,一切从0开始。 当了两年助理,期间自学了…

项目管理-产品开发流程

一个产品的开发离不开项目管理,在之前的几家公司中,实实在在的遇到的几个现实问题,也是目前很多小公司存在的问题。 老板想开发一款产品,但是不知道从何入手,到处在找方案,平时工作明明很多事情要做&#…

禅道项目管理流

禅道项目管理流程 1、禅道项目管理流程图 2、基本步骤 1、添加账号 2、创建产品 3、创建需求 4、创建项目,关联产品,设置团队 5、关联需求 6、分解任务 7、创建bug 8、提交测试 9、创建发布 3、创建需求 模板:作为禅道用户,我…

测试管理及项目测试流程

目录 基于需求测试管理文件压缩项目1.项目启动,介入了解需求2.需求分析3.制定测试方案(计划策略)4.测试执行流程5.编写测试用例6.测试执行7.输出测试报告8.版本发布9.项目总结 练习:百度云盘测试用例 基于需求测试管理 测试目标&…