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