分布式系统群发短信问题

数据库中用户信息表现有10万多条用户信息,每条数据都有手机号。现要进行短信群发,使用5台应用服务器一起工作群发短信。
这5台应用服务器是从同一台数据库服务器中的同一张表取用户数据,有哪些办法可以保证这5台应用服务器每一次取的数据不一样?

简单一点,redis初始化一个任务队列把所以待发送用户塞进去然后依据redis单线程特性消费
复杂一点参考分布式定时任务,生成待发送资源然后尝试lock,lock成功就消费后把这条资源记录删了

把想法简单化,哪有这么多的问题
给不同服务器进行编号,如0,1,2,3,4
如果你数据库的id刚好是自增的,那就取模,(id % 5 ) = 结果

这样id = 1 结果就是 1,id = 2 结果就是2, id = 3 结果就是3 , id =4 结果就是 4, id =5结果就是 0
这样id = 6 结果就是 1,id = 7 结果就是2, id = 8 结果就是3 , id =9 结果就是 4, 10 =5结果就是 0

根据结果去多少,就使用哪台编号的服务器发送即可

用户信息表中加个处理状态字段:值为“00-待发送”,“01-发送中”,“02-发送成功”,“03-发送失败”:
每个服务器,取“00-待发送”的数据,发送前先修改状态为“01-发送中”;更新条件为 update table set 状态=“01” where id = xxx and 状态=“00”,返回更新条数为“1”的服务器,继续执行发送消息代码。返回更新条数为“0”的服务器停止处理。我觉得在原来的表中应该就有处理状态字段,改起来就很方便,不需要用到redis,mq之类的东西,增加复杂度。