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