0. 前言

HSF是一个分布式的远程服务调用框架,其实我更喜欢把分布式几个字去掉,因为HSF本身并不是一个单独的服务(指一个进程),他是附属在你的应用里的一个组件,一个RPC组件(远程过程调用——Remote Procedure Call,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发分布式应用更加容易),当然HSF完全的内容肯定不止这些。

​ HSF(High-speed Service Framework),高速服务框架,是阿里系主要采用的服务框架,其目的是作为桥梁联通不同的业务系统,解耦系统之间的实现依赖。其高速体现在底层的非阻塞I/O以及优秀的序列化机制上,实现了同步和异步调用方式,并且有一套软负载体系,实现分布式应用。

1. RPC

我们先来看一张图:

很多同学看了这张图可能会觉得这跟http的过程有什么区别?

有这么一个场景(本来想举一个便具体业务的例子,想想还是已技术实现相关的比较好),监控平台:监控所有主机的状态,这时候每台主机上有一个agent,每个几秒向监控平台上传一次数据(主机内存使用率、硬盘状况、CPU、load、进程信息等等)。

可能在开发的时候最简单的方式就是监控平台有一个http接口,agent每隔几秒请求一次,能够满足需求,但是如果主机数快速增长了很多、监控项越来越多、请求体越来越大,你会发现http的传输效率下降了,每一次调用的耗时增加了。

这时我们会去研究http协议,想去优化这个过程,发现http的过程是:建立连接、发送请求信息、发送响应信息、关闭连接, 看到这个过程首先想优化的就是能不能不要每次都去建立连接关闭连接,因为数据上报是个持续的过程;紧接着去研究http头,发现很多协议用不到,繁杂,白白增加了消息体; 后来又觉得http的协议解析还原过程很复杂,可以自己开发一个提升性能……

RPC来了,他能满足这些需求,但是前提是需要开发,需要前期成本,所以想项目设计时就要去衡量,不过没事,我们有HSF啊。

我们将上图稍微改造一下:

现在从图中可以看着,client和server之间有一条长连接,并且我们有自己的协议体:RpcRequest和RpcResponse。

RPC就讲到这里,毕竟重点是HSF,想要更多的了解RPC,可以上wiki或者网上查询。

2. HSF架构

其实在我们的应用中,一般情况下你的应用不仅仅是client,也是server,因为你不仅需要去调用其他应用提供的服务,也提供服务给其他应用,所以这样一来,整个hsf的服务调用链路也会很复杂。

从上面两幅图中我们很显然的发现一个问题,就是服务提供者如何告知客户端他提供的服务,所以需要有一个服务注册与发现的地方,在HSF架构中提供这个功能的是configserver, 如下图:

从上图可以看出server端启动的时候会向configserver注册自己提供的服务,client会向configserver订阅需要的服务,configserver通过订阅信息将相关服务提供者的地址以及其他关键信息推送给client。

上面已经实现了基本的能力,但是如何动态配置负载(线程池大小)、默认配置(configserver地址等)、还有一些特性功能(如路由规则),这时候就需要有一个持久化配置中心, 如下图:

client和server启动的时候会先去diamond获取需要的配置信息,如最关键的服务注册中心的类型和地址,除此之外之外还有服务治理的类型和地址等。

重点说一下路由规则,举个例子:通过路由规则配置在服务调用的时候只调用同机房的server,这样子服务调用的耗时肯定比跨机房的耗时短。除此之外hsf里还单独写了unitService进行服务单元发布来区分中心发布,这些番外的东西以后有时间再写个番外篇,这里就不过多阐述了,毕竟这些有点偏场景偏业务的内容以后可能就改成别的方式了。

相信大家都用过hsf服务治理网站,通过这个网站可以看到有哪些服务、服务提供者的地址是多少、有多少提供者、具体的消费者是谁,hsf通过configserver、redis、diamond里的存储信息获取到这些信息。

redis功能:HSF使用Redis存储元数据, 每一个HSF Consumer/Provider 都会在启动后、每隔一段时间向redis上报元数据,这些元数据采集起来又提供给HSFOPS做服务治理,包括应用名和服务的映射、服务的元数据等。

