跳到主要内容

ARC 2.0.0-beta.28

Package 与 Instance

把可交付的 Blocklet package 与某次具体运行或配置的 instance 区分开。

ARC 把 packageinstance 当作不同对象。混为一谈会模糊源码所有权、配置、数据与发布。

Package 对比 Instance

PackageInstance
是什么版本化、可复用的应用产物package 的一次带配置的运行或部署
典型身份blocklet.yaml 中的 id / did / version运行时绑定:端口、主机、所有者、数据挂载
可变性某一版本的源码 + 已发布树配置与数据可变,package 版本可固定
本地证据blocklet.yaml(或约定入口)的目录、arc blocklet inspectarc blocklet run / arc service start --blocklet 提供的 URL
构建产物dist/ + .afs/manifest.json + blocklet.dist.json单靠 build 不够——需要 serve 或 deploy
类比npm package / 容器镜像运行中的容器 / 已部署服务

代码锚点(ArcBlock/arc 类型与 CLI):

  • Package 形态:blocklet.yaml 解析为 BlockletManifestpackages/core/src/blocklet/types.ts
  • 脚手架写入 package 身份(specVersionidnamedidversion)via arc blocklet create
  • 本地 instance serve:arc blocklet run <path> 向 daemon 注册父目录并打印访问 URL
  • 构建把 instance 需求写入 flat manifest(例如 basicinstance.required: falseminimal-app 构建报告 instance: requires /instance DID Space

图示

阶段对象典型命令
编写源码Package 源码树编辑器 + create
校验 / 打包Package 契约 + dist/checkbuildinspect
本地运行本地 instanceblocklet run / service start --blocklet
远程路径远程 instancedeploy --server / Pages —— 独立,常为 experimental

从源码经 package 检查与构建到本地或远程 instance 的流程

Package 是版本化的应用单元。Instance 是该 package 的某次运行或部署。

什么属于哪里

关注点属于 package属于 instance
blocklet.yaml 身份、scope、mounts、sites、replicated 声明否(按 package 声明读取)
dist/ 下构建文件树是(产物)部署时消费
Daemon 端口、额外 blocklet 目录
/instance DID Space 数据(若需要)仅 seed(seed/运行时数据所有权
公网部署的域名绑定候选声明(sites.domains该次部署的实际绑定

命名这一区分的 manifest 字段

来自当前解析器(BlockletManifest):

字段Package 含义Instance 含义
id, did, version, specVersionPackage 身份运行时的稳定 package 坐标
scope命名空间可见性模型(默认 app,亦有 user / root / agent该次运行的 session AFS 形态
instance.required / instance.mount / instance.seed是否需要真实 /instance DID Space若需要且缺失,runtime 须 fail closed
mountspackage 声明的 provider 依赖挂入运行中 AFS
sites / surfaces声明的路由与对外暴露由提供服务的 host 解析
replicatedpackage 内的集合契约在 instance/user space 写入与复制

arc blocklet create --recipe basic 写入的最小 package(已验证):

yaml
specVersion: 2
id: demo-basic
name: demo-basic
did: did:blocklet:demo-basic
version: 0.1.0
description: ""

arc blocklet build 后,该 package 的 flat manifest 包含:

json
{
  "specVersion": 2,
  "id": "demo-basic",
  "instance": { "required": false, "mount": "/instance" },
  "scope": "app",
  "mounts": []
}

不远程部署的本地 instance

本地 instance 足以做验收:

bash
arc blocklet run ./demo-min
# 或
arc service start --blocklet ./demo-min --port 4939

已验证(2.0.0-beta.28;当时用种子实例端口覆盖,现在优先具名实例):

text
Serving blocklet "demo-min" on port 4941
  http://demo-min.localhost:4941/
  http://localhost:4941/?blocklet=demo-min  (Safari / universal)

Host: demo-min.localhost:4941GET 返回 HTTP 200。不需要 DID Space 发布。

阅读规则

  1. 源码改动改变 package。 声明文件变更后重新 build 与 check。
  2. 运行时状态属于 instance 环境(daemon 配置、端口、DID Space 数据)。本地 serve 成功不等于远程 instance 健康。
  3. 构建出现 instance: requires /instance DID Space 表示该 package 的有状态能力需要真实 instance space。壳页面本地 HTTP 200 不证明这些写入可用——见 发布与部署数据与 AFS

下一步:本地创建与运行