Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数据读写集群的负载均衡策略_Java_Jdbc_Load Balancing_Data Migration - Fatal编程技术网

Java 数据读写集群的负载均衡策略

Java 数据读写集群的负载均衡策略,java,jdbc,load-balancing,data-migration,Java,Jdbc,Load Balancing,Data Migration,我正在开发一个java应用程序集群,该集群能够将数据从一个数据源迁移到另一个数据源(即数据库到文件、文件到数据库、Oracle到MSSQL,反之亦然) 使用JGroups进行任务分发和集群管理。一个示例配置是4台服务器具有此相同应用程序的实例(假定所有服务器具有相同的硬件配置) 在问我的问题之前,我应该提到我想要分发的任务的性质: 例如,可能会要求其中一个节点将Oracle表复制到另一个数据库。在本例中,我解析此表的rowid范围,以使用不同的连接并行查询数据。(DIY并行)。因此,每个节点获得

我正在开发一个java应用程序集群,该集群能够将数据从一个数据源迁移到另一个数据源(即数据库到文件、文件到数据库、Oracle到MSSQL,反之亦然)

使用JGroups进行任务分发和集群管理。一个示例配置是4台服务器具有此相同应用程序的实例(假定所有服务器具有相同的硬件配置)

在问我的问题之前,我应该提到我想要分发的任务的性质:

例如,可能会要求其中一个节点将Oracle表复制到另一个数据库。在本例中,我解析此表的rowid范围,以使用不同的连接并行查询数据。(DIY并行)。因此,每个节点获得1/4的源数据,并将其并行写入目标数据库

                   Buffer On Node    
                  ---> Node 1 --->
                  ---> Node 2 --->
 Source Table                        Target Table
                  ---> Node 3 --->
                  ---> Node 4 --->
如果只有这种情况,我会将单个表副本的每个分支(rowid范围)分发到其中一个节点

但另一个例子(让我困惑)是,可能有复杂的查询,或者查询的视图要复制到目标表中。无法分发此数据,因为不涉及数据块或rowid。因此,可能会有我无法分发的请求。对于这个查询,我在单个节点上使用单个连接读取查询,并将其并行写入目标表(假设并行度为4,我知道并行写入可能只在读取速度快于写入速度时才有用,或者我认为是这样)。或者excel文件被复制到数据库平台的表中

                                                 --->     
                                                 --->
Source( Queried data, file, etc. )  ---> Node 1          Target
                                                 --->
                                                 --->
因此,我不太确定如何分配任务,比如当有两个查询请求被复制,还有3个表被复制时

我想到的一个解决方案是估算每个数据请求的平均记录大小,并计算服务器上瞬间的最大数据负载

如果要以100字节的平均记录大小和1000个缓冲区大小的记录并行复制表,则每个节点最多将有100*1000=100000字节,直到数据复制完成

另一方面,如果有另一个文件请求,比如说在单个节点上复制的平均记录为200字节,则负载为200*1000=200000字节

因此,我可以根据节点上的当前负载来分配新任务

我认为这个解决方案是高度假设的:)所以我的问题是:

  • 根据平均记录大小估计负载是否有效
  • 在计算平均记录大小时,我将面临什么样的困难
  • 你能想出别的解决办法吗?使用这种I/O绑定的任务分布来平衡负载的最佳方法是什么
希望这听起来不太复杂