跟贴请点击 http://www.huihoo.com/cgi-bin/forum/viewthread.php?tid=1267
作者 文章标题 一个实际项目中的问题-from水木清华,大家也来讨论讨论




版主



贴子数量 : 198
注册日期 : 11/16/2001
在线情况 : 离线

  发表于: 7/5/2002 - 08:42
一个实际项目中的问题-from水木清华,大家也来讨论讨论

question:
有这么一个监控项目,它的基本要求如下:
1、每天都不间断地从现场采集数据,每5分钟一次保存到数据库(oracle or sybase)。
2、经常要进行大规模的模拟计算以及查询,因此直接从数据库获取数据将因为时间消耗太
长失去意义,必须从内存取数据。
3、要求分布式运行,实现热备用。
4、客户连接到服务器,根据需要启动计算和查询,客户也会人工置入一些数据。

由于热备用的要求,各个节点(计算机)的服务器启动的时候必须首先将各自的内存库建
立起来。这个问题的第一、第二个要求很容易满足,可是第三个要求如果用visibroker来
实现,我考虑会遇到的问题是如何保持各个节点(server)上的内存库一致,这是这个项
目能不能使用visibroker的关键,具体来说就是1、人工置入的数据不能仅仅保存于现在连
接的server上。2、从现场采集到数据以什么方式能够发送到已经启动的所有服务器。归根
结底就是server和server之间的通信问题。

大虾你有什么高见?

ANS1:

关于各个server的数据同步问题,好像可以用corba的Persistent State Service(PSS)
不过我没用过不是很清楚,应该会有标准的解决办法的。

ANS2:
我对2有点问题。
如果采集点比较多100个以上,采集1个月的数据量是相当大的,你能全都
保存在内存中去吗?
或者它的模拟和查询有什么特点?比如只关心最近的数据?
想听听你的计划,如果不是机密的话。

ANS3:
采集点绝对在100个以上,大约有1000~5000个,本月的数据确实是存在于内存中,对于采
集来的历史数据,采用了一种比较折衷的方法,就是将文件映射成共享内存,实践证明效
果很不错,读写的速度比内存慢一点,但是比申请大量的内存导致操作系统过分使用虚拟
内存要快很多,比从数据库读也快很多。模拟计算和查询有什么特点的决定权在最终用户
,这一部分的工作已经通过了测试并满足要求了。

这个项目其实是对原来系统的一个改进,要完成的功能最大的特点就是实现分布式,目的
是为了系统能更平稳地运转,这就是我为什么想用corba的原因。另外,用corba的好处还
在于能够很方便地完成和其他厂家产品的接口以及将我们的工作真正地组件化,每个组件
一旦通过了严格的测试,我就可以一遍又一遍地使用它了,工作就像搭积木一样了。不过
这个美好的梦想实现起来比较困难。

谢谢平兄的质疑,应该是个dd吧!

希望大家给我多支招。bow

ANS4:
我在visibroker的文档中查找不到关于persistent state service的内容,怎么办呢?

ANS5:
难说,偶已经研2了,但是也不会什么东西。
在这方面可以算成DD,没有关系。
三人行,必有我师,呵呵。

ANS6:
服务器缓存的同步是非常复杂的问题,你对问题的描述还不够细致,别人很难给出一个
恰当的设计思路。按我的理解,数据的更改只涉及到增加,没有删除和修改,如果对数据
一致性的要求不高的话,一个轻量级的解决方案就是用corba的事件服务。

ANS7:
呵呵,你手里有几个人啊?
这好像不是三五个人能玩转的阿? 呵呵,我觉得类似的采集系统的
设计好像网上是有一些的,我见过几个跟你描述的很类似的.
我也做过这种东西,不过要求没有你这么高,呵呵,什么数据必须放在
内存里什么的.听着好像很麻烦的样子..多讨论讨论吧,大家.

ANS8:
人工置入的数据就涉及到删除和修改,最关键的问题是多个server中的一个接收到数据改
动(包括采集的)的信息了以后怎么把这个信息传递到其他server。

