基于OSGi的服务协作总线的设计与实现

Download Report

Transcript 基于OSGi的服务协作总线的设计与实现

答辩人:窦文生
导 师:魏 峻 研究员
单 位:软件工程技术研究开发中心

研究背景

主要工作
◦ 服务协作总线概念架构
◦ 基于OSGi的服务协作总线
◦ OnceSCB系统设计与实现

总结与进一步工作

研究背景

主要工作
◦ 服务协作总线概念架构
◦ 基于OSGi的服务协作总线
◦ OnceSCB系统设计与实现

总结与进一步工作

业务变更频繁,功能日益复杂

非功能属性要求逐渐提高

由单机系统逐步演化为分布式系统

存在大量异构系统
功能性
分布化
异构系统
非功能性

多样化的软件开发方法
◦ 如何快速开发组件和服务

保持系统长期运行
◦ 如何动态部署新组件和服务
◦ 如何适应动态可变的运行环境
◦ 如何管理组件和服务的生命周期管理

异构系统集成
◦ 服务的发布和使用
◦ 重用现有组件和服务,集成异构系统(Web服务、Jini服
务、RMI等)

服务计算解决方案
◦ SOA利用服务作为基本的构造单元,支持异构环境下的分
布式应用的快速、低成本的组合式开发
◦ 面向服务架构支持松散耦合的企业应用

服务计算存在的问题
◦ SOA架构关注企业服务松散耦合和服务编排,忽视了企
业服务运行时刻的动态部署;
◦ SOA架构缺少成熟的服务生命周期管理机制;
◦ SOA架构缺少了模块化开发方法和标准的服务模型

OSGi提供一个面向服务、基于组件的开发方法,易
于构建模块化、动态、可扩展的系统
◦ 基于Bundle的组件模型
◦ 动态模块管理机制
◦ 组件和服务生命周期管理

OSGi存在的问题
◦ 仅支持单容器运行,不支持远程协作
◦ 不支持远程服务的管理
◦ 不支持远程服务发布与发现

利用OSGi在服务部署、生命周期管理、模块化开发
方面的优势,并弥补其分布式计算领域的不足,形
成一个基于服务协作的动态服务计算环境。
◦ 基于OSGi的组件和远程服务开发方法
◦ 基于OSGi的远程服务部署与发布机制
◦ 基于OSGi的远程服务访问机制
◦ 基于OSGi的远程服务生命周期管理机制

研究背景

主要工作
◦ 服务协作总线概念架构
◦ 基于OSGi的服务协作总线
◦ OnceSCB系统设计与实现

总结与进一步工作

服务协作总线
◦ 服务协作总线是一种松散耦合的服务和应用之间的标准集
成方式,它是实现服务智能化集成与管理的中介。同时提
供统一的服务部署,服务发布、发现和调用机制,服务生
命周期管理,支持服务之间良好的协作。

服务协作总线功能
◦
◦
◦
◦
◦
◦
支持多种服务通讯协议,支持不同系统的服务整合;
支持服务元数据管理,提供灵活的服务发布、查找等机制;
支持系统行为的动态改变,以及运行时动态部署和调整;
支持系统中组件和服务的生命周期管理;
支持位置透明的寻址服务;
支持模块化软件开发方法。

开放性
◦ 服务协作总线是一种“即插即用”的集成框架,降低了应用程序之
间和服务之间的耦合度,利于构建动态的分布式系统

透明性
◦ 访问透明性:服务协作总线为用户建立一个虚拟的服务协作平台
◦ 重定位透明性:当服务发生变化时,服务协作总线将自动调整服务
服务A
服务B
服务C
服务协作总线
...


服务协作总线为服
务提供者提供服务
的封装、发布和生
命周期管理
服务协作总线为服
务请求者提供标准
的OSGi服务调用方
式,实现透明的远
程服务调用
应用
服务
应用层
本地服务
使用
OSGi远程
服务调用
Web服务调
用
服务接入
服务
协作
总线
服务管理
服务发布
服务适配
服务层
本地OSGi
服务
远程OSGi
服务
服务发现
服务路由
服务注册库
Web服务
其他服务
发现模式
Web
服务
服务提供者
服务交互
服务提供者2
服务交互
服务容器模式
服务实现逻辑
多服务协作总线协作模式
布
查
、
找
服务
发现
发
服务
服务
注册库
务
服务
注册库
服
注册

