计算资源整合模式 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();
推荐文章: