精华内容
参与话题
问答
  • HSF框架

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

    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) 扩展灵活

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

    展开全文
  • 分布式服务框架HSF简介

    千次阅读 2019-02-12 16:34:33
    高速服务框架 HSF (High-speed Service Framework),是在阿里巴巴内部广泛使用的分布式 RPC 服务框架。HSF 统一了分布式应用中服务的发布/调用方式,从而帮助您方便、快速的开发分布式应用 HSF 架构 HSF 作为一个...

    高速服务框架 HSF (High-speed Service Framework),是在阿里巴巴内部广泛使用的分布式 RPC 服务框架。HSF 统一了分布式应用中服务的发布/调用方式,从而帮助您方便、快速的开发分布式应用

    HSF 架构

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

    • 地址注册中心

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

    • 持久化配置中心

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

    • 元数据存储中心

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

    • 功能

      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 框架开发应用包含 Ali-Tomcat 和 Pandora Boot 两种方式。

    • Ali-Tomcat: 依赖 Ali-Tomcat 和 Pandora,可以提供完整的 HSF 功能,包括服务注册与发现、隐式传参、异步调用、泛化调用和调用链路 Filter 扩展、限流降级、全链路跟踪。应用程序需要以 WAR 包方式部署。

    • Pandora Boot:依赖 Pandora,可以提供完整的 HSF 功能,包括服务注册与发现、隐式传参、异步调用、泛化调用和调用链路 Filter 扩展、限流降级、全链路跟踪。应用程序可以打包成独立运行的 JAR 包并部署。相见连接:https://help.aliyun.com/document_detail/100087.html?spm=a2c4g.11186623.6.604.42fd2385dwBD8W

    展开全文
  • 阿里HSF(服务框架)

    万次阅读 2019-06-02 20:00:28
    HSF(服务框架) 简介 高速服务框架 HSF (High-speed Service Framework),是在阿里巴巴内部广泛使用的分布式 RPC 服务框架。 HSF 联通不同的业务系统,解耦系统间的实现依赖。HSF 从分布式应用的层面,统一了服务的...

    HSF(服务框架)

    简介

    高速服务框架 HSF (High-speed Service Framework),是在阿里巴巴内部广泛使用的分布式 RPC 服务框架。

    HSF 联通不同的业务系统,解耦系统间的实现依赖。HSF 从分布式应用的层面,统一了服务的发布/调用方式,从而帮助方便、快速的开发分布式应用,以及提供或使用公共功能模块,并屏蔽了分布式领域中的各种复杂技术细节,如:远程通讯、序列化实现、性能损耗、同步/异步调用方式的实现等。

    架构设计

    在这里插入图片描述

    HSF 纯客户端架构的 RPC 框架,本身是没有服务端集群的,所有的 HSF 服务调用都是服务消费方(Consumer)与服务提供方(Provider)点对点进行的。然而,为了实现整套分布式服务体系,HSF 还包含了其他组件,完整的组件如下:

    Provider——服务提供者

    通常是某个业务系统,提供相关的业务服务,一般都是个服务集群。业务系统初期使用HSF,通过引入SDK的方式。后期阿里定制化改造了容器(tomcat/docker),通过配置完成HSF的接入使用,作为架构中的服务提供方。对业务系统本身(war/jar)不造成侵入性。

    Consumer——服务消费者

    通常也是某个业务系统集群,跟服务提供者非常类型,只是服务、消费角度区别。

    ConfigServer——配置服务器

    HSF 依赖注册中心进行服务发现,如果没有注册中心,HSF 只能完成简单的点对点调用。因为作为服务提供端,没有办法将自己的服务信息对外发布,让外界知晓;作为服务消费端,可能已经知道需要调用的服务,但是无法获取能够提供这些服务的机器。而ConfigServer就是服务信息的中介,提供服务发现的能力。

    • 注册与订阅

      服务注册——在服务提供方启动时,完成该服务的注册——上报当前服务的ip:port、服务类名方法名、版本号、分组等信息。

      服务订阅——在服务消费方启动时,完成某些服务的订阅——通过订阅的服务标识(类名+方法名+版本号等),在内存中查找相关服务,一旦找到则将服务提供者的IP端口等信息推送给当前服务消费方,以便消费。

    • 长连接与内存级
      服务提供方与服务消费方均与配置服务器保持长连接,一旦服务提供方发生变化,会立即被通知,更新内存中的列表数据,并同步给订阅该服务的服务消费方。

    Diamond——持久化配置中心

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

    当需要时,用户通过在界面上设计规则,Diamond会快速的将新的规则推送给相关的服务提供方

    addressServer——地址服务

    地址服务器的职责是保存上文的ConfigServer与Diamond服务器的地址列表。在consumer、provider启动时,会首先以域名访问的方式访问地址服务器,从地址服务器获取到ConfigServer与Diamond服务器的地址列表信息,以便访问。

    元数据存储

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

    完成初始化后,服务调用者内保存了相关的服务信息,通过内部设置的调用方式(如随机访问一台,权重等)可以进行点对点的调用。
    其内部通过NIO多路复用(Netty)+Hessian序列化实现RPC调用,使用Hessian主要是压测表现出稳定性以及高效的综合特性。

    展开全文
  • HSF的原理分析

    万次阅读 多人点赞 2017-05-19 00:02:01
    一.HSF的基本概念 HSF全称为High-Speed Service Framework,旨在为淘宝的应用提供一个分布式的服务框架,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) 扩展灵活

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

     

     

     

    展开全文
  • HSF框架基本介绍

    千次阅读 2019-01-16 14:37:32
    HSF介绍 HSF全称high speed frameworkd,是Alibaba内部使用的RPC框架,最初与Dubbo进行内部竞争,由于多方面的原因最终选择了HSF。 主要原因如下: HSF代码量少一些,轻量一些,代码量大概2/3, Dubbo设计更加全面...
  • HSF简介

    万次阅读 2019-01-25 11:03:20
    阿里巴巴集团内部使用的分布式服务框架 HSF(High Speed Framework,也有人戏称“好舒服”)已经被很多技术爱好者所熟知,目前已经支撑着近 2000 多个应用的运行。  其对应早期的开源项目 Dubbo(因为某些原因,...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • HSF

    2018-02-04 16:32:10
    阿里云 EDAS-HSF 用户指南  https://www.cnblogs.com/longshiyVip/p/4823305.html HSF以高性能网络通信框架为基础,提供了诸如服务发布与注册,服务调用,服务路由,服务鉴权,服务限流,服务降级和服务调用...
  • HSF原理剖析

    千次阅读 2017-06-29 14:47:53
    HSF是一个分布式的远程服务调用框架,HSF本身并不是一个单独的服务(指一个进程),他是附属在你的应用里的一个组件,一个RPC组件(远程过程调用——Remote Procedure Call,是一种通过网络从远程计算机程序上请求...
  • 回溯法

    千次阅读 2017-01-02 16:36:25
     回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法,这种方法适用于解一些组合数相当大的问题。回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索...
  • [回溯算法] 五大常用算法之回溯法

    万次阅读 多人点赞 2018-02-12 14:40:46
    算法入门6:回溯法一. 回溯法 – 深度优先搜素 1. 简单概述 回溯法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解...
  • n皇后问题-回溯法求解

    万次阅读 多人点赞 2018-07-03 19:19:56
    n皇后问题-回溯法求解 1.算法描述 在n×n格的国际象棋上摆放n个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 n皇后是由八皇后问题演变而来的。该问题是...
  • 回溯法小结

    千次阅读 2015-12-31 11:12:18
    背景介绍:回溯法是一种穷举类型的算法,与其说它是一种算法,倒不如说它是一种试法。回溯法并没有什么高深的算法思想,虽然名字起的很高规格,但其实它的算法性连二分查找都比不上。这里说的算法性其实就是指技巧性...
  • 回溯法(八皇后问题)及C语言实现

    万次阅读 多人点赞 2018-09-15 15:57:43
    回溯法,又被称为“试探法”。解决问题时,每进行一步,都是抱着试试看的态度,如果发现当前选择并不是最好的,或者这么走下去肯定达不到目标,立刻做回退操作重新选择。这种走不通就回退再走的方法就是回溯法。 ...
  • 回溯法以深度优先策略搜索解空间树。 1. 用回溯法解题时,要明确定义问题的解空间树。 2. 通常将解空间树组织成树或图的形式。 回溯法求解问题的所有解时,要回溯到根,且根节点的所有子树都已被搜索到才结束; ...
  • 回溯法与枚举法

    千次阅读 2018-08-30 10:42:53
    1 回溯法应用 回溯法,顾名思义,生活中有一类人,很执拗,比如我,不到黄河心不死,到了黄河怎么办?往回走呗,难不成跳下去? 回溯法解决的问题有全排列,全组合,枚举什么的。 比如,给定一串不重复字母,让你...
  • 0027算法笔记——【回溯法回溯法与装载问题

    万次阅读 多人点赞 2013-04-05 21:10:57
    1、回溯法  (1)描述:回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。  (2)原理: ...
  • 回溯法解决各种问题

    千次阅读 2018-12-18 17:23:34
    回溯法 – 深度优先搜素                        1. 简单概述     &...

空空如也

1 2 3 4 5 ... 20
收藏数 60,039
精华内容 24,015
关键字:

hsf