Policr Mini
Policr Mini 更新:新部署模型,网格验证,图片重写机制以及 ARM64 架构支持
这是第一篇在博客中发表的更新日志,很高兴在此宣布 Policr Mini 的新内容。你们可能也注意到,前不久 Policr Mini 的域名已更换为 mini.gramlabs.org,它是新的官方域名。 官方的线上版本最后一次具有实质功能变化大约是在半年以前,这期间也不定期的做了一些维护升级工作。这半年来的更新也逐渐在开发分支积累,这些变化将在下面一一介绍。 新的部署模型 在此前版本中机器人只能处于 Polling 工作模式(轮询获取更新),我们将官方实例部署于荷兰(或其它欧洲国家)节点,以尽可能的减少延迟。但这是远远不够的,通信路径决定了它的网络延迟并不会太低。 注释 在最理想的部署环境下,机器人程序应该运行在离自己的数据中心最近的位置,并和同样位于该数据中心附近的 Bot API 服务端通信。它最好通过 Webhook 工作模式获取更新。 得益于对全新的 Telegex 1.0 框架的适配工作结束,我们可以随意改变获取更新的工作模式,自由配置 Bot API 的服务端地址。官方实例当前在 Webhook 下工作,并与本地部署的 Bot API 服务端通信。这几乎把延迟降到了最低,所以能感受到它的响应速度明显更快了。 信息 对于自建用户而言,要切到到 Webhook 工作模式并和本地部署的 Bot API 服务端集成,你需要额外配置一些东西。请参考此处。 网格验证 此前默认的验证方式是通过识别单张图片,并在数量不超过 5 个的按钮列表中进行选择。严格来说,它存在较大的“碰运气”可能。我们当然也可以简单的提高答案列表的个数,但会导致消息显示占用太长的屏幕空间。 其实很早我们就开始考虑用更复杂的交互来避免这一点,在「多选」和「多阶段」以及「多图片」中犹豫了很久。实际上这些我们都会实现,但当时考虑的是优先实现哪一个。最终我们实现了「多图片」,即网格验证: 来自『POLICR · 中文社区』的验证,请确认问题并选择您认为正确的答案。 选出所有「火车」的图片编号 您还剩 198 秒,通过可解除限制。 329 107 548 817 428 106 327 598 129 提示 就像上面的模拟 UI。网格验证会生成单张 9 宫格图片,让被验证用户选择其中的某一类图片。每一张图片都会被“编号”,每一个按钮上都是多个编号的组合。 理论上网格验证的安全性要高得多,因为每一张图片都是随意组合生成的,且答案数量更多,识别难度更大。 我们以上面的截图为例,正常思路的人类会认为答案是 248,但实际生成答案是 428。它是无序的,这也进一步阻碍了识别速度。即使面对批量过验证的“人形机器”,也有够受的。不过我们仍然认为网格验证是用户友好的,所以它成为了新的默认验证模式。 信息
升级 PostgreSQL 到 16 版本(适用于 Policr Mini)
为什么要升级 在 Policr Mini 项目成立时 PostgreSQL 的大版本为 12,而现在的 PostgreSQL 已进化到 16 版本。落后数个数据库大版本的状态对于项目的可持续发展是不利的,这便是升级原因。 注释 如果您的实例使用的数据库版本已经是 16 或更新的版本,您不需要做这些。官方实例于 2023-08-18 完成升级,部署于此日期之后的实例通常也不需要升级(因为文档的配置模板中的版本已是最新)。 一般的升级步骤 PostgreSQL 官方有一个叫做 pg_upgrade 的工具,它可以直接将旧版本的数据兼容性提升到新版本。但是这个工具有一些限制,比如不能跨大版本升级。 如果要将 12 版本升级到 16 版本,我们需要循序渐进的经历这期间的所有大版本的过渡升级:12 -> 13 -> 14 -> 15 -> 16。这太过于繁琐,所以我们不使用这种方法。 提示 若我们后续会紧跟 PostgreSQL 的版本步伐,pg_upgrade 其实也可以是合适的工具。 数据备份与还原,升级一步到位 我们可以通过 pg_dump 和 pg_restore 两个工具来备份和还原数据,这样就可以一步到位的完成数据兼容性和数据库版本的升级。 具体步骤 以下步骤都默认在项目根目录下运行,也就是 docker-compose.yml 存在的目录。请先 cd 到该目录下,再往下看。 创建数据备份目录: mkdir dumps。此步骤是为了让数据备份文件可以存放到指定的宿主机(Host)目录中,为备份和还原做准备。 编辑 docker-compose.yml 文件,在 services -> db -> volumes 下添加 - ./dumps:/dumps,请注意缩进的正确性。此步骤是为后续还原数据做准备。 停止机器人服务: docker compose stop server。此步骤是为了避免在备份和还原期间,机器人向数据库写入新的变化。 备份数据: docker compose exec db pg_dump -U postgres -F c -Z 5 policr_mini_prod > dumps/policr_mini_prod.