一个计算集群的设计

Master

      维护ip不可用机器池      数据结构:一个hashset,内存,mangodb

      维护ip可用机器池          数据结构:{ip,calc_count},内存,mangodb
      任务数据库                     数据结构:{id,user,resource,start_time,src_server,result,node1,node2,???????},内存,mangodb

master和master2共享一个mangodb

所有的计算都必须挂在任务的计算队列里,不同的任务异步执行,同一个任务同步执行.避开并发操作的修改覆盖.

添加

        master从负载队列里找到一个低负载的机器A
        向A发送一个计算任务,{user,resource,start_time,src_server},数据被保存,并开始定时计算,返回成功
        master从负载队列里找到一个低负载的机器B,定位计算任务数据的备份
        向数据库添加一条任务数据{user,resource,start_time,src_server,node1,node2,tag(fighting,attacked,normal)}

更新
       A定时向B同步数据备份完成更新

       计算任务完成,A向master发送计算结果.

       master存储最后结果,通知A删除本地数据,相应的B也删除.

删除

       从数据库找到任务数据
       向主计算结点通知删除

查询
       查看自己,根据自己的src_server和user和resource确定计算任务

       查看别人,根据resource,得到一个list,乱序,返回一页大小的实体集合

       挑战某个资源点,master在数据记录上标记发fighing,timestamp

       挑战成功,master标记fighting为attacked,一定时间内不再被查询;并通知node1修改资源产出,表示被掠夺


ops
     机器不可用.

              master和机器的心跳中断,判断机器不可用.

              坏机器的ip从可用池中移到不可用池

              坏机器作为备份结点,master检索出相对应的计算结点,向其通知新的备份结点,master更新数据库的备份节点字段

              坏机器作为计算结点,master检索出相对应的备份结点,向其通知开始作为计算结点,并给出备份节点,master更新数据库的计算和备份节点

     注册机器

              坏机器修复好,清洗数据和计算环境

              向master注册,检查是否需要移除不可用ip

              注册一个新的可用ip

你可能感兴趣的:(页游后台)