计算资源整合模式 Compute Resource Consolidation Pattern

未匹配的标注

描述

把多个任务或操作成一个单一的计算单元。这种模式可以提高计算资源的利用率。

背景和问题

每个计算任务在独立的服务器,每个计算任务都要单独收费,每个服务器的利用率通常不会使用完全,这种方法可能不是最有效益的解决方案。

解决方案

为了降低成本,提高利用率,提高通信速度,减轻管理工作,可以将多个任务或操作合并成一个单一的计算单元。

liaoliaophp 计算资源整合模式

注意事项

  1. 可扩展性和弹性。
  2. 操作单个任务对其他任务的影响。
  3. 安全性。注意高度敏感或私有数据。
  4. 容错。
  5. 竞争。
  6. 复杂性。组合多个任务到一个单一的计算单元增加了复杂性中的代码单元,可能使得更难以进行测试,调试和维护。
  7. 稳定的逻辑架构。设计和实施中的代码中的每个任务,以便它不应该需要改变,即使物理环境中任务运行不会改变。
  8. 整合计算资源的策略。

何时使用

一个任务有大量的时间是闲置的。

结构中包含的角色

  1. Task 抽象任务
  2. ConcreteTask 具体任务
  3. 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();

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~