Skip to content
This repository was archived by the owner on Dec 26, 2020. It is now read-only.
This repository was archived by the owner on Dec 26, 2020. It is now read-only.

[refactoring] Multi-tenancy/多租户支持 #1

@y2361547758

Description

@y2361547758

开源后的重构计划

由于maid需要使用Twitter的API,而使用API的KEY申请不易,部署一个新实例变得十分困难;自用还好说,让其他人使用的门槛有点过高了。

那么要解决这个矛盾,改进的方案如下:

  • 先前抛弃的RssHub模块对多个目标监听已经有实现,如果选择自建的话能避免官方实例缓存时间过长的问题,但其他部分依旧需要大改。
  • 不过既然maid已经实现了对Twitter的接入,因此我有了个大胆的想法:多bot支持、服务化。

以下是我的设计草稿

maid - 监听器

从数据库获取需要监听那些推主,推尽管往数据库塞,有更新仅需推送给app一次。

新接口:触发更新监听列表

监听列表实现(?)bot专用推特号,关注所有需要监听的推主,然后监听自己时间线

koishi-app - Bot

从数据库获取配置,动态注册koishi配置(?),被动重启以加载租户变更(?)

单独watcher实例,监听maid的更新推送,然后找到对应koishi实例触发推送

如果koishi-app也多实例,需要平衡多个实例直接的配置数量(使用本地coolq和自带coolq的分开?),maid也要推送到所有实例

监视运行状态略麻烦,每个koishi实例定时向数据库/文件汇报,根据最后更新时间判断在线,在线获取日志?

frige - 数据库

加一张任务表,将部分字段从推文表移至任务表;

字段 类型 注释
tid int 外键推文表
tenancyId int 租户Id
taskId int 命令引用的Id,取代旧推文表的自增id
hide bool 【迁移】是否隐藏
published bool 【迁移】是否已发布

taskId & tid & tenancyId 唯一,为了避免用户使用的id不连续,taskId在条件内自增

有推文入库(推文表)时,按租户订阅,插入到任务表;取队列时也从任务表取(而不是原来直接从推文表取)

oven - 烤图机

新前端接口(Web interface)

后端重构弃用wkhtml2image,使用headless Chrome/Firefox;

单独chrome进程实例,多图同时烤时用同一个chrome,队列限制同时烤图数,chrome闲置一段时间退出(?)

新模块 Web console

管理租户

用户管理,注册登陆、会员充值(?)

租户管理,新建消除、修改配置

可能用得上的配置:监听推主(*列表)、监听发布渠道(*列表,如B动态/微博等)、cqhttp地址(*本地实例)、工作群号(*列表)、推送群号(*列表,通常同工作群)、*是否允许私聊/好友上班、*附加插件参数

(带*的可以设计为高级用户特性)

在线任务表管理

针对租户,在线koishi-app功能实现,主要方便批量删藏任务

接入方法

在web上注册用户,新建一个租户后,按配置自带coolq+cqhttp带外网,用ws/HTTP正向接入

或使用我们提供的coolq实例(?)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions