多实例

2018-11-27 08:52:46

多实例的意义

EggBorn通过多实例的概念来支持多域名站点的开发。启动一个服务,可以支持多个实例运行。实例共享数据表架构,但运行中产生的数据是相互隔离的

实例与域名

实例与网站子域名一一对应,比如instance1.cabloy.orginstance2.cabloy.org

测试环境开发环境,EggBorn启用了一个缺省实例;但在生产环境,需要规划实例与子域名的对应关系

实例配置

由于测试环境开发环境均使用EggBorn提供的缺省实例,因此,只需要针对生产环境配置实例参数

假如有如下域名使用规划:

完整域名 subdomain
cabloy.org 空字符串
admin.cabloy.org admin

其对应的实例配置如下:

src/backend/config/config.prod.js

// instances
config.instances = [
  { subdomain: '', password: '', title: '',
    config: {
      'a-base': {
        jsonp: { whiteList: '' },
      },
    },
  },
  { subdomain: 'admin', password: '', title: '',
    config: {
      'a-base': {
        jsonp: { whiteList: '' },
      },
    },
  },
];
名称 说明
subdomain 子域名
password 实例中用户root的初始访问密码,默认是123456
title 网站标题
config 实例级别的配置信息,会自动覆盖模块级别config配置

如何使用多实例

引用当前实例id

因为多实例之间的数据是相互隔离的,所以在进行增删改查等操作时,都要带上条件:当前实例id,如

// 当前实例id
const iid = this.ctx.instance.id;
// insert
await this.ctx.db.insert('testTodo', {
  iid,
  deleted: 0,
  atomId: 0,
  description: 'test',
});
名称 说明
ctx.instance 当前实例对象
ctx.instance.id 当前实例id

使用model对象

model对象对ctx.db进行了进一步封装,可以便利的支持多实例软删除

// insert
await this.ctx.model.todo.insert({
  atomId: 0,
  description: 'test',
});


评论: