artifact,指的是在Apache Stratos中的可部署单元,一个artifact对应一种类型的cartridge。
对于cartridge,可看下面的文章,加深理解
Cartridge,自己的理解就是“磁带盒”,那么对于artifact估计可以理解为“磁带”。
而Artifact Distribution Coordinator则是负责分发artifact给cartridge实例。
Deployment synchronization
Apache Stratos的用户往往会将artifact部署到远端的Git仓库中。已经部署的artifact,必须在各个相关的cartridge中做到与Git仓库的同步。
刚开始,在整个应用程序的部署时,deployment synchronization这个环节会自动进行。然而,应用程序部署完毕之后,会因为下述的原因,使Git仓库和cartridge两者中的artifact不同
1.Git仓库中的cartridge的一次性更新
2.Git仓库中的cartridge的持续更新
3.一个实例中的cartridge的更新,以及Auto Commit的模式的开启。
Automated artifact update
上图展示了自动上传一个artiface到一个cartridge实例的过程。有个条件是,远程Git仓库中,需要添加一个Webhook。
当一个租户想上传一个artifact时,会调用git push这个命令让artifact上传到远程git仓库中。此后,远程Git仓库会发布一个Repo update
notification 给Stratos Manager.当命令git push触发了ADC之后, ADC将会发布一个Artifact Update事件给Instance Notifier topic(存在于Message Broker中)。此后,相关的cartridge 实例会订阅Artiface Update消息,然后利用git pull命令从远程git服务器处更新其内部的artifact。
Auto Commit
一般来说,从实例到Git仓库的up stream commits是不会发生的。然而,如果Auto Commit模式开启,实例会自动将commit推送到相应的Git仓库中。Auto Commit是可选的特性。
单租户 cartridge和多租户cartridge都可以适用于下列类型的cartridge类型中:data cartridge,framework cartridge和loader balancer cartridge。如有必要,Auto Commit模式可以只适用于single tenant framework cartridges或则multi-tenant framework cartridges,因为data cartridge和loader balancer cartridge不使用git仓库。当部署应用的时候,Auto Commit模式已经开启。因此,应用程序的JSON定义中需要制定一个payload类型的参数,形势如下:
{
"name"
:
"payload_parameter.COMMIT_ENABLED"
,
"value"
:
"true"
}
比如一个开启了Auto Commit模式的完整的应用的JSON格式如下:
{
"applicationId"
:
"single-cartridge-app"
,
...
"components"
: {
"cartridges"
: [
{
"type"
:
"php"
,
...
"subscribableInfo"
: {
"alias"
:
"my-php"
,
...
"properties"
: [
{
"name"
:
"payload_parameter.COMMIT_ENABLED"
,
"value"
:
"true"
}
]
}
}
]
}
}