Skip to content

多实例

微服应用有两种运行模式:

  • 单实例: 不论多少用户调用, 永远都启动一个应用容器, 由应用内部来控制用户访问权限
  • 多实例: 每个用户点击应用图标都会启动一个单独的应用容器, 用户的数据因为容器的机制, 天然对彼此隔离

单实例的好处是节省系统内存资源, 缺点是需要应用自己开发大量代码来处理不同用户的访问数据隔离。

多实例的好处是, 应用代码简单, 不用考虑不同用户访问的权限问题, 缺点是多个用户访问微服时会启动多份容器, 占用额外的内存资源。

微服应用默认是单实例, 当您想开发多实例应用时, 只需在 lzc-manifest.yml 文件中的 application 字段下加一个 multi_instance 子字段即可, 举例:

yml
application:
  multi_instance: true
application:
  multi_instance: true

警告操作

微服应用配置 单实例多实例 不同的运行模式时在 文件服务服务域名构造规则 上会有一定的差异表现,详细可参考以下文档。

  1. 应用配置了多实例后无法将文件挂载至用户文档目录(懒猫网盘默认展示主目录)?

  2. 应用配置了多实例后容器 service 之间的域名构造规则是什么?

多实例与 public_path

多实例运行方与 public_path 存在一定冲突, 多实例下的 public_path 依然需要获取到 UID 才能将 http 流量正确路由到具体的用户实例上。

目前有两种方式处理此问题

  • 在 url 中加入 uid 字段,例如 https://$myuid@$boxname.heiyu.space/some_public_path, 此方式适合命令行或第三方客户端这类无法进行http登录页面渲染的场景。

  • 当浏览器中存在合法的鉴权 cookie 时,微服会自动使用此 cookie 获取正确的 UID。 此方式适合在微服客户端或浏览器中访问应用。需要在其他地方至少登录一次。

TODO: 当访问多实例的 public_path 无法获取 UID 时自动跳转到登录页面获取正确的 cookie