远程服务调用框架设计与实现

本文介绍了基于Spring的远程服务调用框架,旨在提供应用透明性、安全保障和调用频度控制。实现了身份验证、数据传输加密以及调用频度控制。文中详细阐述了设计实现、类图、流程图以及配置和使用方法。
摘要由CSDN通过智能技术生成

远程服务调用框架设计与实现

Auther: cenwenchu

Email: wenchu.cenwc@alibaba-inc.com

Version: 0.1

Date: 2007-6-22

SVN: http://svn.alibaba-inc.com/repos/opentech/sandbox/remoting/trunk

 

目的... 2

实现技术... 2

接口定义和实现规范... 2

设计实现... 3

基本类图... 3

基本流程图... 4

具体的配置和使用... 4

 


目的

为远程服务调用提供统一的框架,该框架集中解决远程调用过程中的三方面问题:

a.         应用透明性:应用的接口和实现不依赖于框架的实现。框架可以透明的切换各种远程调用技术,而上层应用的接口和实现不用做任何调整。

b.         安全性:安全性主要包括两个方面:身份及签名验证(防篡改伪造);数据传输保密性(防监听)IP认证。

c.         调用频度控制:为保证服务可用,需要对于调用频度根据一定的规则进行控制。

 

实现技术

由于调用双方都是基于Java的应用,实现技术上建议采用基于SpringRemoting框架,这样可以实现应用透明性,接口开发人员不用考虑远程调用等与业务无关的技术细节。基于Spring框架并进行扩展,我们可以在框架层次实现安全性和调用频度限制。

       由于调用双方不在一个局域网环境内,因此在具体通讯协议上,最佳选择即为Http。因此我们推荐的实现技术包括:Spring Remoting + Spring HttpInvoker,以及Spring Remoting + Hessian

       安全性包括身份验证和数据传输安全两个方面,身份验证可以根据调用双方的信任程度以及性能要求确定采用对称加密或者非对称加密,当前提供了三种验证措施,用户名加密认证,IP认证,以及消息数字摘要加密验证,该验证可以在Spring Remoting基础上进行扩展。数据传输安全则主要是担心数据在传输过程中被截获,对于基于Http的传输,使用Https即可(无需在框架或者应用层支持)

       调用频度控制,则可以应用AOP技术,对于调用进行截获和统计,根据一定的规则,判断调用是否符合控制策略。

 

接口定义和实现规范

接口定义和实现为简单的POJIPOJO即可,不过为了满足远程调用的需要,需要保证所有参数和返回值都是可序列化的,另外,鉴于部分远程调用技术的序列化机制的特殊性(例如Hessian),数据类型应尽可能简单。此外,基于性能考虑,远程接口调用方式适用于中低频度的小数据量的调用,对于大批量数据同步或者相当高频度的调用,远程接口调用方式并不合适。


设计实现

基本类图

 

 1 远程服务发布类结构图

       针对HessianHttpInvoker两种远程服务调用的方式封装了对于安全控制的两个安全发布类,具体的安全配置以及安全操作都在RemoteContractTemplate中,这样可以方便扩展任何安全的需求变更,并且对原有任何的Exporter做了安全切面处理,防止过度耦合。

 

2 远程服务调用类结构图

       远程服务调用对于不同的方法调用需要不同的定制,这里针对HessianHttpInvoker采用了替换植入内部处理类的方式,Hessian植入了新的HessianProxyFactory用来生成新的HessianProxy来植入安全机制,HttpInvokerFactoryBean植入了新的HttpInvokerRequestExecutor来植入安全机制,同样安全配置以及操作都封装在RemoteContractTemplate中,集中控制和配置,方便扩展和管理。

 

 

基本流程图

3 基本流程图

       如上图所示,用户发起请求调用远程服务,首先是创建远程服务代理,然后通过植入安全信息将请求发送到远程服务发布处理类中,首先检查安全信息,如果通过安全检测就进入方法调用拦截器中检验类似于频率之类的限制过程中,通过拦截器的检测就可以调用真正的远程服务,并且获得结果,将结果返回并封装安全信息返回给服务调用代理,代理首先检测是否有合法的安全信息,如果通过安全信息认证,将结果返回给客户端。

 

具体的配置和使用

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值