23.app后端如何架设文件系统
现在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
版权声明:本文为博主原创文章,未经博主允许不得转载。
23.app后端如何架设文件系统的更多相关文章
- 26.app后端怎么架设推送服务
推送服务已经是app的标配了.架设推送服务,除了可以使用第三方服务商外,也有大量的开源技术可以选择. 现在推送主要分两块,android推送和ios推送,在下面分别论述: 1. Android推 ...
- app后端设计--总目录 (转)
特此说明,我转载的!!! app后端设计(1)--api app后端设计(2)--xmpp的使用 app后端设计(3)--短信,邮件,推送服务 app后端设计(4)-- 通讯的安全性 app后端设计( ...
- app后端设计--总目录
做了3年app相关的系统架构,api设计,先后在3个创业公司中工作,经历过手机网页端,android客户端,iphone客户端,现就职于app云后端平台bmob(想了解bmob点击这里).其中的乐与苦 ...
- [置顶] app后端设计--总目录
版权声明:本文为博主原创文章,未经博主允许不得转载. 做了3年app相关的系统架构,api设计,先后在3个创业公司中工作,经历过手机网页端,Android客户端,iphone客户端,现就职于app云后 ...
- app后端设计(12)--图片的处理
app上线后,不断接受用户的反馈,于是,反馈非常差的情况下,都会有app的改版. 一旦app的改版,都会有比较大的UI改动,一改动UI,那么图片的尺寸也就必须要改变. 在app后端设计(1)—api( ...
- app 后端技术
app 后端技术 一直以来工作的方向是web server,对app server没有什么了解.虽然没有接触过移动app开发,但对app后端技术还是挺有探索欲望的,app应用和web应用在前端的用户习 ...
- **app后端设计(10)--数据增量更新(省流量)
在新浪微博的app中,从别的页面进入主页,在没有网络的情况下,首页中的已经收到的微博还是能显示的,这显然是把相关的数据存储在app本地. 使用数据的app本地存储,能减少网络的流量,同时极大提高了用户 ...
- 【转】app后端如何选择合适的数据库产品
转自:http://blog.csdn.net/newjueqi/article/details/44003503 app后端的开发中,经常要面临的一个问题是:数据放在哪里? mysql ?redis ...
- app后端设计(0)--总文件夹
原文:http://blog.csdn.net/newjueqi/article/details/19003775 做了接近两年app相关的系统架构,api设计,先后在两个创业公司中工作,经历过手机网 ...
随机推荐
- kettle 的表输出 table output
kettle的表输出: 双击后,看设置, 1,在connecttion后面,点击new里新建一个.设定各个选项值,如选择mysql类型,则配置hostname,database name,端口, 用户 ...
- How tomcat works 读书笔记十二 StandardContext 下
对重载的支持 tomcat里容器对重载功能的支持是依靠Load的(在目前就是WebLoader).当在绑定载入器的容器时 public void setContainer(Container cont ...
- LambdaToSql 发布 兰姆达转换sql
文档目录索引 查询.函数.分组.排序.分页 添加 Insert into 编辑 Update set 删除 Delete 生成实体 内置常用工具类库 文档完善中... 事务处理 Join 连接查询 ...
- 智能合约最佳实践 之 Solidity 编码规范
每一门语言都有其相应的编码规范, Solidity 也一样, 下面官方推荐的规范及我的总结,供大家参考,希望可以帮助大家写出更好规范的智能合约. 命名规范 避免使用 小写的l,大写的I,大写的O 应该 ...
- 9.3.3 scrapy 框架
scrapy是一个非常好用的Web爬虫框架,非常适合抓取Web站点从网页中提取结构化的数据,并且支持自定义的需求.在使用scrapy爬取网页数据时,除了熟悉HTML标签,还需要了解目标网页的数据组织结 ...
- Python list 两个不等长列表交叉合并
遇到一个需求,需要对两个长度不一定相等的列表进行交叉合并.像拉拉链一样(两边的拉链不一定相等). 如: a = [1, 3, 5] b = [2, 4, 6, 8] 需将a, b 合并为 c c = ...
- 网站SEO优化问答精选
1.百度每更新一次,网站的收录就减少很多,但是我每天都增加伪原创的内容啊? 这个问题大多数是因为网站权重导致百度不够重视你:另外就是文章质量度不高,没有可读性或是原创度太低,尽管百度会收录,但是经过一 ...
- for循环嵌套讲解:
1.for循环嵌套讲解: class ForForDemo { public static void main(String[] args) { //大圈套小圈思想: ...
- OpenStack初识
一.它可以用来做什么? 想认识一个事物,必须先弄明白它是什么,能干什么.首先说一下,openstack是一个搭建云平台的一个解决方案,说他不是个软件,但是我觉得说是一个软件,能够让初学者更容易接受和理 ...
- Android框架之Volley与Glide
PS:在看到这个题目的同时,你们估计会想,Volley与Glide怎么拿来一块说呢,他们虽然不是一个框架,但有着相同功能,那就是图片处理方面.首先我们先来看一下什么volley,又什么是glide. ...