排队免单系统

  
  排队免单系统功能应用广泛,为描述的更易于理解,我们将其类比到现实中的银行客户在银行窗口排队,要申请的每个资源比作银行的每个业务窗口,将Job比作需要办理业务的银行客户排队免单系统开发找180微1194店6534
  基础功能
  所有job申请资源,均先放入排队队列(类比办业务前先取号),即使资源空(业务窗口空闲),也应由系统主动叫号
  如果所申请的资源并不存在,应该返回排队失败(类比银行窗口排队,如果窗口牌子告知说本窗口暂停营业,你就不用排这里了,改排其他窗口)180微1194店6534排队免单系统开发
  对于某项资源(类比某个业务窗口),当前job运行结束后,系统发起叫号,队列中的Job需要注意聆听自己的号是否叫到
  现实中,客户聆听叫号,注意力是随着时间的推移慢慢集中的,前面的人越多即队伍越长,越不需要注意,当号码越来越近时,开始注意聆听,到前面只有一两个客户时,进入时刻聆听状态。
  在排队软件系统中,如果要做到跟现实中一样也是可以的,根据前面的Job个数及Estimated Time来计算出下一次注意聆听的时间,但软件复杂度会增加,考虑到软件中的聆听只是耗费一次查询的操作而已,而且短期内排队系统的数据量也不会很大,所以设计上精简成按固定间隔时间来聆听自己的号是否叫到(当前设计成聆听间隔5秒/次)。
  排队过程中,每隔5秒聆听一次,服务器端将该信号视作排队Job的heartbeat,如果超过一定时间没有收到heartbeat,系统认为该Job已经不再继续排队
  (问题:当前设计5秒1次heartbeat,timeout为5分钟,如果网络断了怎么办?是否要考虑这种意外?如果所有job都timeout了,可以当作自己的网络断了,先缓缓,等到外界第一个job发信号过来,重新开始计时)
  Job聆听到系统叫号后,开始运行,并告知给排队系统,然后开始定期发送heartbeat(30秒1次,timeout为5分钟)
  Comment:无论是运行中的Job还是排队中的Job,当timeout发生时,该job进入timeout状态,然后再观察2分钟,如果仅是该Job有timeout,而其他Job没有timeout状态,就需要删除该job
  (问题:如果只有一个Job在运行,且发生timeout,不知道如何判断是客户端Job发生timeout,还是两者之间的通讯出问题了)
  管理功能
  顺序调整(调序)
  调序只限定发生在一个资源下,不存在跨资源调序
  普通用户:用户自己可以调整排队顺序(必须连续的,才能互相调整),也可以将自己排序靠前的序号调换给序号靠后的他人
  超级管理员:可以随意调整(一般情况,业务上不应该有此操作,就类似业务窗口黄牛插队,会引起抱怨及投诉)
  删除运行中的job
  不应有此功能,只能从运行机器上主动删除
  (如何避免恶意攻击?特别是当系统运行在云端时,很难查到恶意客户在哪里)
  删除队列中的job
  不应有此功能,只能从运行机器上主动删除(放弃,不排队了)
  (如何避免恶意攻击?特别是当系统运行在云端时,很难查到恶意客户在哪里)
  日志功能
  System Log
  System Log主要存放系统运行过程中产生的系统行为以及系统级别的Log,如timeout处理,资源自动释放,异常信息等
  Audit Log
  Audit Log主要记录用户行为,包括用户登录/退出,调序,下载日志等等
  日志主要信息
  三要素,When,Who,What
  日志的查询及下载
  可以查询某一日期段的日志,并支持下载。
  (根据日志查询占用资源的严重性,后期可以增加限制一次最多只查询多少天的Log)
  ————————————————
  版权声明:本文为CSDN博主「unixpro」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
  原文链接:https://blog.csdn.net/unixpro...

你可能感兴趣的:(php)