Bilibili 云投稿

本文是介绍 Shiny 的应用之一,哔哩哔哩云投稿。

Shiny 的相关设计和应用,以后也会陆续更新。

云投稿的大致流程如图。但是可能还需要文字说明一下。

首先,运行在各个服务器的爬虫利用YouTube Data API监视特定频道,当检测到新的投稿时,构造时间发送给Shiny API。Shiny中控服务器收到事件之后,将会把该事件分发给Shiny Websocket服务器,后者负责广播给订阅者。

订阅者收到推送的同时,Shiny也开始将这一事件推送给Shiny Node,设计上,将会挑选较为空闲的服务器,Shiny Node将会开始拉取该视频的文件,并把进度实时汇报给中控服务器。

用户看到推送之后如果希望投稿这一视频,就可以开始填写信息,提交之后,客户端从中控服务器拉取信息,得知下载任务的进度——

  1. 服务器已经完成下载则由中控发送指令,节点服务器开始上传。
  2. 服务器未完成下载则将上传任务加入队列等待执行。

上传时同时向中控服务器返回上传进度。

以上流程中主要存在的问题有

中控服务器与节点服务器的通讯

由于节点服务器和中控服务器可能相隔甚远,且并没有即时性的要求,所以选择了 HTTP 作为通讯手段。同时上传和下载的进度也选择了HTTP API写入中控数据库。由于不能保证用户到节点服务器的连通性,而且为了数据集中存储,所有任务数据都保存在了中控服务器。节点服务器今后将不再需要部署数据库。

海外服务器上传速度

一是手动采用了七牛的海外节点,今后也可能尝试多线程上传等方案。目前来看七牛北美单线程上传似乎确实不咋样。

哔哩哔哩登录的问题

目前来看破解登录验证码的难度略高,故还是选择了使用chrome extension直接读取用户cookie来保持登录和拿到CSRF Token。

发表评论

电子邮件地址不会被公开。 必填项已用*标注