运行重构模式 Runtime Reconfiguration Pattern
描述
应用程序可以在不重新部署或者重新启动的情况下重载配置。
背景和问题
企业网站应该尽量减少停机时间,但是有时候应用程序更新了配置,更新的配置需要重新启动才生效。
解决方案
动态更新配置。
注意事项
- 配置存储在程序之外,例如数据库,文件或网络存储。
- 检测配置是否被修改的机制,例如一分钟重新读一次配置。
- 如果应用程序是多例子,多例子之间的一致性机制需要好好设计。
何时使用
不能停机又需要更新应用配置的情况。
结构中包含的角色
- Application 应用程序
- Configure 配置类
- Crontab 定时任务 - 每分钟定时重新加载配置类
最小可表达代码
class Application
{
public function debug()
{
$text = Configure::make();
var_dump($text);
}
}
class Crontab
{
public function handle()
{
Configure::make()->change();
}
}
class Configure
{
protected $version = 1;
protected static $configure;
public static function make()
{
if (self::$configure) {
return self::$configure;
}
self::$configure = new static;
return self::$configure;
}
public function change()
{
$this->version = 2;
}
}
$app = new Application;
$app->debug();
(new Crontab())->handle();
$app->debug();
推荐文章: