硕鼠的博客站

范路的博客主站,时而会发些东西。

图片存储和分享开源系统的设想

好像好久没有更新博客了,以前在上海的时候,还能够坚持每周更新一次。现在会到了北京,周末的时间能够和家人在一起,反而没有时间更新博客了。后面还是尽量保持更新吧。虽然我的博客看的人不多,就算是给自己留下的一些回忆吧。

这篇博客,是很早之前写的,前面几篇博客也提到过,但是由于一些比较麻烦的问题,一直没有贴,最近好像麻烦的问题都处理干净了,那么就贴出来吧,这个周末如果有时间的话,没准儿还能再写一点儿。

为什么需要这种开源系统

在写这篇博客的时候,我并不知道是否已经存在了这样的一套系统,或类似的系统。可能有,也可能没有。我想,有的可能性应该更大一些吧。

这种开源系统,是为了解决不同的人,不同的机构之间进行图片应用开发过程中进行分工的。如果每一个想要提供图片底层服务的企业、团队或者个人,都去编制一套自己的标准,并设立一套自己的API和接口。那么,那些想要开发上层图片应用的个人或机构,就必须做出选择,到底是使用哪一家的。一旦他们做出了选择,则很难再进行改变。一次只能使用1家的服务,很难为统、同一个上层服务,选择多家供应商提供的底层服务。

如果有一套开源的系统,一套相对简单,但功能基本完整的图片底层服务接口。有很多厂商以此为基础,提供服务。那么是不是可以部分解决这种问题呢?有这种可能,但也不能肯定。毕竟很多大的厂商,喜欢搞封闭的一套。

所以这里只能说是一种设想和可能。并不是对此类系统进行可行性的分析。

基本的架构

这种系统,通常是分为底层架构、功能实现和扩展接口三个部分的。这里并不是做软件架构,所以就不那么详细的来分拆了。只是把一些软件需要具备的基本功能,和留给扩展的接口简单的介绍一下。

我并不想自己去开发一套类似的东西,至少目前还不想。所以说是功能介绍,好像并不太准确。作为一篇准备放在梦想园板块中的博客,大家就当我是在介绍一个梦想中已经实现了的软件吧。

结合OpenID的认证系统

照片系统中,有一个功能是必须具备的。那就是用户认证系统。如果是像传统网站那样自己搞一套用户注册体系,那么肯定是会有问题的。因为这套系统的设想是分布在不同的网站或服务器上,然后让用户自由选择,将照片放到不同的服务器上。一个用户可能同时会使用多个照片服务器。那么就要求照片服务器所使用的用户登录和认证体系必须是统一的。按照现在的流行趋势来看,使用OpenID认证系统看来是一个不错的选择。

现在,提供OpenID认证体系的公司越来越多了,甚至国内还有一些小型的网站,利用开源系统,提供OpenID认证。国内比较常用的一些认证体系,也逐步开始支持OpenID了。

图片系统如果能够使用OpenID,那么就有可能实现跨服务器的认证和权限分配。可以在不同的服务器上,使用同一个OpenID进行登录和认证,只有这样才有可能实现跨服务器的图片存储。

统一的图片调阅权限审核

图片除了写入时的认证之外,还有一个非常重要的问题,就是图片的调阅认证,什么样的人,可以调阅什么样的图片,这是避免陈冠希悲剧再度重演的必要保障。由于图片是存放在不同服务器上的,那么最好能够直接将调阅权限和每一张图片绑定,每一张图片单独的判断,来人是否有权调阅。

应该使用统一的短链接服务,来进行所有图片的解析。这样所有图片的连接地址,就统一了。每一个需要调阅图片的访问,都使用统一的短链接进行调阅。在短链接转换之后,到特定的图床服务器上去验证调阅的权限。调阅者最好和图片拥有者使用统一的OpenID系统来进行认证,这样的话,关系的处理,就可以放到图床体系的外面去了。

基本的图片加工系统

图片进入图床服务器之后,根据不同的需要,可以进行一些简单的图像加工和变换。这个系统,应该是建立在图床服务器里面的,图床服务器应该提供一些基本的功能,并留出开放的接口,可以接入其他标准的图片加工工具。

通常会用到的图片加工类型有:格式转换、精度和分辨率转换、剪裁、水印、简单的色彩调整,以及图片的拼接等。这些功能基本上使用现有的imagemagick应该都是可以实现的。至于一些特殊的图像转换,比如2D转3D,添加版权水印等,都可以留出接口,让需要的人自己去添加。

图片是属于图片所有者的,那么图片的各种变形,理论上来说也应该是属于图片所有者的。如果图片所有者能够提供这些图片的常用变形版本,那么大部分图片调阅者都会选择直接调阅的。所以图床系统缓存原始图片的各种常用变形对于图片的传播和保存,都是有好处的。系统可以在图片的某些特殊格式或变形被调阅的时候,自动生成符合要求的图片,然后进行缓存,如果同样的格式再次被调用,那么就直接使用缓存的结果。

