多实例
微服应用有两种运行模式:
- 单实例: 不论多少用户调用, 永远都启动一个应用容器, 由应用内部来控制用户访问权限
- 多实例: 每个用户点击应用图标都会启动一个单独的应用容器, 用户的数据因为容器的机制, 天然对彼此隔离
单实例的好处是节省系统内存资源, 缺点是需要应用自己开发大量代码来处理不同用户的访问数据隔离。
多实例的好处是, 应用代码简单, 不用考虑不同用户访问的权限问题, 缺点是多个用户访问微服时会启动多份容器, 占用额外的内存资源。
微服应用默认是单实例, 当您想开发多实例应用时, 只需在 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