简介:专有云传统HSF升级Pandora Boot开发

本次最佳实践,分析传统HSF应用的劣势及升级至Pandora Boot开发的优势。将结合HSF代码和Pandora Boot代码进行详解传统HSF应用如何升级至Pandora Boot开发。
背景信息
HSF开发应用的劣势在于HSF要使用指定的Ali-Tomcat容器,还需要在Ali-Tomcat等容器中加入sar包扩展,对用户运行环境的侵入性大。而HSF开发的应用程序最终以WAR包的形式运行,不符合微服务设计的轻量应用理念。并且开发过程注入Bean需要编写较多的xml文件配置。
而Pandora Boot开发应用的优势就在于依赖容器Pandora,不需要Ali-Tomcat。而且Pandora Boot开发也兼容了完整的HSF功能,同时与Spring Boot无缝集成。所以使用Pandora Boot的同时也可以引入Spring Boot提供开箱即用的依赖模板。快速、敏捷的开发Spring框架的应用程序,享受开发的便利。
Pandora Boot开发的应用最终以FatJar包的形式运行,并且Pandora环境也可以直接在IDE中启动,开发调试等效率将得到极大的提高。而Pandora Boot注入Bean通过注解的方式,也减少了繁杂的xml配置文件编写,提高开发效率。
因为在传统客户中有HSF应用升级至Pandora Boot开发的需求,所以针对客户的需要,本次最佳实践将详细描述传统HSF应用和PandoraBoot应用的开发,使单体微服务应用的敏捷开发及拓展性有所提高。
HSF环境介绍及准备
产品组件
- Ali-Tomcat是EDAS中的服务运行依赖的一个容器,支持Servlet 3.0规范,支持WebSocket。包含服务的发布、订阅、调用链追踪等一系列的核心功能。
- Pandora是一个轻量级的隔离容器-taobao-hsf.sar,它用来隔离Webapp和中间件的依赖,也用来隔离中间件之间的依赖,并实现部署与应用分离。
- 轻量级配置中心(Diamond)是淘宝内部广泛使用的配置中心,提供持久化管理和动态配置推送服务。应用方发布的配置会通过持久化存储保存,与发布者的生命周期无关。
- 动态配置推送是Diamond的核心功能,在淘宝内部有很多应用场景,如数据库动态切换和扩容,业务系统开关配置运行时变更等。
- 轻量级注册中心(ConfigServer):主要用于非持久数据的发布和订阅、数据的生命周期和TCP连接生命周期绑定、产品架构基于发布订阅模型和去中心无master设计,保证了系统的可扩展性、高可用。在集团内部主要场景为分布式消息系统Notify、分布式RPC框架HSF提供地址发现服务。
基本结构
HSF结构分为6个部分,共同组合在一起可以提供全功能的分布式服务,分别是:
- 服务消费方:消费服务提供方提供的服务,服务消费者通过地址注册中心订阅服务,根据订阅到的地址信息发起调用,地址注册中心作为旁路不参与调用。
- 服务提供方: 在服务框架中真正提供服务功能实现的应用实例,为了保障服务提供的高可用性,一般均是集群部署,同时将地址信息发布到地址注册中心。
- 地址注册中心:接受服务提供方发布的地址,当服务消费方根据服务进行订阅时,会将地址信息推送给服务消费方,注册中心就是服务信息的中介,提供服务发现的能力
- 持久化配置中心:持久化的配置中心用于存储 HSF 服务的各种治理规则,HSF 客户端在启动的过程中会向持久化配置中心订阅各种服务治理规则,如路由规则、归组规则、权重规则等,从而根据规则对调用过程的选址逻辑进行干预。
- 元数据存储中心:元数据是指 HSF 服务对应的方法列表以及参数结构等信息,元数据不会对 HSF 的调用过程产生影响,因此元数据存储中心也并不是必须的。但考虑到服务运维的便捷性,HSF客户端在启动时会将元数据上报到元数据存储中心,以便提供给服务运维使用
- HSF运维平台(HSF控制台):HSF 控制台通过打通地址注册中心 ConfigServer、持久化配置中心 Diamond、元数据存储中心Redis,为用户提供了一些列服务运维功能,包括服务查询、服务治理规则管理、服务测试、服务 Mock、单机运维等,旨在提高 HSF 服务研发的效率、运维的便捷性。
环境准备流程步骤
在进行开发前,需要准备以下基本内容:
- JDK基础运行环境:正确安装JDK 7+,正确配置JAVA_HOME环境变量。
- MAVEN环境及构建HSF MAVEN工程:添加打war包与HSF开发编译依赖。
- 开发IDE:推荐Eclipse或IDEA。
- Eclipse配置:Tomcat4e插件+Pandora配置。
- IDEA:配置AliTomcat+Pandora。
- 轻量级配置中心:HSF服务的发布与订阅。
Pandora Boot环境介绍及准备
产品组件
- Pandora:一个轻量级的隔离容器-taobao-hsf.sar,它用来隔离Webapp和中间件的依赖,也用来隔离中间件之间的依赖,也实现部署与应用分离。
- 轻量级配置及注册中心:对于开发者可以在本地使用轻量级配置及注册中心实现应用的注册、发现与配置管理,完成应用的开发和测试。本地开发完应用托管到EDAS服务上,EDAS内置注册及配置中心,因此注册及配置功能仍然可以正常使用。
基本结构
HSF结构分为6个部分,共同组合在一起可以提供全功能的分布式服务,分别是:
- 服务消费方:消费服务提供方提供的服务,服务消费者通过地址注册中心订阅服务,根据订阅到的地址信息发起调用,地址注册中心作为旁路不参与调用。
- 服务提供方: 在服务框架中真正提供服务功能实现的应用实例,为了保障服务提供的高可用性,一般均是集群部署,同时将地址信息发布到地址注册中心。
- 地址注册中心:接受服务提供方发布的地址,当服务消费方根据服务进行订阅时,会将地址信息推送给服务消费方,注册中心就是服务信息的中介,提供服务发现的能力
- 持久化配置中心:持久化的配置中心用于存储 HSF 服务的各种治理规则,HSF 客户端在启动的过程中会向持久化配置中心订阅各种服务治理规则,如路由规则、归组规则、权重规则等,从而根据规则对调用过程的选址逻辑进行干预。
- 元数据存储中心:元数据是指 HSF 服务对应的方法列表以及参数结构等信息,元数据不会对 HSF 的调用过程产生影响,因此元数据存储中心也并不是必须的。但考虑到服务运维的便捷性,HSF客户端在启动时会将元数据上报到元数据存储中心,以便提供给服务运维使用
- HSF运维平台(HSF控制台):HSF 控制台通过打通地址注册中心 ConfigServer、持久化配置中心 Diamond、元数据存储中心Redis,为用户提供了一些列服务运维功能,包括服务查询、服务治理规则管理、服务测试、服务 Mock、单机运维等,旨在提高 HSF 服务研发的效率、运维的便捷性。
环境准备流程步骤
在进行开发前,需要准备一下基本内容:
- JDK基础运行环境:正确安装JDK 7+,正确配置JAVA_HOME环境变量。
- MAVEN环境及构建Pandora Boot MAVEN工程:添加打FatJar包与Pandora Boot开发编译依赖。
- 开发IDE:推荐Eclipse或IDEA。
- Eclipse配置:启动Pandora Boot应用主函数自动加载Pandora容器。
- IDEA配置:启动Pandora Boot应用主函数自动加载Pandora容器。
- 轻量级注册及配置中心:Pandora Boot应用的注册、发现及配置管理。
HSF开发流程及流程图
开发流程节点:
- 服务接口:HSF的服务基于接口实现,接口需在服务设计时预先定义设计好,生产者将实现该接口以提供具体的实现来提供服务,消费者也是基于此接口作为服务去订阅。
- 服务生产者:生产者将实现之前定义的服务接口以提供具体实现,除了代码实现的工作之外,由于HSF是基于Spring框架来实现的,所以还需要再定义服务发布的XML文件。
- 服务消费者:消费者基于接口使用服务,具体调用时需要做两个步骤
-
- Pandora Boot 的配置文件使用注解@HSFConsumer定义好一个 Bean。
- 在使用的时候从 Spring 的 context 中将 Bean 取出。

