[原]23.app后端如何架设文件系统

标签: | 发表时间:2015-04-14 03:11 | 作者:newjueqi
出处:http://blog.csdn.net/newjueqi

         现在app展现内容的形式多种多样的,有文字,图片,声音,视频等等,其中文件占了一个很大的比重。随着app不断运营,文件会越来越多,占用的磁盘空间也不断增大,架设一套高效的文件系统,对于整个app架构有着巨大的影响。

 

1.    如果可能,使用成熟的文件云存储服务

 

       对于创业公司来说,我一直推崇的架构原则是“ 尽量使用成熟的第三方服务和软件,自己只负责业务逻辑”。

 

         架设文件系统,需要牵涉到文件的分布式存储,图片水印,图片缩放,还有CDN等方面,每方面都能耗费掉巨大的开发成本和运维成本。

 

对于小团队来说,我不觉得得开发人员自己弄这些服务做得比专业的第三方云存储服务好,所以还是别折腾,用第三方云存储服务吧。

 

         而且,我觉得,平均算起来,用第三方云存储服务,比起后端人员开发和运维的成本低多了,想想开发人员钻研和开发这些文件服务所需的时间就知道了。特别是云存储的下载速度,记得我当时第一次使用云存储下载文件吓呆了,居然达到了10M/s的下载速度,大家想想,这么快的下载速度,是多爽的用户体验,带来飞一般的感觉。

 

2.    架设文件系统

 

当然了,不一定每个团队内部都同意使用第三方云存储服务,很多老大的想法是要把核心数据掌握在手上,这个时候就只能走架设文件系统之路。

 

         App后端的文件系统,我认为涉及到下面3个方面:

 

(1)分布式文件存储

 

         对于app的业务来说,分布式文件存储的要求其实很简单:

 

a.      需要扩容的时候,只需要简单的添加机器就能做到,不需要重启整个文件系统上的机器。

b.      保证高可用,冗余备份,避免某台机器挂掉了,文件服务就停止了。

 

         在移动互联网时代,处了视频类的应用外,其他应用都是以小文件为主,所以我觉得分片式的文件系统不需要考虑,涉及到文件的分片问题,那运维和架构就很复杂了。例如,怎么知道某个文件是否已经损坏了?

 

         这里我向大家推荐的分布式文件存储系统是FastDFS。

 

         FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

 

         据我了解,FastDFS已经在UC,56,Kugou等IT企业被广泛使用,其中Kugou用FastDFS保存着500TB的文件。

 

         在生活中的仓库里,有很多货柜用来存放货物,怎么能保证无论增大了多少货柜,都能被合理使用的呢?

 

         核心是每个仓库里都有一个仓库管理员,当增加了货柜,仓库管理员都收到。当工人需要向仓库里放货物,先问仓库管理员哪个货柜有足够的空间存放货物,仓库管理员会告知工人具体哪个货柜,然后工人走到对应的货柜中存放货物。

 

         上面仓库中的仓库管理员和货柜,就是FastDFS在生活中的模型。

 

         FastDFS就是仓库,  FastDFS里有两大角色:跟踪器(tracker)和存储节点(storage)。跟踪器(tracker)就是仓库管理员,主要做调度工作,在访问上起负载均衡的作用。存储节点(storage)就是货柜。

 

         存储节点(storage)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。

 

         上面就是FastDFS的简单介绍,有关FastDFS的具体工作原理,各位可在网络上搜索相关的文章详细了解。

 

(2)图片水印,缩放和裁剪

 

         图片操作是非常消耗CPU,内存,和大量的磁盘IO,所以在选择图片处理工具要慎重!!!

 

         推荐使用GraphicsMagick,一个久经考验的图片处理软件,支持多个平台,而且支持多种语言的客服端。GraphicsMagick是ImageMagick的一个分支,相对于ImageMagick而言,TA处理速度更快,消耗资源更少,并且大的图片处理网站,如 Flickr and Etsy  已经在使用TA了。

 

         具体的实现方法,可查看我写的两篇博客《app后端设计(12)--图片的处理》,《app后端设计(13)--IM4JAVA+GraphicsMagick实现中文水印》 。

 

(3)CDN

 

         CDN,最大的作用就是使图片,音频,视频等静态文件下载速度更快,用户体验更好。

         在访问量大的时候,通过CDN,把图片,音频,视频等静态文件挡在服务器前,也是一种应付高并发的方法。

 

         不是国内一二线的互联网企业,就不要考虑架设专属的CDN网络啦,乖乖购买CDN服务吧。

 

         现在除了传统的CDN服务商外,阿里云和ucloud也提供了CDN服务,极大地方便了开发者。

 

         另外,很多CDN服务商都提供了图片的水印,缩放和裁剪功能,如果能直接使用就不需要在图片上花费额外的开发成本。

 

 

---------------------------------------------------------------------------------------------------------------------------

打开链接   app后端系列文章总目录 总目录 ,能查看本人发表过的所有原创“app后端”文章。

