背景
我们知道这是可能设置一个DEVOPS管道,通过使用crx2oak迁移从旧到新环境中的内容通过部署一个蓝色/绿色的方式更新AEM。为什么会出这个问题的范围。
这种方法的问题是内容的复制操作可能需要显著的时间,因为在JCR内容的增加量。其他想法mittigate这是值得赞赏。
我们也知道,AEM可以有一个S3数据存储区上卸载的二进制内容放入S3存储其不会在蓝色/绿色的部署按照重新构建的:
什么是Adobe的文档不清楚是否是同一S3存储可以在AEM实例共享(即蓝/绿实例)。也许这是失败只是我的谷歌福...
问题(S)
当一个新的AEM实例配置为使用中已经存在的内容从旧的实例S3数据存储,当crx2oak用于迁移内容,将新的实例能够访问现有的内容?
是否有任何文章/博客描述这种方法的潜在节约时间会是什么?
是的,我可以做一个实验,并在未来可能会做这样回答我的问题。我在寻找谁已经做到了这一点任何人的信息?我是工程师,所以如果别人已经这样做不会重新发明轮子。
你当然可以共享实例之间的相同S3存储 - 事实上,这通常与作者 - 二进制少复制一起使用>发布者(S),是一个尝试和真正的配置。
它甚至可以共享完全不同的环境中(例如DEV /阶段,或蓝色的情况下/绿色)之间的同一个桶。主要的“疑难杂症”需要注意的是对于数据存储垃圾收集(DSGC),因为它很可能会有它们只是引用了一些实例共享桶等吹扫的情况下未使用的斑点,这需要是的斑点考虑到。
这是设计的一部分,虽然,有一个专门用于这一目的,它告诉DSGC仅执行第一阶段GC(以下简称“标记”阶段),并跳过第二届“扫荡”阶段设计了一个标志,直到所有实例有显着哪些BLOB他们希望保留/丢弃。一旦所有情况下都这样做了扫描阶段可以运行清除不需要使用任何桶实例斑点。
如需更详细的解释,请橡树文档:https://jackrabbit.apache.org/oak/docs/plugins/blobstore.html#Shared_DataStore_Blob_Garbage_Collection_Since_1.2.0
我觉得它有助于了解那个漂亮的数据存储实现多少都被做了这样的斑点是根据其校验和储存,所以同一个文件添加上传的两次将只存储在数据存储一个副本,会有两个分段储存记录引用相同的斑点。以同样的方式,多AEM实例共享同一个桶就能找到一个给定的BLOB无论哪个实例的把它放在那里摆在首位。
你可以找到一个blob和FileDataStore
'ing它sha256
观察看到这个动作很容易 - 例如(此示例中是在OS X,在Linux /视窗校验命令会稍有不同):
$ shasum -a256 crx-quickstart/repository/datastore/0c/9e/40/0c9e405fc8d0f0405930cd0044611cfbf014938a1837ae0cfaa266d7732d1002
0c9e405fc8d0f0405930cd0044611cfbf014938a1837ae0cfaa266d7732d1002 crx-quickstart/repository/datastore/0c/9e/40/0c9e405fc8d0f0405930cd0044611cfbf014938a1837ae0cfaa266d7732d1002
在那里,你可以看到一个)的文件名是校验和,和b)它使用前3个字符对从校验和嵌套,这样你就可以通过只知道散列即使找到文件,如果要存储相同的二进制,名称或JCR元数据是不同的,引用将磁盘上的同一个文本文件团块。
从内存S3存储使用前缀,而不是目录嵌套,因为这样的表现更好,但原理是一样的。
最后,一对夫妇的事情要考虑的是:
1)S3存储是相对便宜的(和几乎无限的),所以要进行,它不是必要定期进行DSGC除非你真的想精打细算的参数。
2)如果你运行你DSGC需要考虑如何将任何备份策略,你正在使用的AEM情况下工作。举例来说,如果你在运行DSGC后不久回滚分段储存你可能不得不收回部分的清除斑点。您可以使用版本控制和/或生命周期的规则来解决这个问题,但它可以给你的恢复过程中添加额外的显著的复杂性和时间。
如果您选择直接跳过DSGC并留下斑点有无限期这是一个好主意,以确保访问键或IAM角色AEM使用没有挖斗用DeleteObject
许可,只是要确定一个流氓GC能过程”牛逼删除任何东西。
希望这可以帮助。
编辑在所有的,我忘了真正回答你的问题 - 是的,它会保存在克隆在大多数情况下,一段时间。您仍然需要同步的分段储存(明显),并没有针对此的各种方法。 crx2oak
肯定是一个 - 你的文档中看到有使用它瓦特/ S3在那里你提供一个配置文件(基本上是序列化.config
文件就像你与Felix / OSGi的使用)的特定选项。
您也可以使用类似rsync
简单地复制tar文件上(而至少目标AEM停止。橡树一般是原子所以从源热拷贝理论上可以工作,但情况因人而异)。
最后,你能明显使用蒙戈和群集的分段储存这种方式,但所有这样做通常的成本/复杂性/性能问题适用)。
在地平线上的蓝/绿型另一个有趣的发展是CompositeNodeStore
- 有一个来自谈到这个2017年adaptTo()会议相谈甚欢:
外部数据存储将有很大的帮助,因为平时最的空间被用于二进制资产。由真人键入的内容纯粹是要少得多。
在我目前的项目(相当小,但关系应该是正常的):
如果你想做到这一点,我有以下几点意见:
为了使用共享文件数据存储,你需要做到以下几点:
java -jar AEM_6.3_Quickstart.jar -unpack
install
文件夹内的目录crx-quickstart
org.apache.jackrabbit.oak.plugins.blob.datastore.FileDataStore.cfg
此安装文件夹内的文件path=<path to file datastore>
(见https://jackrabbit.apache.org/oak/docs/osgi_config.html)reference.key
文件。第一次它会自动创建。但是,如果你总是使用相同的密钥,相同的哈希值被用来在所有环境中的所有数据存储。这也是所谓的“二进制少复制”功能的先决条件(所以二进制只会被复制的作者和出版商之间的第一次)亲切的问候,亚历克斯