`
heartsong
  • 浏览: 11308 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

求教Java后台数据处理程序集群解决方案

阅读更多
    最近在我做一个Java后台数据处理方面的项目,这个程序要处理的数据非常大,大约是每秒100000条(高峰期)的样子,而且这个数据量将在不久的将来扩充到3到10倍。项目组里有人提出用集群的方法来提高处理的速度,他的想法是这样的:

    每个服务器的功能是一样,但处理的数据是不同的,因为所有要处理的数据都有一个相同的ID字段。即有一个服务器用来分配数据,这样每个服务器都按照分配规则各自处理各自的数据。但要实现起来,我考虑了有以下一些问题:
1. 比如我们有5台服务器,开始确认有一台用于做分配器的工作(同时也做正常处理数据的工作),这台分配器上就要负责对其他4台服务器状态的维护,当发现有其他的服务器不响应的时候,即改变分配的原则,但这样势必要经常轮询其他服务器,是否会造成网络负担?
2. 假如现在这台分配器挂了,其他4台服务器应该有一台服务器会继续担负起分配器的工作,如何实现这种功能?
3. 数据分配的原则,因为这些数据的ID是动态进行变化的,即假定这次分配好了某台服务器处理某些ID的数据,但下次就要重要进行分配,而分配器就要额外连接数据库却获取每次要分配的数据情况,在数据量非常大,而有些任务又间隔比较短的情况下,这样做确实不是好方法。

    以上就是我分析出来的问题,思索、查询良久,还没有想到如何去解决。不知道在这方面的集群有没有比较成熟的解决方案或者框架?请大家看看有什么好方法来解决这方面的问题?非常感谢。
分享到:
评论
6 楼 baibai326 2007-09-26  
模拟集线器?

或者说 分配器 不负责维护各节点状态,只提供唯一的任务数据,使用 HTTP 协议 让各个节点自行来 分配器 请求数据,各节点再通知 分配器 任务完成。这样就不需要维护各个节点了,而是按需分配任务。

似乎 分配器 还是用 webserver 来做比较合适,各个处理数据的节点用普通java程序就可以了。

不过 这里 webserver 似乎是数据流的瓶颈。
5 楼 heartsong 2007-09-26  
collin000 写道
你项目应该是webserver集群吧, 以减小webserver压力, 据我所知道的:

1 应该是部署多个webserver(应用服务器), 访问同样的数据, 而不是不同的数据, 以达到提高速度, 减缓webserver端的压力. 恐怕会使网络造成负担.

2 如何分担访问量由webserver(应用服务器)容器实现, 比如resin要购买许可证, jboss好象是免费的, 至于其他应用服务器还不清楚. 如果其中一个webserver挂了, 那它所承担的访问量会被其他webserver自动承担, 用户丝毫不会感觉到.(理论比较完美, 但我们公司测的时候发现前后会有一定时间差).

如果是数据库分布, 那就要借助数据库产品的高级功能甚至是硬件来实现了, 目前还不懂.


谢谢关注。

这个项目不是Webserver应用,仅仅是一个java程序,用于在后台处理数据,没有web方面的应用。

如果是每个server上部署的功能不一样,而处理的数据是一样的话,我可能会考虑用EJB来实现分布式系统,但我们这个系统不是这样的,你所说的应该是多指令单数据的集群,而我想实现的可以理解为单指令多数据吧。
4 楼 heartsong 2007-09-26  
可以理解源数据是这样生成的:

很多数据采集点上布署了agent,这些agent程序负责将数据采集并放在一起,目前这些agent是由c++去实现的,而且目前我们已经部署了将近300多个agent
3 楼 collin000 2007-09-26  
你项目应该是webserver集群吧, 以减小webserver压力, 据我所知道的:

1 应该是部署多个webserver(应用服务器), 访问同样的数据, 而不是不同的数据, 以提高速度.恐怕会使网络造成负担.

2 如何分担访问量由webserver(应用服务器)容器实现, 比如resin要购买许可证, jboss好象是免费的, 至于其他应用服务器还不清楚. 如果其中一个webserver挂了, 那它所承担的访问量会被其他webserver自动承担, 用户丝毫不会感觉到.(理论比较完美, 但我们公司测的时候发现前后会有一定时间差).

如果是数据库分布, 那就要借助数据库产品的高级功能甚至是硬件来实现了, 目前还不懂.
2 楼 heartsong 2007-09-26  
谢谢LS。

主要是每个server处理(每次取50000条吧)过程是比较慢的,我在这里先认定是20秒左右吧,而客户要求全部数据处理完成的速度比较高,如果只有一台server的话,全部数据处理完成时间会超过客户所期望的时间。这也是产生集群处理想法的原因。

至于数据库源数据的生成,暂时我们的数据库也达不到这个要求,但是我们可以不通过数据库来获取数据,那样的话,源数据生成的速度是相当快的。
1 楼 pikachu 2007-09-26  
这个--!
这种方案只有数据库处理的速度远远大于程序处理的速度才有意义。
你们数据库能达到这种水平了?

不过LZ的文章有说是用数据库么??

相关推荐

Global site tag (gtag.js) - Google Analytics