Skip to content

多实例

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

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

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

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

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

yml
application:
  multi_instance: true
application:
  multi_instance: true

多实例与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