`
歆渊
  • 浏览: 307819 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

关于用 HBI 实现 TOB 分布式访问的灵感

阅读更多
对于TOB的分布式访问支持, 原来总是从分布的TOB实例出发考虑方案, 思路一直不够成熟.

今天突然获得灵感, 其实完全可以通过最近总结的 HBI (Hosting Based Interfacing) 思路去实现. 原始想法在 http://www.iteye.com/topic/34848 提出讨论过, 表面上扯得比较远, 不过用在 TOB 的分布式访问上, 就可以得到这样的结果方案:

分布式的架构中, TOB 实例运行于一个专门的JVM中, 实现一个 TOB Host 服务器程序, 对它来说是以嵌入方式启动TOB实例, 自己实现线程池, 然后侦听网络端口, 从网络接受 客户端应用 通过网络, 以XML为载体 传递来的命令对象, 并执行这些对象, 对象本身通过应用编写的代码, 决定处理逻辑和结果内容等等.

为了能在 TOB Host 上执行应用定义的对象, 随应用程序开发的 命令对象类, 它们编译出来的bytecode代码要部署到 TOB Host 上, 这个过程可以和部署J2EE Web应用类似. 或者更理想的, 也可能在客户端鉴权认证以后, 每连接由客户端提供 ClassLoader 的数据源, 类似 URLClassLoader 通过 HTTP/FTP 的 URL 加载远程代码的方式, 这样很方便开发时重编译后动态替换代码.

另外持久模型类也会需要进行部署, TOB本身已经支持重新编译后的动态代码替换, 只需再实现一个代码更新的检测/通知机制.

这样一个分布式的 TOB 系统, 就是一个JVM跑数据库实例, 然后多个客户端应用, 各自或者相互依赖的开发好自己的 持久模型类 和 请求命令类, 部署到 TOB Host 上, 之后应用程序执行时不是像传统关系数据库那样发送SQL获得返回结果集, 而是发送 可执行的命令对象 到TOB数据库实例上执行, 然后获得自己写的这些命令对象代码的执行结果.

这个架构至少可以有以下好处:

1. 设计开发这些 命令对象类 时, 就是认为在访问一个嵌入的TOB实例, 因而其实就是访问/操作一张内存中的 持久对象图, 结构清晰明了, 逻辑不带杂质.
2. 超级性能. 因为是在数据库端执行, 性能指标和存储过程是一个层次的, 而且因为是用Java而不是用带各种局限的 PL/SQL 之类的专有编程语言, 仔细编码以后很有可能比SP性能更高.
3. Java的丰富类库, 灵活性和健壮性, 全盘保留.


其实思路朝这个方向想以后, 再看看 WoW 的架构, 完全可以认为是运行在广大浏览器里的Applet客户端应用, 通过互联网连接去访问服务器上的TOB数据库实例, 它各个部分的代码量统计结果, 完全支持这个观点.
美国那边的合作伙伴已经动手开始开发Flash版本的WoW浏览器端界面, 在这个方向上, 以后很有可能会衍生出TOB的Flash客户端库.
分享到:
评论
2 楼 歆渊 2007-01-18  
firebody 写道
比较有意思,感觉。
不过这个办法可行还是有很多必须跨越的障碍,一些质疑也需要提出来

太好了! 还是有人可以讨论能碰撞出更多思想火花 ;-)
firebody 写道

1) 这个思想是为了解决什么问题而提出? (目的? 需求? )

想到这里比较偶然, 是看到Robbin关于 RoR/FastCGI vs Java/J2EE部署 的帖子, 然后是 pojo 的   元数据、开放数据模型及动态系统 的帖子, 然后突然想起来的.
不过最终的结果是为TOB想出了一个适当的分布式方案, 呵呵.
firebody 写道

2) 能够在服务端无障碍的运行客户端的代码,服务器需要提供和客户端完全一致的环境,也就意味着客户不能在客户段编写依赖客户环境的代码。

这个其实不是这样的, 在HBI最初的帖子里我提到, 接合的软件组件之间应该是对等的, 不过在这边也扯过来容易造成困扰, 所以没多提.
延伸开说是这样的: 对象传递是基于XML的, 客户端还是必需要用DBMS native的编程语言去写打算发送过去的命令对象, 然后在服务器端执行的命令对象也可以回传给客户端命令对象, 而这些回传的命令对象就是要用客户端的native编程语言来写了. 要点是两边都有从XML流构建本地可执行对象的能力.
firebody 写道

3)安全的挑战,服务器段可以运行客户端的代码,这个倒置似乎比较可怕。 如何检查客户的代码是安全的?

这确实是个严峻的问题, Java的Sandbox模型会有助于在一定程度上的解决, 生产运行环境里, 可以要求远程代码必需签名, 同时也许设一个Sandbox, 禁止一些危险操作. 这个跟开放一个J2EE容器允许公众部署war的情况差不多, 不可能完美, 也就到一定程度的控制吧.
firebody 写道

4)  bootrap ? 虽然过程已经很好的期望了,但是似乎对于命令的启动,很少看到这一段的分析,更主要的是从客户端的角度来看这个调用分布式组件的过程如何设计? 似乎这点更可能发展成为一个规范框架。

嗯, 确实往通用面上考虑, 这个甚至比CORBA还要复杂一点, 考虑异构环境下的标准执行环境规范.
具体实现不同语言/平台的接口库也是很大的工作量.
firebody 写道

说了这么多,其实还是从作者的思路想到了一些优点:

1)  除了ClassLoader的装载,第一传递数据,回传结果外,别的客户端和服务器端的通讯似乎就可以避免了,这在 一个理论的程度上,似乎可以很好的提高分布式应用的效率,似乎从执行的角度来看,不能算是分布式了。

是的, 这样就只在网络上传输处理后的结果数据, 而不用传输可能是很大量的处理前原始数据, 可以有效的节省通信量而提高整体效率.

这个倒是有鼓励把 业务逻辑 的计算压力推到 数据库服务器端 的倾向, 不过SP的性能总是最高的, 如果 多核大内存 的硬件架构发展顺利, 大趋势应该还是契合的.

说起ClassLoader装载的问题, 我还有点迷茫, 如果像FTP协议那样命令和数据开两个网络通道, 感觉不太舒服, 网上下载东西只要有HTTP链接我从来不用FTP, 感觉比HTTP响应慢不少, 应该跟这种设计不无关系. 但是class数据和通信数据如果全在一个通道里传输, 觉得也够challenging的... 不知道大家有什么更好的思路.
firebody 写道

2)对于服务提供来说,除了外围层的开发,内部服务的实现基本不需要二次开发了,因为和客户在本地开发无甚区别。

我也觉得HBI最大的好处, 就是省去了先 定义, 再 实现, 最后一直 维护 类似WSDL这些接口的烦人工作, 应用自己的逻辑自己负责, 只依赖于服务器端的大环境, 不用再分离的设计 服务逻辑 和 客户端逻辑 了.
1 楼 firebody 2007-01-17  
比较有意思,感觉。
不过这个办法可行还是有很多必须跨越的障碍,一些质疑也需要提出来

1) 这个思想是为了解决什么问题而提出? (目的? 需求? )
2) 能够在服务端无障碍的运行客户端的代码,服务器需要提供和客户端完全一致的环境,也就意味着客户不能在
     客户段编写依赖客户环境的代码。


3)安全的挑战,服务器段可以运行客户端的代码,这个倒置似乎比较可怕。 如何检查客户的代码是安全的?

4)  bootrap ? 虽然过程已经很好的期望了,但是似乎对于命令的启动,很少看到这一段的分析,更主要的是从客户端的角度来看这个调用分布式组件的过程如何设计? 似乎这点更可能发展成为一个规范框架。



说了这么多,其实还是从作者的思路想到了一些优点:

1)  除了ClassLoader的装载,第一传递数据,回传结果外,别的客户端和服务器端的通讯似乎就可以避免了,这在 一个理论的程度上,似乎可以很好的提高分布式应用的效率,似乎从执行的角度来看,不能算是分布式了。

2)对于服务提供来说,除了外围层的开发,内部服务的实现基本不需要二次开发了,因为和客户在本地开发无甚区别。

相关推荐

    HBI-P48编程数据表

    HBI-P48编程数据表HBI-P48编程数据表HBI-P48编程数据表HBI-P48编程数据表

    STM32F407 LAN9252 Ethercat HBI.rar

    EtherCAT网络结构简单,通过主站设备与多个从站设备之间的通信,实现分布式自动化系统的实时控制。 在STM32F407与LAN9252集成实现EtherCAT HBI(Hardware Bus Interface)的项目中,主要涉及以下几个关键知识点: ...

    LAN9252 EtherCAT详细培训资料

    EtherCAT通过使用较小的帧大小和优化的协议栈解决了这些问题,实现了高带宽利用率(超过90%)和低延迟通信。此外,由于其灵活的拓扑结构, EtherCAT可以支持线形、环形、星形和树形布局,而且不需要额外的交换机...

    Ajax_asp2.0_Message_Hbi

    本项目"Ajax_asp2.0_Message_Hbi"是一个基于Asp.NET 2.0框架的内部网络消息收发系统,利用Ajax技术实现了类似于MSN的消息接收模式。这意味着用户可以在不刷新页面的情况下,实时接收和发送消息,保持在线交谈的流畅...

    HBI——医院全面运营管理系统.ppt

    HBI——医院全面运营管理系统.ppt

    用VHDL实现视频信号分离

    总结起来,用VHDL实现视频信号分离是一项涉及信号处理、同步机制理解和硬件描述语言编程技术的复杂任务。通过精确的VHDL设计,我们可以高效地从复合视频信号中提取关键同步信息,实现清晰、稳定的视频显示。

    STM32上实现EatherCAT总线

    在STM32上利用LAN9252实现EatherCAT总线技术,该文档为系统原理图

    xilinx vbyone IP 网表文件

    在Xilinx FPGA设计中,Vivado工具是用于开发、综合和实现IP核的主要平台。Vivado中的“Vbyone”(有时写作“vby1”)是一种专用的IP核,它为高速数据传输提供了高效的接口解决方案。本文将深入探讨Vbyone IP网表文件...

    智慧医疗信息化管控平台整体解决方案.ppt

    通过整合各级医疗机构、科研机构、药厂和个人的数据,构建医疗卫生一体化信息平台,实现个人健康To C、区域卫生To G和医疗机构To B的全方位服务。这有助于提升基层医疗机构的服务能力,优化公共卫生管理,并推进医疗...

    hp-3600打印机驱动

    HP官方网站通常会提供最新的驱动下载,建议用户定期访问以获取最新版本。 此外,对于多语言环境下的计算机,可以选择安装所有语言版本的驱动,这样用户可以根据实际需求切换语言;但如果计算机主要使用一种语言,只...

    (2021-2022年)专题资料完美版基于数据仓技术的HBI医院等级评审系统.ppt

    教育精品资料

    vpif_capture.rar_Capture

    描述中提到的“add support for VBI & HBI data service”是指该代码更新或实现了对垂直消隐期信息(Vertical Blanking Interval, VBI)和水平消隐期信息(Horizontal Blanking Interval, HBI)的支持。在电视信号...

    STM32与LAN9252的连接.docx

    3. 使用SSC生成的代码作为参考,移植到自己的项目中,实现特定逻辑。 代码层面,EtherCAT协议栈很复杂,主要关注`HW_Init()`、`MainInit()`和`while(1)`循环内的`MainLoop()`。还需要配置MCU的GPIO和资源,如SPI...

    STM32F407 Ethercat.rar_ETHERCAT stm32_ethercat电机_stm32f ether

    直流有刷电机驱动程序,基于STM32F4

    hp laserjet 1010打印机WIN7 32位驱动

    这些.cab文件的目的是为了覆盖不同地区和语言环境下的用户需求,确保全球用户都能顺利安装和使用HP LaserJet 1010打印机。 在安装过程中,用户应遵循以下步骤: 1. 首先,解压下载的压缩包到一个临时文件夹。 2. ...

    oracle授权语法

    在Oracle数据库管理中,权限管理是一项重要的功能,它允许数据库管理员(DBA)控制用户对数据库对象的访问级别。本文将详细解释Oracle中的授权语法,并通过具体的例子来阐述如何进行不同类型的权限授予。 #### 一、...

    基于非线性HBI网络的转炉冶炼终点预测模型 (2010年)

    针对前馈神经网络模型的BP算法自身存在的易陷人局部极小和收敛速度慢等缺陷,祸合同伦理论与BI神经网络模型,建立了基于同伦BI神经网络的转炉终点预测模型分别对转炉终点钢水的碳含量及温度进行预测,并在相同构造下同...

    基于自组织映射神经网络的吉林省春夏期降水统计模拟研究.pdf

    本文是关于基于自组织映射神经网络(Self-Organizing Maps, SOM)的吉林省春夏期降水统计模拟研究。研究利用1997年至2015年吉林省春夏季节(4月至7月)的气象站地面观测数据,选取气温、气压、相对湿度、水汽压和...

Global site tag (gtag.js) - Google Analytics