前言

此前用 node 对接过一段时间的 HSF 服务,竟不知分寸地一头扎进 node 模块源码里,也没得出个所以然。直到今天偶然在《企业IT架构转型之道:阿里巴巴中台战略思想与架构实战》这本书读到有关 HSF 的内容,才理解了 HSF 实现的大致原理。心中一阵感慨。

“他山之石,可以攻玉”。谨以这篇短文留念。

HSF

HSF 全称 High Speed Framework 高速服务框架,是阿里内部广泛使用的 RPC 框架。不同于 ESB 企业服务总线,HSF 实现了服务调用方(Consumer)和服务提供方(Provider)的点对点通信。在 HSF 框架中,地址服务器用于维护全量服务器(包含服务调用方和服务提供方)和 Diamond 服务器列表信息;配置服务器用于记录服务发布(服务提供方发布了哪些服务)和服务订阅(服务调用方需要哪些服务)信息,并将相关信息推送到对应的服务器上,如配置服务器会将服务提供方的相关信息推送给服务调用方。配置服务器与服务提供方、服务调用方均保持长连接,采用心跳的方式监控各服务运行节点的状况,以便剔除故障的服务提供方。HSF 通过 ip 和端口号锁定服务提供方或服务调用方;通过服务名和版本号定位服务(因此,通过指定服务名和版本号可以直连本地服务器)。首先服务提供方会在配置服务器中完成服务的注册发布,然后服务调用方会在配置服务器中订阅服务,以便配置服务器即时推送服务提供方的 ip 和端口。为了服务发布、订阅、推送的负载均衡,生产环境上的配置服务器一般会配置多台,且在不同的配置服务器之间会作实时的数据同步。

每一个 HSF 的应用均以 War 包形式存在,运行在 Ali-Tomcat 容器中。Ali-Tomcat 容器层已经集成了 HSF 服务框架对服务提供者或服务调用者进行配置服务器发现、服务注册、订阅、失效转移等相关功能,所以不管是在服务提供者还是调用者开发时,只需要进行服务相关的配置操作,应用中无需引入任何 HSF 相关的 Jar 包。

在服务提供方和服务调用方的点对点通信中,服务调用者会从服务提供者列表中随机选择一台进行通信,无需通过 ESB 中转,因此就形成“去中心化”的服务架构。当请求的服务提供方故障时,服务调用者会获得失败反馈,继而从剩下的服务提供者列表中选择一台再次通信,这就是 HSF 服务的容错机制;同时配置服务器与服务提供方的长连接通信,允许配置服务器及时剔除故障的服务提供方并推送到服务调用方。HSF 的线性扩展能力在于,只要启动一台新的服务提供方服务器,并由配置服务器推送给服务调用方,即可以分摊服务调用的压力。

Diamond

Diamond 服务器用于推送统一的配置服务。在 HSF 中,Diamond 主要用于:

  1. 通过设置白名单使某些服务调用方的服务只被特定 IP 地址的服务器调用。
  2. 通过用户认证的方式控制服务是否能被调用。
  3. 按照不同的服务路由权重设置服务调用方对多个服务提供方服务节点的访问。
  4. 设置某些服务的 QPS 能力上限值,实现限流。

Diamond 会将这些规则保存在在自身的 MySql 中,并将这些规则推送到相关的服务节点上,使这些规则能立即在服务运行环境中生效。

通信和序列化协议

HSF 框架使用网络通信框架 Netty、Hession 数据序列化协议实现服务器键的交互。这类 RPC 协议采用多路复用的 TCP 长连接方式,即在服务提供方和调用方点对点通信期间会共用同一个长连接,以传输不同的请求块。Hessian 数据序列化协议精简高效,同时可以跨语言使用。另外 Hessian 可以充分利用 Web 容器的成熟功能,在处理大量用户访问时很有优势,在资源分配、线程排队、异常处理等方面都可以由 Web 容器保证。

参考

HSF简介(摘自《企业IT架构转型之道》)

HSF 概述

hsf 架构_HSF 服务相关推荐

  1. hsf 架构_HSF源码剖析 - 汪兴的个人空间 - OSCHINA - 中文开源技术交流社区

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

  2. hsf端口_HSF 服务

    前言 此前用 node 对接过一段时间的 HSF 服务,竟不知分寸地一头扎进 node 模块源码里,也没得出个所以然.直到今天偶然在<企业IT架构转型之道:阿里巴巴中台战略思想与架构实战> ...

  3. hsf 架构_HSF原理简介

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

  4. hsf端口_hsf服务

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  5. Spring Cloud构建微服务架构:服务容错保护(Hystrix断路器)

    断路器 断路器模式源于Martin Fowler的Circuit Breaker一文."断路器"本身是一种开关装置,用于在电路上保护线路过载,当线路中有电器发生短路时," ...

  6. 亿级流量电商详情页系统实战:缓存架构+高可用服务架构+微服务架构

    <缓存架构+高可用服务架构+微服务架构>深入讲解了亿级流量电商详情页系统的完整大型架构.同时最重要的是,在完全真实的大型电商详情页系统架构下,全流程实战了整套微服务架构,包含了基于领域驱动 ...

  7. Spring Cloud构建微服务架构:服务注册与发现(Eureka、Consul)【Dalston版】

    Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...

  8. spring cloud+dotnet core搭建微服务架构:服务发现(二)

    前言 上篇文章<手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)>实际上只讲了服务治理中的服务注册,服务与服务之间如何调用呢?传统的方式,服务A ...

  9. Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)【Dalston版】

    前言 在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服 ...

最新文章

  1. POJ 2749 Building roads
  2. Android之Providing Resources(提供资源)
  3. php js 异步上传图片,javascript实现异步图片上传方法实例
  4. ios开发中,User Defined Runtime Attributes的应用
  5. C++中的 c_str() 函数
  6. lsnrctl status区分静态注册与动态注册
  7. python路径拼接os.path.join()函数和os.makedirs的用法
  8. 【渝粤题库】国家开放大学2021春1373特殊教育概论题目
  9. js+获取当前域名及跳转、下载操作
  10. 手把手教你学node之搭建node.js开发环境
  11. matlab 函数整理(资料备份儿)
  12. LaTeX的语法问题及写作模板汇总
  13. PDFEdit编辑器使用教程为PDF增加封面
  14. 软件工程专业的论文答辩_软件工程论文答辩开场白范例
  15. Nooploop空循环 TOFSense激光测距传感器 模块 红外测距测高
  16. MVVM模式基于开源VLC解码器WPF万能视频播放器
  17. 怎么解决文件正在使用无法删除----资源监视器
  18. Android通用适配器CommonAdapter
  19. gee微端服务器系统设置,Gee引擎微端服务器
  20. 百度的搜索引擎相关技术的分析

热门文章

  1. Fedora下如何删除以前的老内核
  2. position 定位
  3. Oracle 11g AMM与ASMM切换
  4. VMRC控制台的连接已断开..正在尝试重新连接
  5. C#对图片文件的压缩、裁剪操作初探
  6. 网络视频:企业营销新机遇
  7. idea本地跑如何看gc日志_不可思议,竟然还有人不会查看GC垃圾回收日志?
  8. jQuery中的.bind()、.live()和.delegate()之间区别分析
  9. jquery 常用方法 delegate() siblings() closest() indexOf() substring()
  10. php 自定义属性,HTML5的data-*自定义属性是什么-