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

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

Open
y2361547758 opened this issue Apr 3, 2020 · 2 comments
Open

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

y2361547758 opened this issue Apr 3, 2020 · 2 comments
Labels
enhancement New feature or request

Comments

@y2361547758
Copy link
Member

开源后的重构计划

由于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实例(?)

@y2361547758 y2361547758 added the enhancement New feature or request label Apr 7, 2020
@y2361547758
Copy link
Member Author

y2361547758 commented Apr 30, 2020

当有多个组接入同一fridge实例时,必然可能出现因为转发或引用关系(甚至是因为监听同一个推主),多组烤同一个推。出于对翻译的尊重上面原始设计里直接隔离了各组的翻译文本,各干各的避免互相污染,但如果把这条限制去掉,这个平台就有更多的可能性了。

本着知识共享精神,分享翻译能够避免重复劳动,而且本平台也是为了发布翻译而设计的。如果记录下发布链接,也方便它组纯文本复刻。(不过目前只能使用Rsshub监控B站动态,更新频率也很低,另外目前不能跟踪纯文本翻译发布,总之先写这)

koishi-app

增加设置,是否尝试获取他人翻译、是否允许别人获取自己的翻译。

增加命令,查找它组翻译并返回(翻译文本,发布地址);更新推送时同时尝试查找?

fridge

任务表published自动改为string类型,记录发布链接。

租户表增加两个配置……害,tenancy表还没设计呢

oven

增加参数,是否读取它组的翻译,始终优先使用自己的翻译

题外话

将oven设计成分布式的,并写一个纯前端终端,只要开着界面就能ws接入分摊烤推压力(?)如果有登陆甚web console至可以优先烤所在租户的烤图任务(x

web console

总之两个配置提示写好

@y2361547758
Copy link
Member Author

koishi-app

list命令增加参数,限制一次输出的任务数

clear命令增加参数,限制仅清空当前页、或全部清空

translate/fetch增加参数,限制烤图递归深度

translate修改默认翻译行为,翻译不同时出图,可以加参数强制烤图,或另外生成(允许纯文本返回成功或失败)

增加插件(?),每日定时提醒队列里还有多少任务,同时表示bot活着(?)

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant