淘宝HSF 框架使用 总结

@(JAVA开发)

淘宝HSF 框架使用 总结

随着网站访问量增加,仅仅靠增加机器已不能满足系统的要求,于是需要对应用系统进行垂直拆分和水平拆分。在拆分之后,各个被拆分的模块如何通信?如何保证性能?如何保证各个应用都以同样的方式交互?这就需要一种负责各个拆分的模块间通信的高性能服务框架(HSF)

这三个单词分别是 high-speed-framework 翻译过来的话因该是高速框架之类的,但据说淘宝内部也不这么叫,更多的都是叫 “好舒服”,汉语的三个开头拼音,其实我感觉更加形象和亲民。

介绍完毕,那么talk is cheap show you my code .

正常情况下,我们用tomcat 运行我们的应用的时候,是直接放在部署在tomcat下的。淘宝对tomcat 做了一个封装,因此我们需要下载淘宝的tomcat。

HSF做的事情
  1. 标准Service方式的RPC 
    1)service定义:基于OSGI的service定义方式 
    2)TCP/IP通信: 
    IO方式:nio,采用mina框架 
    连接方式:长连接 
    服务器端有限定大小的连接池 
    WebService方式 
    3)序列化:hessian序列化机制
  2. 软件负载体系 
    采用软件实现负载均衡,支持随机、轮询、权重、按应用路由等方式。软件负载均衡没有中间点,通过配置中心统一管理。配置中心收集服务提供者和消费者的注册信息,以推送的方式发送到服务消费者直接使用,不经过中间点;注册中心可以感应服务器的状态,出现failover时,实现注册信息重新推送。
  3. 模块化、动态化
  4. 服务治理 
    服务治理利用注册中心实现服务信息管理(服务提供者、调用者信息查询)、服务依赖关系分析、服务运行状况感知、服务可用性保障,如:路由调整、流量分配、服务端降级、调用端降级等

Pandora 是 HSF 生存的容器,对于 HSF2.X 来说,HSF 只是作为 hsf.jar.plugin 这个插件, 存活在 pandora 中,由 pandora 来管理整个 HSF 的生命周期和二方包的隔离,以后就没有 HSF 版本这一说,只有 pandora 的版本,其中 HSF 的版本由 pandora 来指定。

服务提供者

<!-- 服务提供者 -->
<bean id="customerManageServer" class="com.taobao.hsf.app.spring.util.HSFSpringProviderBean"
    init-method="init">
    <property name="serviceInterface">
        <value>com.tydic.custdemo.service.CustomerServerService</value>
    </property>
    <property name="target">
        <ref bean="customerServerService" />
    </property>
    <property name="serviceVersion">
        <value>G6_liuce_0.1</value>
    </property>
    <property name="serviceGroup">
        <value>TYDIC_CUSTDEMO_GROUP</value>
    </property>
    <property name="serviceName">
        <value>customerManageServer</value>
    </property>
</bean>

1. JBoss 服务器启动后,启动HSF SAR 应用(即taobao.hsf.sar,本地开发机放在%DEPLOY_DIR%中,线上机器放置在 /home/admin/${appName}/target下)2. 应用自身启动,Spring 容器初始化。这时:HSFSpringProviderBean: 会进行初始化,将向config server 注册当前这个bean 服务。这一注册过程,简单理解其实就是告诉config server:IP 为xxx.xxx.xxx.xxx 的机器提供了xxx 服务。这??,config server 就可以??据服务调用者的请求中的服务名来转发推送服务地址了。 HSFSpringConsumerBean: 会进行初始化,将向config server 订阅当前这个bean 服务,过程可以简单理解为:告诉config server:IP 为 xxx.xxx.xxx.xxx 的需要提供xxx 服务,Config server 就会??据这一服务名返回给应用相应的服务地址。

3. 在HSF 服务调用者订阅到服务地址后,就可以使用该服务地址执行服务调用了。一个HSF 服务通常并不是由一台机器提供的,所以,订阅到的 服务地址通常是一个地址列表,里面包含了所有提供了该服务的地址。HSF 会随机选择一个服务地址进行服务调用。如下图所示。

服务提供者和服务调用者的组名字需要相同 不是相同一个组的,负责五无法调用

*

 target:为对应服务的具体实现,也是一个 Spring Bean,必须配置。

* serviceInterface:定义了对外提供服务的接口,必须配置(与版本号一起作为服务名)。 

    * serviceVersion:为服务的版本号,可以利用版本号来区分服务(与接口名一起作为服务名),必须配置。

    * <property name="serviceGroup"><value>HSF</value></property>
    * serviceName:用于方便管理的服务名称,并非服务的 dataId,可选配置,推荐使用, 默认为 null。

    * serviceInterface:定义了对外提供服务的接口,必须配置 (与版本号一起作为服务名)。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
