原子部署期间的Doctrine元数据缓存
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原子部署期间的Doctrine元数据缓存相关的知识,希望对你有一定的参考价值。
在应用程序部署期间如何处理Doctrine的元数据缓存?
我们在atomic deployment应用中使用symfony策略。到目前为止,我们习惯使用默认的file
缓存方法,该方法非常有效。但是,出于性能原因,我们希望切换到像Redis / Memcached这样的内存缓存。
我们应该为每个版本使用某种缓存ID前缀吗?例如,当发布新版本的软件时,部署脚本会加热应用程序并使用新的架构元数据填充缓存。如果部署失败,我们会进行回滚,元数据缓存仍然有效。
什么是最好的方法来解决这个问题?当第一个请求进入并且还没有元数据缓存时,我想避免CPU峰值。
我们应该为每个版本使用某种缓存ID前缀吗?
是的,这是我多次使用过的方法。一旦代码在服务器上,就会在进行交换之前安装供应商,使用唯一的前缀加热缓存。回滚将使用部署之前使用的缓存。
设置前缀可能很棘手,具体取决于您的环境。您的应用程序可能从某个版本文件中读取,该文件只包含唯一的版本标识符。您的部署可能会创建此。一种选择是使用当前HEAD的git哈希(如果您标记版本,则使用标记)。避免依赖开发人员手动压缩版本。
请记住,这种方法需要特别注意不要填满您选择的缓存解决方案的存储空间。一些要考虑的技巧:
- 缓存条目应具有生命周期(例如,使用Redis,确保条目有效期)
- 从服务器中删除旧版本时,也应清除其缓存。
这是我们的做法:
1)我们将应用程序部署到目标服务器(我们使用AWS托管。所以我们启动一个新实例,部署应用程序,完成后我们将主服务器更改为新的,准备好的服务器)
2)我们按此顺序清理缓存:
php bin/console doctrine:cache:clear-metadata --env=prod
php bin/console doctrine:cache:clear-query --env=prod
php bin/console cache:clear --env=prod
3)将预备实例带到生产中(作为LB上游)
如果应该回滚某些内容,我们会在新实例上进行回滚(公共视图无法访问)并再次清除缓存。如果一切顺利,我们将这台新服务器带到负载均衡器上游。
我们只使用缓存键进行分类,也使用缓存池来分组。我们得到了dev的redis,一个用于生产的一个redis,以便我们可以在每个redis-cli中“FLUSHALL”并且它不会影响其他环境。
希望能帮助到你!
以上是关于原子部署期间的Doctrine元数据缓存的主要内容,如果未能解决你的问题,请参考以下文章
我得到 - 错误:在缓存中找不到条目 - 在 sls 部署期间
没有要处理的元数据类。 php bin / console doctrine:schema:update --force