找

OSGi
服务
服务提供者1
布
、
查
服务交互
发
Web
服务
务
OSGi
服务
服务协作总线
注册
服务协作总线
服务调用逻辑
服务使
用者
服务
注册库
服务查找
服务调用模式
服
服务
发现
服务
使用者

注册

服务
发现
服务
服务协作总线
服务协作总线
服务使用者
SOAP/HTTP
Http
服务
SOAP
Web
服务
OSGi
服务
Web
服务
SOAP等通讯协议
服务协作总线
OSGi
服务
Web
服务

研究背景

主要工作
◦ 服务协作总线概念架构
◦ 基于OSGi的服务协作总线
◦ OnceSCB系统设计与实现

总结与进一步工作

OSGi
◦ OSGi框架作为开发Java应用的流行框架,组成一个单虚拟机环境
下动态的面向服务架构。
◦ 基于OSGi的服务协作总线在OSGi的基础上,扩展OSGi的机制,构
建一个动态的服务计算环境。

服务发布与发现

远程服务访问

服务生命周期管理

服务描述模型
◦ 服务信息模型
 服务接口
 服务属性
 服务QoS
◦ 扩展服务属性
 osgi.remote.interfaces
 osgi.remote.configuration.type
 osgi.remote.requires.intents
<service>
<interfaces>
<interface>cn.ac.iscas.Deploy</interface>
</interfaces>
<properties>
<property>
<name>orgi.remote.intents</name>
<value>reliable confidentiality</value>
</property>
</properties>
</service>
◦ 访问服务的方式
 服务发布
 服务更新
 服务删除
发布服务
服务使用者
查找服务
服务使用者
服务
注册
库
服务提供者
更新服务
服务提供者
删除服务
服务协作总线
服务协作总线

实现机制
◦ 采用服务描述模型,保持和OSGi
一致性
◦ 增加外部服务注册库
◦ 支持SLP、UDDI等服务注册库
Registry

透明性设计
◦ 机制:OSGi中事件机制
◦ 服务发布透明化
Event Source
Bundle
Get
Service
 OSGi服务注册、更新、删除事件
◦ 服务查找透明化
 接口名字与LDAP过滤表达式
 OSGi.findService => FindHook
 OSGi.ServiceTracker =>
ListenerHook
 声明式服务 => 服务生命周期管理
Receive service registration
Event Listener
Bundle
Register
Event Listener
Bundle

支持多种服务通讯协议
◦ Web服务、R-OSGi、RMI等

OSGi服务的远程发布
◦ 将OSGi中服务发布为远程服务

OSGi透明的远程服务调用
◦ 本地服务和远程服务一样调用
服务使用者
SOAP
SOAP
服务使用者
RMI
RMI
Jini
Jini
服务协作总线
服务提供者
服务提供者
服务协作总线

将OSGi提供的本地服务发布为可远程访问的服务
◦ 步骤1,2:组件按照标准方式注册本地服务,并通知通讯管理组件
◦ 步骤3:通讯管理组件设定服务交互协议,生成端点地址
◦ 步骤4:通讯管理组件利用发布服务将服务发布到服务注册库中
注册库
组件
2
1
通讯管理
组件
3
4
图元说明:
OSGi组件
OSGi服务
动作
通知
服务发现
组件
通讯组件
服务描述信息
<service>
<interfaces>
<interface>cn.ac.iscas.dosgi.samples.greeter.
GreeterService</interface>
</interfaces>
<properties>
<property>
<name>osgi.remote.configuration.type</name>
<value>pojo</value>
</property>
<property>
<name>osgi.remote.autopublish</name>
<value>true</value>
</property>
</properties>
</service>

服务请求者提供透明化的远程服务访问
◦ 步骤1:组件调用服务,它通过查找、监听等,关注该服务信息;
◦ 步骤2:服务查找、监听机制通知代理生成框架,需要指定的服务;
◦ 步骤3:代理生成框架使用服务发现组件,从服务注册库上找到满足要求的服务;
◦ 步骤4:根据查找返回的服务信息,由通信管理组件选择适合的代理生成组件;

根据取得服务信息(WSDL、接口、QoS),生成服务代理,并注入到代理服务注册库中。
取得接口信息
注册库
组件
2
1
代理生成
框架
4
代理生成
组件
3
图元说明:
OSGi组件
OSGi服务
动作
通知
选择代理
生成方法
取得服务信息
服务发现
组件
能够生成服务
条件的代理
是
生成服务代理
注入OSGi框架
服务调用处理过程
远程服务代理生成
否
结束

服务部署透明性设计
◦ OSGi服务部署事件
◦ 抽象OSGi服务模型,采用一致的服务描述机制

服务代理生成透明性设计
◦ 完整的服务信息描述模型
◦ FindHook、ListenerHook和声明式生命周期管理机制

远程服务调用透明性设计
◦ 透明的远程服务代理,达到本地服务和远程服务一致性

OSGi的生命周期管理在组件层的基础上增加了动态安装、
开始、停止、更新和卸载组件的功能,使得基于OSGi框架
可以在运行时动态地对组件的生命周期进行管理。

服务生命周期关注服务的添加、删除、变更以及服务之间的
依赖关系管理。

服务依赖关系
◦ 组件-服务依赖
◦ 服务-服务依赖

问题分析
◦ 现有应用把服务依赖关系交给开发者处理,增加开发和维护的难度

Deployed
◦ 当包含DRSCM的OSGi组件被激活时,
DRSCM处于Deployed状态。此时DRSCM
验证DRSCM配置文件描述,以及涉及到的
Java类、Java方法等,如果都正确,则转换
组件状态到Invalid,否则保持在Deployed
状态。

Invalid
Deployed
Initialize
Invalid
◦ 该组件实例已经通过验证,并且该组件需要
的服务没有得到满足,如果需要的服务得到 unsatisfied
satisfied
满足,则将组件状态转化为Valid状态。

Valid
◦ 处于Valid状态的服务表示当前组件需要的条
件已经满足,可以正常运行,并且提供本身
的组件服务。
◦ 如果在运行过程中,该组件需要的服务失效
,则导致服务重配,如果重配成功,服务还
处于Valid状态,否则服务将处于Invalid状
态。

Deployed
◦ 当OSGi组件从激活状态变成钝化或者被删除
时,该组件将注销自己使用和提供的资源。
Destroy
Valid
Destroy
Destroyed
Reconfigure

<component>
◦ 在component元素中声明组件与服务、服
务与服务之间的依赖关系。

<implementation>
◦ 组件类可能实现一个或多个服务接口,并有
依赖服务的注入方法。

<service>
◦ 组件提供的服务,该标签符合服务描述模型
定义。

<require-services>
◦ 这里定义组件与服务、以及服务与服务之间
的依赖关系

<require-service>
◦ 标签require-service定义一个依赖的服务
的详细信息

<require-service>/<service>
◦ 描述依赖的服务信息,该描述符合服务描述
模型。

<binding>
◦ 标签binding定义如何将需要的服务注入到
组件中。
<component name="deploy_service">
<implementation
class="org.oncepi.deploy.Client" />
<service>…</service>
<require-services>
<require-service>
<service>…</service>
<binding set-method="setDeploy"
unset-method="unSetDeploy" />
</require-service>
</require-services>
</component>

组件安装与卸载
组件删除
Deployed
组件安装
Invalid
添加组件需
要服务监听
否
注入服务实
例对象
组件需要的服
务得到满足
Invalid
Valid
删除组件需
要服务监听
删除组件需
要服务监听
删除注入服
务实例对象
Destroyed
删除注入服
务实例对象
是
删除组件
服务
激活组件
服务
Destroyed
Valid