图 1. 流程图
开发HSF应用
背景信息
- 无缝兼容:HSF与Spring无缝兼容,标准用法使用Spring的xml配置。
- 标准schema:提供hsf:provider,hsf:consumer两个标准的xml格式。
- 代码无侵入:使用xml方式开发时,代码不需要感知HSF框架,而且POM中只需要引入edas-sdk。
- 框架与WAR包分离:最终输入的war,不需要包含HSF框架,HSF框架依赖AliTomcat+Pandora方式提供。
您需要按以下步骤构建HSF maven工程:
- 构建maven工程,创建完maven工程后,在pom.xml文件中定义添加edas-sdk和spring的依赖。
<dependencies> <!-- 添加 servlet 的依赖 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> <version>2.5.6</version> <type>jar</type> <scope>compile</scope> </dependency> <!-- 添加 edas-sdk 的依赖 --> <dependency> <groupId>com.alibaba.edas</groupId> <artifactId>edas-sdk</artifactId> <version>1.5.4</version> </dependency> </dependencies>
- 在pom.xml文件中添加HSF应用的maven打包插件。
<build> <finalName>itemcenter</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build>
定义服务接口
HSF服务基于接口实现调用,定义好接口Sayhello后,生产者将使用该接口实现具体的服务,消费者也基于此接口订阅服务,所以一般会将接口定义在一个工程中,它会打成一个jar包,发布到maven仓库中。下面是公共模块edasdemo-api接口定义代码:
package com.edas.demo; public interface Sayhello { public String sayHello(); public String sayHello(String name); }
编写HSF服务提供者
- 编写HSF提供者服务除构建HSF maven工程外,服务提供者需要在pom.xml文件中引入公共模块工程的依赖。
<dependency> <groupId>com.edas.demo</groupId> <artifactId>edasdemo-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
- 服务提供者实现接口提供具体的服务,然后发布对应的服务。
package com.edas.demo; public class SayhelloImpl implements Sayhello { public String sayHello() { System.out.println("INFO:执行一次Hello"); return "Hello!"; } public String sayHello(String name) { return "你好"+name; } }
- 在hsf-provider-beans.xml中Spring配置HSF服务。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hsf="http://www.taobao.com/hsf" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.taobao.com/hsf http://www.taobao.com/hsf/hsf.xsd" default-autowire="byName"> <bean id="sayHello" class="com.edas.demo.SayhelloImpl" /> <!-- 提供一个服务示例 --> <hsf:provider id="sayHelloProvider" interface="com.edas.demo.Sayhello" ref="sayHello" version="1.0.0"> </hsf:provider> </beans>
编写HSF服务消费者
- 编写消费者服务除构建HSF maven工程外,服务消费者需要在pom.xml文件中引入公共模块工程的依赖。
<dependency> <groupId>com.edas.demo</groupId> <artifactId>edasdemo-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
- 在hsf-consumer-beans.xml中Spring配置HSF服务。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hsf="http://www.taobao.com/hsf" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.taobao.com/hsf http://www.taobao.com/hsf/hsf.xsd" default-autowire="byName"> <!-- 消费一个服务示例 --> <hsf:consumer id="sayHello" interface="com.edas.demo.Sayhello" version="1.0.0"> </hsf:consumer> </beans>
- 编写服务消费者基于接口调用服务提供者的代码SayhelloServlet。
public class SayhelloServlet extends HttpServlet { private static fin

最低0.47元/天 解锁文章
3995

被折叠的 条评论
为什么被折叠?