ANS9:
人手有十几个,哪里的网上有和我类似的?还望兄弟明示。

ANS10:
国外的一些论坛,你可以去看看.
呵呵,十几个人应该够了..我觉得...
我也好久不作这种东西了,估计也提不出什么
好建议..以前我经常去的国内站点是UMLCHINA.
里边东西挺多的.

ANS11:
这个问题的关键在你对数据一致性的要求有多高,要是多个server同时修改相同的数据你
的处理策略是什么。因为昂贵和复杂的解决方案会使你的这种缓存策略失去存在的意义。

ANS12:
你研2了,我4年前就研2了,不过后生可畏,我已经老了。

ANS13:
我这个行业有一个国家标准,从终端采集到数据到监控端显示出来是2秒钟,并发性的数据
变化会发生,但是变化的数据总量绝对在20k以下,同时运行的server最多不会超过8个(
因为可以运行server的节点资金投入很大)。

我们以前是用Socket编程完成的,效果也不错,只不过就是没有遵循一种工业标准,和其
他厂家的产品互连非常麻烦。

以往的做法是通过选举算法确定一个主服务器,每一个server都可以提供查询数据的功能
,并且这种查询是定时更新+事件驱动的。但是修改数据只能把请求转发到主服务器,在主
服务器端修改了以后然后再传播到其他服务器,服务器修改了数据之后将产生一个数据更
新事件通知用户(corba的通知服务/事件服务就可以满足这种需求),因此多个server同
时修改相同的数据这种情况就可以避免了。我现在考虑使用的是visibroker,如果不能实
现server间通信,那么就必须知道那个聪明代理把客户端和采集终端连接到那个server上
了,如果这两种方式都无法实现,那么corba只能用来当作我们的产品和其他厂家的产品的
一个桥梁,这样一来根本就不是分布式系统了,sigh......

混日子真难......

ANS14:
指派单个服务器用于更新服务,用corba实现有什么障碍?其他server甚至该server都是
更新服务的client,为什么要考虑server间通信?

ANS15:
这个方面也考虑过,不能采用的原因是如果更新服务down掉了,怎么办?如果采用多个更
新服务,那么由于聪明代理的负载均衡,只要出现server连接在不同的更新服务上就不能
保证安全更新,这样不就出现问题的递归了吗?

ANS16:
同步问题和容错问题放到一起考虑太复杂了吧,就你担心的这种情况用激活代理就可以对付付过去,但是同步策略的选择是首要的,问题的复杂性也在这里,同步策略选定之后,再考虑容错 呗园伞
 
查看此人的个人资料 发送E-Mail给此人 编辑贴子 引用回复 搜索此人的所有贴子 给此人发送短消息




版主



贴子数量 : 198
注册日期 : 11/16/2001
在线情况 : 离线

  发表于: 7/5/2002 - 09:02
关于不同服务器端内存状态同步的问题,IONA在Orbix2k中采用内存数据库(bekerly DB)同步复制的方式来解决.
IONA:"
about Clustered Infrstructure
Based on PSS replication
1.Services are organized into a master/slave hierarchy
2.Master automatically pushes updates to slaves"

其实关于这个问题,现在在国际上也是一个博士级的论文课题。

 
发送E-Mail给此人 编辑贴子 引用回复 查看此人的所有贴子 给此人发送短消息




新手上路



贴子数量 : 17
注册日期 : 6/6/2002
在线情况 : 离线

  发表于: 7/30/2002 - 01:34
对这个问题我也有个想法,只是我对CORBA了解还不深,请大家不要见笑。我想可以用多个更新服务器,这些服务器之间也相当于热备份,osagent负责它们之间的负载平衡。每个更新服务器又与所有的应用服务器相连,更新服务器通过通知服务/事件服务将人工置入的数据发往没个应用服务器。这样可以吗?
 
发送E-Mail给此人 编辑贴子 引用回复 查看此人的所有贴子