服务添加与删除
服务删除
服务添加
Invalid
Valid
Valid
Invalid
出现可用
服务
出现可用
服务
某服务
不可用
某服务
不可用
服务是
远程服务
是
生成远程服
务代理
否
否
注入服务实
例对象
服务是
远程服务
是
生成远程服
务代理
存储服务实
例对象
服务是
远程服务
是
否
删除远程服
务代理
删除服务实
例对象
注入新的
服务实例
存在备份
服务
是
否
激活组件
服务
删除组件
服务
Valid
删除远程服
务代理
否
组件需要的服
务得到满足
Invalid
服务是
远程服务
是
是
删除服务实
例对象
否

研究背景

主要工作
◦ 服务协作总线概念架构
◦ 基于OSGi的服务协作总线
◦ OnceSCB系统设计与实现

总结与进一步工作

OnceSCB扩展了单机OSGi的服务模型,支持分布式环境下
的服务发布与发现、服务远程访问、生命周期管理,实现了
服务请求者和服务提供者之间的解耦
◦ 服务通讯管理和服务通讯组件
◦ 服务发布与发现组件
◦ 服务生命周期管理
OSGi
服务
Web
服务
Jini
服务
R-OSGi
服务
服务生命周期管理
服务通讯管理
SLP服务发现
CXF通讯 ROSGi通讯 OnceSE通讯
UDDI服务发现
OSGi框架

OSGi服务与SLP服务
◦ 字符串标识服务
◦ 基于LDAP的过滤表达式

SLP中服务信息的URL格式
◦ service:serviceType://URL
◦ serviceType由abstractType:concreteType组成

OSGi服务与SLP服务的映射关系
SLP的服务信息
OSGi的服务信息
abstractType
service:osgi
concreteType
服务接口名
URL
OnceSCB服务的访问地址
属性
OSGi中服务的属性

服务可扩展性
◦ 采用OSGi的组件和服务可扩展机制
◦ OnceSCB系统中组件和服务可插拔

通讯组件可扩展性
◦ 通讯组件采用OSGi组件模型
◦ 通讯管理组件自动管理系统中的通讯组件
◦ 支持Web服务、R-OSGi等多种通讯机制

服务发布与发现可扩展性
◦ 服务发布与发现组件采用OSGi组件模型
◦ OnceSCB自动发现系统中服务发布与发现组件
◦ 支持SLP、UDDI、自定义服务注册库等

功能分析
◦ OnceSCB与R-OSGi、ECF等的比较
◦ OnceSCB完成更多OSGi扩展,实现OSGi的分布化
R-OSGi
ECF
OnceSCB
远程服务访问
支持
通过R-OSGi支持
支持
服务访问协议
类似RMI
类似RMI
Web服务、RMI等
服务发现
SLP
SLP
SLP、UDDI等
透明服务访问
半透明
不透明
透明
透明服务发布
不透明
不透明
透明
服务生命周期管理
不支持
不支持
支持
模块化开发
支持
不支持
支持
毫
秒

OnceSCB
性能分析
250
◦ OnceSCB与CXF对比
200
 响应时间随SOAP消息负载
大小变化
 响应时间随并发用户数的变
化
◦ 结论
 OnceSCB比CXF稍慢
 OnceSCB增加了动态的服
务生命周期管理、透明的远
程服务发布与发现等特性
150
OnceSCB
100
50
0
5
10
15
20
25
30
35
KB
毫
200
秒
150
OnceSCB
100
CXF
50
0
0
20
40
60
80
100 120 140
并发用户数

研究背景

主要工作
◦ 服务协作总线概念架构
◦ 基于OSGi的服务协作总线
◦ OnceSCB系统设计与实现

总结与进一步工作

服务协作总线概念架构
◦ 针对面向服务计算领域对服务动态部署、服务生命周期以及模
块化等方面的不足,建立服务协作总线概念架构。

基于OSGi的服务协作总线
◦ 透明的服务发布与发现
◦ 透明的远程服务访问
◦ 服务生命周期管理

OnceSCB系统的设计与实现
◦ 基于OSGi的服务协作总线OnceSCB系统具有良好的可扩展性。
最后通过实验对系统的功能属性和非功能属性进行评估,结果
表明OnceSCB达到设计要求。

分布式软件动态更新

OSGi与SCA结合

QoS保障与监控