为了加快处理的速度,我可能要部署很多个程序到不同的服务器上。
这些程序都是从数据库中取任务(一条数据是一个任务),做完相关的任务后更新任务的状态。   DataBase        tablename            column            type                   length       Default or is NULL
StatusData WallETaskInfomation AutoId bigint identity NO
StatusData WallETaskInfomation TaskFileName varhcar 50 NO
StatusData WallETaskInfomation Status varchar 10 NO
StatusData WallETaskInfomation UserId int NO
StatusData WallETaskInfomation UserName varhcar 50 NO
StatusData WallETaskInfomation StartTime smalldatetime NO
StatusData WallETaskInfomation FinishTime smalldatetime NO
StatusData WallETaskInfomation LastUpdate smalldatetime getdate()
StatusData      WallETaskInfomation     ProcessingProgram Varchar 50
比如程序有p1~p20 要保证P1 正在处理的任务,其他的程序P2~P20不会去处理。P1如果这个程序死掉了 它的任务可以重新被
P1~P20处理。
 并且P1~P20 只是一套程序。  

解决方案 »

  1.   

    我也想过这样的办法,比如我部署20个程序,就对Auto 对20去余 来分配到底是哪个程序处理。但感觉很不专业啊
    并且我们产品中都有这样的处理程序。 大家有没有更好的处理方法呢
      

  2.   

    将数据库做状态机,不同程序去抢执行权
    begin tran
    declare @id bigint
    select @id=(select top 1 autoid from tb 
    where
    status='未开始状态'
    or (starttime>dateadd(hh,-1,getdate()) and status='执行中状态') --'P1如果这个程序死掉了的情况'
    order by lastupdate desc)
    update tb set StartTime =getdate(),status='执行中状态' where autoid=@id
    select * from tb where autoid=@id
    commit
      

  3.   

    还有我们现在又做成一个一个服务,服务中有一个queue ,每个程序从这个Queue 里面取任务,每隔半小时更新这个Queue。
      

  4.   

    有做过,实现类似。速度这个很容易通过添加硬件解决,但是可能需要考虑其他情况,比如需要有个较好的算法来获取接下来应该执行哪条(非FIFO方式,业务需求的)