计算资源整合模式 Compute Resource Consolidation Pattern
描述
把多个任务或操作成一个单一的计算单元。这种模式可以提高计算资源的利用率。
背景和问题
每个计算任务在独立的服务器,每个计算任务都要单独收费,每个服务器的利用率通常不会使用完全,这种方法可能不是最有效益的解决方案。
解决方案
为了降低成本,提高利用率,提高通信速度,减轻管理工作,可以将多个任务或操作合并成一个单一的计算单元。

注意事项
- 可扩展性和弹性。
 - 操作单个任务对其他任务的影响。
 - 安全性。注意高度敏感或私有数据。
 - 容错。
 - 竞争。
 - 复杂性。组合多个任务到一个单一的计算单元增加了复杂性中的代码单元,可能使得更难以进行测试,调试和维护。
 - 稳定的逻辑架构。设计和实施中的代码中的每个任务,以便它不应该需要改变,即使物理环境中任务运行不会改变。
 - 整合计算资源的策略。
 
何时使用
一个任务有大量的时间是闲置的。
结构中包含的角色
- Task 抽象任务
 - ConcreteTask 具体任务
 - TreeTask 任务树
 
可用到的设计模式思维
原本执行一个任务,现在执行多个任务,多个任务也可以看成一个任务,呈现树状结构,符合组合模式的特征。
最小可表达代码
// 抽象任务
abstract class Task 
{
    public abstract function handle();
}
// 具体任务
class ConcreteTask extends Task
{
    protected $number;
    public function __construct($number)
    {
        $this->number = $number;
    }
    public function handle()
    {
        var_dump("{$this->number}执行具体任务");
    }
}
// 任务树
class TreeTask extends Task
{
    private $tasks = [];
    public function add(Task $task)
    {  
        $this->tasks[] = $task;
    }
    public function handle()
    {
        foreach ($this->tasks as $task) {
            $task->handle();
        }
    }
}
$treeTask = new TreeTask();
$treeTask->add(new ConcreteTask(1));
$treeTask->add(new ConcreteTask(2));
$treeTask->handle();
                    
                    
                    
                
          
99+种软件模式
                    
                    
            
            
                关于 LearnKu
              
                    
                    
                    
 
推荐文章: