新一代动态图片CDN设计思路

C 2018-2-18 7240

熟悉的朋友可能知道我以前写过一个分布式图片存储插件,名叫popic。

原理比较简单,就是把图片按照内容页id存入服务器中,供内容页面调用。如果某个存储器塞满,站长可以换下一个存储器,新增加的帖子上传图片,只需要修改存储器ID即可。存储器端代码无需数据库,只需要PHP环境即可动态加载,同时判断来路防盗链等。其实类似的程序也有不少,只不过很少有能把图片分发到多个存储,大多数作为独立图床存在。

因为这个插件具有高度的独立性,因为逻辑简单,理论上可以轻易加载到任何PHP程序中(比如WP、Typecho、Zblog、Emlog、Xiuno等,它们的“页面”只是加载了模板的帖子,内容ID还是在一个表中的)。这个程序在我的博客和之前的图库都有用到,最多曾存储6万张图片,日访问量3000+IP,较好地通过了负载测试。

最近研究主机发现一个有趣的现象,很多站长手里有大量无用的限制主机资源,而有些站长又苦于没有CDN。传统的CDN只能作为一个反向代理使用,只能缓存静态文件,而且一个网站只能使用一个固定的CDN。那么可不可以把这些闲置的主机资源作为动态图床CDN(缓存器)使用呢?为此我就想出一个似乎可行的思路:

1.主站安装popic,用户将图片上传至存储器。

2.在N个缓存器配置pocdn,并将缓存器地址写入主站数据库。

3.用户读取主站内容时,主站调用随机的可用缓存器API。

4.缓存器判断磁盘容量,若额度即将超限,则向主站发送不再缓存请求,主站把该缓存器标记为不可用。

5.若缓存器可用,则从存储器下载(curl)原图(或缩略图)缓存至自身,将图片输出至客户端。

6.若缓存器宕机,客户端JS判断无法加载,则向主站发送错误记录(客户端标识、时间、错误频次等),并加载新缓存器。

7.主站根据错误记录,降低使用频率、停用或删除无法使用的缓存器,另可根据缓存器地区记录,实现请求调度。

8.后期缓存器可由客户捐赠,主站根据缓存器缓存额度记录,对捐赠用户进行奖励。

这种方案的好处有很多,除了充分利用闲置VPS资源、避免单一CDN方案外,还可以很大程度上减少图片存储域名被墙给网站带来的影响。这种方案目前一些网站(ex绅士)已经在使用,但他们是利用类似于P2P的客户端,让用户安装程序后对图片进行分流,而且只能通过IP地址:端口加载。pocdn可以基于任意主机和域名,强制https链接,通讯更加安全可靠。

最新回复 (1)
  • C 2018-2-18
    2

    如果这个程序能实现的话,会给中小网站带来一次技术革新,思路都有了,只差一个程序员了(笑

    • 屌丝论坛
      3