zookeeper 多实例应用记录处理
Record processing by multiple instance application by zookeeper
我有一个微服务应用程序,它有调度程序根据 isProcessed=false
标志从数据库中选取数据。它每 1 秒连续 运行s,一次轮询 50 条记录。在成功读取和处理后,它将行的值更新为 isProcessed=true
。我正在使用 JDBC select 并更新以对应用程序执行数据库操作。
目前我正在 运行 一个应用程序实例,如果我想 运行 多个微服务实例,它将是 DB 行中的竞争条件。应用程序的多个实例轮询相同的行并更新两次。如何避免在多实例应用程序中对同一记录进行多次轮询。
有没有什么方法可以使用 zookeeper 在多个实例之间进行协调以获得所选择的 DB 记录的信息。在多实例数据库中,一个实例读取的行应该被锁定,不应被其他实例读取。
我的 table 看起来像(1,2,3 未处理,4,5 已处理和更新)
---------------------------
C1 | C2 | C3 | isProcessed
----------------------------
1 | a | 3 | false
2 | b | 3 | false
3 | c | 3 | false
4 | d | 3 | true
5 | f | 3 | true
运行 多个实例将提高我的记录数据库处理性能,因为多个实例将在同一个数据库上工作。如何避免通过不同的微服务重叠/处理相同的记录。
为什么选择 ZooKeeper? ZooKeeper 用于协调不同节点上的多个进程。为什么不在数据库 table 中使用一些标志,以便在不同的微服务之间分配工作?微服务1处理flag 1的记录,微服务2处理flag 2的记录,以此类推,flag是根据活跃的微服务数量随机生成的。您还可以为每个客户端或相同 table 的不同分区使用不同的 table。您还可以使用 table 上的标志序列,并将每个微服务当前正在处理的标志值(flag-flag + 49)存储在每个客户端具有的不同 table 上它自己的条目。行锁定也可能有用。
我有一个微服务应用程序,它有调度程序根据 isProcessed=false
标志从数据库中选取数据。它每 1 秒连续 运行s,一次轮询 50 条记录。在成功读取和处理后,它将行的值更新为 isProcessed=true
。我正在使用 JDBC select 并更新以对应用程序执行数据库操作。
目前我正在 运行 一个应用程序实例,如果我想 运行 多个微服务实例,它将是 DB 行中的竞争条件。应用程序的多个实例轮询相同的行并更新两次。如何避免在多实例应用程序中对同一记录进行多次轮询。
有没有什么方法可以使用 zookeeper 在多个实例之间进行协调以获得所选择的 DB 记录的信息。在多实例数据库中,一个实例读取的行应该被锁定,不应被其他实例读取。
我的 table 看起来像(1,2,3 未处理,4,5 已处理和更新)
---------------------------
C1 | C2 | C3 | isProcessed
----------------------------
1 | a | 3 | false
2 | b | 3 | false
3 | c | 3 | false
4 | d | 3 | true
5 | f | 3 | true
运行 多个实例将提高我的记录数据库处理性能,因为多个实例将在同一个数据库上工作。如何避免通过不同的微服务重叠/处理相同的记录。
为什么选择 ZooKeeper? ZooKeeper 用于协调不同节点上的多个进程。为什么不在数据库 table 中使用一些标志,以便在不同的微服务之间分配工作?微服务1处理flag 1的记录,微服务2处理flag 2的记录,以此类推,flag是根据活跃的微服务数量随机生成的。您还可以为每个客户端或相同 table 的不同分区使用不同的 table。您还可以使用 table 上的标志序列,并将每个微服务当前正在处理的标志值(flag-flag + 49)存储在每个客户端具有的不同 table 上它自己的条目。行锁定也可能有用。