先放网址和预览
避免太长不看,先放网址和预览图
https://111666.best/
闪光点
用了一些时间写了这个图床,自认为有很多可圈可点的地方
- 颜值担当,UI现代化,支持暗黑模式,设计感拉满
- 操作丝滑,跟吃了德芙一样
- 多重备份,分布式数据库,oss冷备份,安全无忧
- 全格式支持,前端预压缩预转码,减少卡顿
- 校验位设计,超级耐打,天生就带着安全基因
- 尊重隐私,不用登录,支持撤回,使用浏览器IndexedDB数据库
无需登录
首先,图床是不用登录的,这在你需要临时传图的时候很方便
允许删除且同步删除CDN缓存
- 很多图床是不登录就不能删图,万一误传了很麻烦,但我们可以在不登陆的情况下删除图片,因为本地记录了你的凭据(token)
- 有些图床删除了图片还能访问,是因为没有清除图片在CDN的缓存,我们的删除会同步清理对应的缓存记录
- token在首次打开网页会储存到浏览器本地数据库,也支持你自己定制token的字符串值
简练的API
图床上有介绍API调用方式,方便开发者调用
分布式数据库,皮实耐用
使用rqlite做分布式数据库,理论上即使图床所在某个机房被毁灭数据都在其他地方有实时备份
图片URL设计
- 图片URL为随机产生,不含有时间信息,对隐私保护有一定的效果
- 图片URL有签名校验位,能够减缓随机url ddos攻击产生额外数据库查询压力
支持复制为markdown/bbcode/直链
点击就能复制,方便发帖使用
Golang的运行效率高
go的运行效率的确比大部分语言都高,某种意义上抗ddos能力高一些?
技术栈
- golang主程序
- rqlite分布式数据库
- cloudflare api,用于清理缓存
- cloudflare waf,针对程序做进一步的配合,增强ddos抵抗
- oss冷备,b2/r2,这个只做冷备,不做热数据
- 数据库定时snapshot,图片文件每月离线备份
为什么用rqlite分布式数据库
当你写小型项目的时候,会遇到选数据库的问题,mysql内存和cpu占用太多了,安装配置的细节太多,有时候会被我嫌弃
于是你有时候会觊觎sqlite,作为嵌入式数据库,sqlite没有server端,一个文件就是全部。的确是非常精巧高效的项目。IT界对sqlite的评价非常非常之高,每次在hacker news提到sqlite,就会变成表彰大会。sqlite的测试代码量巨大无比,使得sqlite的可靠性无比强大。
但是sqlite有个不算缺点的缺点,他是为单机数据库设计的,无法容易实现并发读写,无法容易的实时备份。总不能每秒备份一下数据库文件吧。这意味着数据库损坏,或者机器宕机的影响会非常大。mysql这种有主从备份设计的数据库没这个问题。
建议看一下rqlite,这个库利用sqlite实现了raft一致性协议。可以用n多个节点组成数据库集群,所有数据库间同步数据,任意一台机器挂了都不影响大局。并且可以从任意一台机器上做离线备份,而不用担心影响其他节点的性能。
作为基于sqlite的数据库,rqlite提供了http接口,并且继承了sqlite的优点:省资源。
我们16图床每个rqlite数据库只占用5M的内存,1M不到的硬盘存储数据库日志和文件。
加载速度测试
bug反馈
可能有bug,欢迎各位反馈
另外本图床计划长期维护,不会随便跑路。稳定性是最大的追求。