hsf 架构_HSF原理简介相关推荐

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

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

  2. hsf 架构_HSF 服务

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

  3. linux设备驱动程序架构的研究,Linux设备驱动程序学习(12)-Linux设备模型(底层原理简介)...

    Linux设备驱动程序学习(12) -Linux设备模型(底层原理简介) 以<LDD3>的说法:Linux设备模型这部分内容可以认为是高级教材,对于多数程序作者来说是不必要的.但是我个人认 ...

  4. IT:后端进阶技术路线图(初级→中级→高级)、后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介、技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略

    IT:后端进阶技术路线图(初级→中级→高级).后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介.技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略 目录 后端 ...

  5. 量子计算机编程原理简介 和 机器学习

    量子计算机编程原理简介 和 机器学习 本文翻译自D-Wave公司网站 www.dwavesys.com/en/dev-tutorial-intro.html D-wave公司在2007年就声称实现了1 ...

  6. 领域驱动DDD原理简介与实践

    整洁架构图 依赖方向朝内,每个环可以依赖它本身这一层及其所有内部的层,但不能依赖它外部的层 Entities 用来放实体.值对象.聚合等领域模型的 业务逻辑都应该尽量内聚在这一层 这一层是最纯净的,不 ...

  7. Flink部署、使用、原理简介

    通过安装包方式部署 下载地址 https://archive.apache.org/dist/flink/flink-1.7.2/flink-1.7.2-bin-hadoop27-scala_2.11 ...

  8. 轻量级日志系统Loki原理简介和使用

    前言 这篇文章应朋友的要求,让写一篇loki日志系统,咱定义不容辞 一定要好好写 开干! 现实中的需求 公司的容器云运行的应用或某一个节点出现了问题,解决的思路 问题首先被prometheus监控 1 ...

  9. HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介

    本系列是本人对Hive的学习进行一个整理,主要包括以下内容: 1.HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介 2.HiveQL学习笔记(二):Hive基础语法与常用函数 ...

最新文章

  1. Html Agility Pack基础类介绍及运用
  2. 如何使窗体不重复被打开
  3. 如何自动校正服务器时间,几个常用校正服务器时间
  4. 【emWin】例程十六:窗口管理器
  5. 使用Win Server 2012 R2的IIS创建FTP
  6. linux清缓存命令多节点,Liunx手动释放buffers/cache内存_linux,缓存,
  7. 为jquery.AutoComplete添加触发事件
  8. SAS® Model Manager功能调研
  9. MongoDB学习笔记~官方驱动的原生Curd操作
  10. 儿童汽车拼图游戏 - 儿童游戏拼图2岁-5岁
  11. 批处理检测局域网电脑是否开机(转载)
  12. 开放平台(接口)开发-1-天气API接口大全
  13. matlab 求向量的正切,matlab中的反正切函數 | 學步園
  14. PyQt(Python+Qt)学习随笔:QTreeWidgetItem项列图标的访问方法
  15. java对opengl绑定_你好,JOGL - Java与OpenGl的绑定-Java频道-中国IT实验室
  16. 递归算法(练习习题)
  17. mysql数据库 笔试题
  18. pinctrl和gpio子系统
  19. 物联网(Iot)台灯设计完整教程(长图文)
  20. win10 nuget 无法下载_随笔--博图V14仿真软件在1200项目中不能下载?

热门文章

  1. openstack虚拟机断电导致-硬盘损坏修复xfs
  2. h5如何实现textarea根据输入内容自适应高度
  3. 与锐捷网络有限公司以线上形式进行了直接链接经营的成本企划和VE的有效应用的讲座
  4. 配偶擅自将房屋低价出售他人,怎么办?
  5. mate7 android升级包下载,Emui5.0 Mate8升级固件
  6. 也聊聊BLDC 电机的 10 大热门应用---【其利天下技术分享】
  7. linux配置网卡无效,Linux操作系统下网卡配置无效的解决方法
  8. 查看Linux系统上的文件系统磁盘使用情况 - df 命令
  9. oracle虚表(伪表)概念、作用及使用
  10. 设置白名单:让tesseract-OCR只识别指定内容