别名:自动化设备工厂
解决的问题:小组设备资源不能共享,资源利用率低下和最大容量不足等问题.
目标:1. 设备具有清晰的规格,即有明确的分类(比如该设备的资源数,是否有视频源,音频源等详细参数)
2. 设备使用率,设备的周转性非常好(最好能一直投入使用),关键是调度策略要完美
3. 设备请求,如果某次设备请求失败,是否应该丢入请求队列进行缓存(也可以直接返回失败),此时考虑用户等待时间,优先级加权等情形
4. 清晰的日志,方便分析设备的使用记录.
遐想与技术难点:
1. 设备调度策略: 每一个设备是否也应该有使用权重这个问题(比如长时间没被使用,那么优先级是否已经提高),下次调度的时候,优先被使用
2. 设备请求列表: 每一个用户会针对自身需要的设备进行请求,此时如何表示这一系列请求
3. 用户等待策略: 如果用户申请设备失败时候需要等待的话,那么如何定期去刷新用户的等待时间,更新用户的等级权重
4. 应对高并发的申请,释放: 考虑到多个用户同时申请或者释放的情形,这里需要考虑设备状态的一致性问题
架构设计:
物理架构 : SqlServer + WEB服务
逻辑架构: 三层架构(DAO+DLL+BLL) + 辅助帮助类(Log + Permit + Communicate)
抽象可扩展考虑:
数据库层面: 弱化设备类型,设备属性等概念(唯一固化的元素就是DeciveId + IP + GroupId),其余配置纵向扩展,以记录的形式存在在属性记录表中.
SQLHelper类设计:使用DBManager + DBFactory + IDataBase进行抽象
ResoureManager类设计:支持getDevice与FreeDevice两个接口,用户通过字典传入所需要的设备配置项,返回用户只是增加一项<'IP',''>字典.
并发考虑:在get入口处使用lock()操作(这个设计有点儿丑,再优化)
设备资源的调度策略:有待深入(优先级,资源数)等
TO BE CONTINUED。。。