【作者】曾健生
【QQ】190678908
【app后端qq群】254659220 
【微信公众号】 appbackend
【新浪微博】 @newjueqi
【博客】http://blog.csdn.net/newjueqi 

 

 

作者:newjueqi 发表于2015/4/13 19:11:50 原文链接
阅读:70 评论:0 查看评论

相关 [app 后端 文件系统] 推荐:

[原]23.app后端如何架设文件系统

- - 曾健生的专栏
         现在app展现内容的形式多种多样的,有文字,图片,声音,视频等等,其中文件占了一个很大的比重. 随着app不断运营,文件会越来越多,占用的磁盘空间也不断增大,架设一套高效的文件系统,对于整个app架构有着巨大的影响. 1.    如果可能,使用成熟的文件云存储服务.        对于创业公司来说,我一直推崇的架构原则是“ 尽量使用成熟的第三方服务和软件,自己只负责业务逻辑”.

18.app后端如何实现LBS

- - CSDN博客推荐文章
移动互联网,除了一直在线这个特点外,还有一个重要特点,能定位到手机的位置. 查找附近的人,附近的餐馆等服务,以及大量的o2o应用, 都需要使用LBS(Location Based Services). 1.如何获取用户的地理坐标.   现在,基于手机来获取用户的地理坐标,主要是下面两种方法:.   (1)使用手机上的GPS模块.

14.app后端如何设计api

- - CSDN博客推荐文章
app和后端的交互,一般都是通过后端提供的api实现. api的设计,估计很多刚进入app后端的小伙伴会一无头绪,不知道怎么入门. 下面根据自己3年的app后端经验,总结出下几个api设计原则,给小伙伴参考.   这个问题在以前发表的文章“7.app和app后端的通讯”中其实已经回答了,这里再重复一次.

Ext文件系统

- Haides - 博客园-首页原创精华区
  虽然从Ext2到Ext4,找数据的方式发生了变化,但是,磁盘的布局还是非常相似的. 其实这个东西也不需要变化,因为现在也没什么特别巧妙的方式,而且磁盘的吞吐量、效率的瓶颈也不在这里. 当然,这里排除那些根据自身文件特点设计的数据库,毕竟还是为了支持通用文件.   Boot在第一个块,放的应该是引导程序,超级块就放在了第二个块上,如果不是可以在mount的时候通过参数sb来设置.

移动APP后端网络处理一些问题记录

- - BlogJava-首页技术区
这里讲的移动APP主要指的是安卓平台,大部分情况也适用于IOS等移动平台,可能重点嘛会在后半部分呢. 但凡一个常用的APP都会嵌入至少一个SDK,不同来源或同一来源,有广告SDK,有推送SDK,有性能汇报SDK,有用户跟踪SDK,有统计流量SDK等,有支付SDK等等. 虽然带来了功能的复用和解耦,便于纵向扩展,但可能会存在:.

[原]21.app后端如何高效更新内容

- - 曾健生的专栏
         在app的主页或通知栏,经常需要通过api取最新的数据. 那么,怎么在这部分上做优化,使获取内容的效率更高呢. 在本文中,通过推拉和增量更新,实现了一种高效获取数据的策略. 1.高效更新数据策略在app中的应用场景. 如图所示,在app首页,经常会有这种瀑布流形式的内容,具体可参考新浪微博的app.

[原]17.app后端如何保证通讯安全--aes对称加密

- - 曾健生的专栏
在上文《16.app后端如何保证通讯安全--url签名》提到,url签名有两个缺点,这两个缺点,如果使用对称加密方法的话,则完全可以避免这两个缺点. 在本文中,会介绍对称加密的具体原理,和详细的方案,使app通讯更加安全.   采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密.

你的下一个文件系统——Btrfs

- frocket - K.I.S.S. - 简单哲学
提起 Btrfs ,相信广大折腾帝们都不会陌生,被誉为“下一代 Linux 文件系统”的它,具有扩展性好、支持数据校验、支持多设备管理等等强大特性,使得 Ext4 也只能成为悲剧的过渡产品,还不赶快找一个 Ubuntu 10.10、Fedora 15、Meego 什么的试一下. 支持什么多设备、什么数据校验跟你有一毛钱关系啊.

NFS 文件系统源代码剖析

- wuyan - IBM developerWorks 中国 : 文档库
NFS 文件系统是目前最为成功的网络文件系统,在文件共享领域有着出色的表现,特别是 pNFS 的出现,使得 NFS 文件系统在性能和规模上有了大幅提升,为其带了更为广阔的应用空间. 同时,NFS 之所以备受关注,还在于它在 NAS 存储领域的关键作用. 本文剖析了 NFSv3 文件系统源代码,使开发工程师,技术支持人员,特别是存储领域从业人员对 NFS 有更为深刻的认识.

文件系统文献推荐

- Lianhui Wang - 刘爱贵的专栏
非常好的文件系统阅读文献,研究存储和文件系统的不能不读的,其中的每一个文件系统都非常经典的,代表存储或者文件系统发展过程的里程碑.