zoukankan      html  css  js  c++  java
  • 淘宝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 >
  • 相关阅读:
    actionbar中添加searchview并监听期伸缩/打开的方法
    Java基础学习总结(87)——坚持写Java等技术类博客的好处
    Nginx学习总结(3)——Nginx配置及应用场景之高级配置
    [置顶] 软件版本命名规范及各阶段说明
    戏说云计算之PaaS,IaaS,SaaS
    App后台开发运维和架构实践学习总结(4)——APP的注册和登录功能设计
    Maven学习总结(30)——Maven项目通用三级版本号说明
    Java Web学习总结(29)——Java Web中的Filter和Interceptor比较
    养成10个优秀的习惯
    Java基础学习总结(86)——Java异常处理机制Exception抛出异常时throw和throws用法详解
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/7496856.html
Copyright © 2011-2022 走看看