可以在图片的短链接后面,添加上对于格式的要求,来形成新的图片链接。比如:http://***.**/aCq3D/w800BW 就可以代表前面那幅图片宽度为800的黑白二值版本。

这样,每一个图片有一个唯一的url链接,同一张图片的不同变形,也有唯一的url链接,而且这个链接和原图的链接是有明确关联的,任何人或系统,可以在得到原图url或某一种特定变形的url之后,计算出这个图片其他各种变形的url来。图床服务器可以不用为每一个特定的变形进行运算,得到某种特定的变形url访问之后,首先要判断的还是权限的问题,要判断访问者是否有权限使用这种特定的变形。比如说,通常不是每个人都有权限调阅原始图片的。 一些相近的图片变形,是可以互相替换的。比如,有人刚调用了一次宽度为800的图片,图床服务器进行了运算,并缓存了这个分辨率的图片,紧接着又有人来调用宽度为790的图片,那么就不用运算了,直接将800的给出去就好了。

统一的图片短链接服务

提供图片短链接,应该是和普通短链接不同的。普通的短链接是使用完整的连接,进行hash之后,得到的一个几十甚至是上百进制的数值。所生成的数值,只与原来的URL有关。

图片的短链接,应该是与图片本身相关的,也就是说,可以直接对图片进行指纹提取,然后再对图片解压缩后的原始二进制数据,进行hash,然后使用这个hash值对图片网址进行存储。这样的话,就可以实现相同的图片,使用相同的短链接,多个存放了相同图片的URL,其相对应的短链接是一致的。然后使用负载均衡来自动派发请求。即使图片的存储的格式有些许差异,其对应的短链接,也是一样的。

由于上文中说到的各种图片变形格式的唯一短链接,所以这个系统还有一点有别于其他短链接系统,这个短链接系统需要在那一窜几十上百进制的字符串之后,留出一段明文的,可以进行解析的图片格式说明语言。每一个图床服务器上的URL,过来注册和转换短链接的时候,应该标明自己支持哪些格式标识,这样短链接服务器在转换短链接的时候,就可以根据用户请求的特定格式,来分配服务器。

这个短链接系统,应该是和图床系统相分割独立的,但又是相辅相成的,这里就把它作为一个图床的辅助系统,写在这里吧。

图片的组织和存储系统

图片本身,是有一定的关系的。由于现在基于图片的搜索还比较困难,目前只有google的picasa里面使用到了头像识别来进行图片的标示和定位。所以通常是使用一些文字来对图片进行标注、分类和描述,也有些系统可以使用时间和地理位置来定位图片。

对图片进行标示和分类、文字描述,其目的就在于希望能够更方便、更准确的搜索和定位图片。如果要做一套开源的,可以多服务器联合工作的图床系统的话,那么就要求图形的组织、标示、标注和分类、文字描述等系统,是独立于所有图床服务器之外的,是可以跨服务器工作的。那么,这里的设想就是,图床服务器是独立工作的,只负责处理图像的存储和调阅以及相关过程中的权限设定和审查、验证,图床服务器不互相引用其他同类服务器。所有图片的组织和分类信息,由其他系统来完成这里不讨论。

图片使用的审计和统计系统

图片的上传、修改和调阅,是需要一个日志系统的。那么这个日志系统,可以附带各种审计和统计的功能。甚至可以一次为接口,开发一些计费功能。开源软件上就不需要计费系统了,但是可以把接口保留下来,以备日后使用。

功能的设想和拓展

一个系统的生命力,部分取决于其可扩展性。为了保持一定的扩展性,开源图床应该具备一些必要的接口,来进行某些扩展。

前面提到的图片转换接口,可以在基本图片加工和转换功能之外,添加特定的图片转换功能。

图片存储和使用的统计,并最终留出计费接口。

开源的图床系统,只需要考虑单机工作就好了,但是如果有的公司系统以此为基础,建立大型系统,那么也应该留出自组网和多服务器协同工作的接口。

至于分享到微博等social网站、接受反馈并记录,进行分类和标注标识等等,应该是在其他系统里面完成的,和本系统无关。那些系统可以依靠开放的API接口来使用本系统中的图片资源,可以使用同样的认证体系。

调整、部署以及推广

本文纯属YY,那么就让我继续Y完吧。如果真的有了这么一套系统,那么应该如何推广呢?首先要去吸引那些个人站长,他们可以在自己租用的空间上部署,并存放一些自己的照片,也可以存放一些朋友的照片。然后,可以让一些个人或小团队,在此基础上,建立一些小的,基于图片的新的应用。如果这些能够成功的话,最后可能会有企业对其进行修改,添加上计费的模块,并部署更大型的,但与之相兼容的系统。

隔了好久都没有更新博客了,事情有些多。我想这不应该成为理由。回到了北京,周六日需要陪伴家人,没时间写博客了,这是其中的一个原因,这篇东西,写了好几周,我自己也不是很满意,但最终还是觉得应该丢出来,算是对自己思想的一种记录吧。以后尽量保持每周写博客,但是也很难保证,只能说尽量吧。

 

You can leave a response, or trackback from your own site.

Leave a Reply

Close Bitnami banner
Bitnami