<!-- 普通消息生产者配置  -->
 <bean id="PID_common" class="com.aliyun.openservices.ons.api.impl.rocketmq.ProducerImpl" init-method="start" destroy-method="shutdown" >
       <constructor-arg>  //构造器注入
              <props>
                 <prop key="ProducerId" >PID_common </prop>
                     <prop key="AccessKey" >${AccessKey} </prop>
                     <prop key="SecretKey" >${SecretKey} </prop>
                </props>
       </constructor-arg>
 </bean >
 <!-- 普通消息生产者使用类属性配置  -->
 <bean id="baseProducer" class="com.tydic.base.ons.BaseProducer" >
       <property name= "topic" value ="TOPIC_G6_KXW"/>
       <property name= "tag" value="MSG_DEDUCT_BALANCE" />
       <property name= "producer" ref="PID_common" ></property>
 </bean >
时间: 2024-10-12 23:13:29

淘宝HSF 框架使用 总结的相关文章

淘宝SOA框架dubbo学习(2)--搭建Zookeeper注册中心服务

淘宝SOA框架dubbo学习(1) http://my.oschina.net/hanshubo/blog/374974 1.下载 Zookeeper 下载页面地址: http://www.apache.org/dist/zookeeper/zookeeper-3.4.6/ 注:下面步骤,windows和linux下几乎没什么太大区别 2.解压缩后进入 C:\zookeeper-3.4.6 目录结构如下图 3.进入conf目录 备份zoo_sample.cfg文件,然后将zoo_sample.c

【转载】淘宝架构框架发展史

转自 http://www.361way.com/taobao-architecture/1948.html      一.个人网站  2003 年 4 月 7 日,马云,在杭州,成立了一个神秘的组织.他叫来十位员工,要他们签了一份协议,这份协议要求他们立刻离开阿里巴巴,去做一个神秘的项目.这个项目要求绝对保密,老马戏称“连说梦话被老婆听到都不行,谁要是透漏出去,我将追杀到天涯海角”.这份协议是英文版的,匆忙之间,大多数人根本来不及看懂,但出于对老马的信任,都卷起铺盖离开了阿里巴巴. 他们去了一

淘宝架构框架

   一.个人网站  2003 年 4 月 7 日,马云,在杭州,成立了一个神秘的组织.他叫来十位员工,要他们签了一份协议,这份协议要求他们立刻离开阿里巴巴,去做一个神秘的项目.这个项目要求绝对保密,老马戏称"连说梦话被老婆听到都不行,谁要是透漏出去,我将追杀到天涯海角".这份协议是英文版的,匆忙之间,大多数人根本来不及看懂,但出于对老马的信任,都卷起铺盖离开了阿里巴巴. 他们去了一个神秘的据点 -- 湖畔花园小区的一套未装修的房子里,房子的主人是马云.这伙人刚进去的时候,马云给他们布

高效、稳定、可复用——手机淘宝主会场框架详解

导读: 为了让消费者在大促时能更快挑选到商品和进行平台的营销互动,手机淘宝都会有一个页面来承载大促的核心内容和主要的营销要素,称之为主会场.本文重点分享 了从技术和业务上如何提升主会场效能,将浏览体验做到最优,让用户能够更快地找到自己感兴趣的内容,提高转化率,应对任何业务变化,保障大促的顺利进行. 每次为了让消费者在大促时能更快挑选到商品和进行平台的营销互动,都会有一个页面来承载大促的核心内容和主要的营销要 素,我们称之为主会场.以前主会场开发,都是前端通过页面搭建系统或者以源码方式制作PC页面

淘宝SOA框架dubbo学习(5)--结果缓存

1.客户端和服务提供端共用接口类 ? 1 2 3 4 5 package com.alibaba.dubbo.demo; public interface CacheService {     String findCache(String id); } 2.服务提供端接口实现类 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package com.alibaba.dubbo.demo.provider; import java.util.conc

淘宝SOA框架dubbo学习(7)--异步调用

直接上代码: 1.服务提供端及客户端共享代码 package com.alibaba.dubbo.demo; public interface DemoService2 {     Person getPersion(String name); } package com.alibaba.dubbo.demo; import java.io.Serializable; public class Person implements Serializable {     private static

淘宝SOA框架dubbo学习(3)--搭建监控中心

紧接上一篇,继续我的dubbo的学习之旅 1.下载监控中心dubbo服务安装包 下载地址: http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-monitor-simple/2.4.1/dubbo-monitor-simple-2.4.1-assembly.tar.gz 注:此地址,可能下载不了,我是群共享文件里,下载的 2.解压缩后,编辑conf/dubbo.properties 内容如下: ? 1 2 3 4 5 6 7 8

淘宝SOA框架dubbo学习(1)--first demo

部署开发,需要三部分:服务提供者.服务容器.服务消费者 本人用 eclipse 开发 1.服务提供者jar生成 A.项目截图 B.源码: ? 1 2 3 4 5 package com.alibaba.dubbo.demo; public interface DemoService {     String sayHello(String name); } ? 1 2 3 4 5 6 7 8 9 package com.alibaba.dubbo.demo.provider; import co

淘宝SOA框架dubbo学习(4)--参数验证

1.由于没用maven,和对dubbo不是很了解的原因,这次,总因为jar包不对,而导致:dubbo客户端程序,启动不起来 所以决定:将原来用过的所有jar包全部去,将dubbo-demo-provider-2.5.4-SNAPSHOT/lib下的所有jar包全部导入项目中 一切就OK了 2.服务消费者代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34