http://www.cnblogs.com/sennly/p/4136734.html

各种云服务这两年炒的火热,加之可以降低成本,公司想先在部分业务上尝试使用下,刚好最近有个项目有大量小文件需要存储,借着这个机会,研究分析下自建存储与使用第三方云存储,如果小规模试用后满意的话,会将更多的业务迁移到公有云上去。

一般而言存储功能我们会关注方案的功能可靠性及综合使用成本两大方面。

功能可靠性包含:

Ø 服务稳定性

Ø 服务性能

Ø 服务可扩展性

Ø 数据安全性

综合使用成本包含:

Ø 存储设备费用

Ø 带宽费用

Ø 额外备份费用

Ø 后期维护费用

我们下面从几个主要关注点来分析。

1. 自建存储的性能分析与预估

目前分布式文件系统用的较多的有MFS、TFS、FastDFS等,,TFS对运维同学的要求比较高,需要对TFS本身有较多了解,且淘宝对外开源的版本不太稳定,这一方面我们踩过坑。在我们以往的项目中,MFS使用的较多,简单,方便,可通过Fuse直接挂载到系统中,对于不是非常大量的小文件存储很合适,有不足的地方就是其较轻量级,应付不了很密集的访问。

1.1. 测试环境

测试环境有5台机器做存储服务,1台Master,3台客户端,通过1000Mbps网卡相连。

名称

CPU

内存

硬盘

Master

8核 HT

32G

15K Raid5

Trunk

8核 HT

32G

15K Raid5

Trunk

8核 HT

32G

15K Raid5

Trunk

8核 HT

32G

15K Raid5

Trunk

8核 HT

32G

15K Raid5

Trunk

8核 HT

32G

15K Raid5

Client

8核 HT

32G

15K Raid5

Client

8核 HT

32G

15K Raid5

Client

8核 HT

32G

15K Raid5

1.2. 业务场景相关数值估算

Ø 上传图片用户数

我们这个子项目目标用户量是2000万,因此以2000万为用户基数。由于没有有效的历史数据,因此在活跃用户估算、上传图片用户估算过程中,我们广泛使用80/20法则,以这种方法,估算出日活跃用户、上传图片用户数。

日活跃用户数:2000万X 0.2 = 400万

上传图片用户数:400万 X 0.2 = 80万

Ø 上传图片大小

我们假设用户上传原图大小为2M

Ø 活跃时间分布

同样使用80/20法则,每天24小时中有大概16个小时是人的活动时间,我们假设其中的20%时间用户发送图片且均衡分布,那么我们计算出活跃时间为:16 x 0.2 =3.2小时。

1.3. 内存预估

在官方文档中我们查到2500万个文件大概要占用Master Server 8G内存,因为MFS的技术架构所有文件的meta信息只能存储在Master Server中,因此不能平行扩展。业务上线初期,我们计划子项目的存储系统须满足正常情况下1个月的需求,上传图片的活跃用户数为80万,每人每天上传1张图片,所需存储文件总数为:80万 X 30 = 2400万。

每用户每天平均上传1张图片内存预估

活跃用户/万

单用户每天上传图片数

时间区间/月

总文件数/万

内存/G

80

1

1

2400

8

80

1

2

4800

16

80

1

3

7200

24

80

1

6

14400

48

80

1

12

28800

96

如果我们假设用户每天平均上传2张图片呢?将会有如下数据:

每用户每天平均上传2张图片内存预估

活跃用户/万

单用户每天上传图片数

时间区间/月

总文件数/万

内存/G

80

2

1

4800

16

80

2

2

9600

32

80

2

3

14400

48

80

2

6

28800

96

80

2

12

57600

192

即,我们现有的32G内存的服务器,大概可以支撑前3个月。随着时间延长,所需内存越来越多,如果平均每活跃用户每天上传2张图片,那么1年之内需要一台256G内在的服务器。除可纵向增大服务器内存外,更靠谱的方式是进行业务拆分。

1.4. 存储预估

在这里,我们同样以用户每天上传图片数及时间区间为变量分别计算。

活跃用户/万

单用户每天上传图片数

时间区间/月

文件大小

文件备份数

总文件个数

磁盘空间/T

80

1

1

2

3

2400

14.4

80

1

2

2

3

4800

28.8

80

1

3

2

3

7200

43.2

80

1

6

2

3

14400

86.4

80

1

12

2

3

28800

172.8

             
             

活跃用户/万

单用户每天上传图片数

时间区间/月

文件大小

文件备份数

总文件个数/万

磁盘空间/T

80

2

1

2

3

4800

28.8

80

2

2

2

3

9600

57.6

80

2

3

2

3

14400

86.4

80

2

6

2

3

28800

172.8

80

2

12

2

3

57600

345.6

1.5. 并发量预估

Ø 上传文件数每秒并发量

计算公式为:上传图片活跃用户数X每天上传图片数/每天活跃时长X3600

800000X1/3.2X3600 = 69.4

800000X2/3.2X3600 = 138.8

若活跃用户数每天上传1张图片,图片上传接口须满足至少每秒上传69.4个文件

若活跃用户数每天上传2张图片,图片上传接口须满足至少每秒上传138.8个文件

Ø 上传流量每秒并发量

计算公式为:上传文件数每秒并发量X图片平均大小

使用上面得出的上传文件数每秒并发量,图片平均大小为2,得出以下结果:

69.2X2M = 138.8M

138.8*2M = 277.6M

若活跃用户数每天上传1张图片,图片上传接口须满足至少每秒上传138.8M流量

若活跃用户数每天上传2张图片,图片上传接口须满足至少每秒上传277.6M流量

1.6. MFS性能测试

在我们的测试环境中,5台Trunk Server,3台Client,千兆的交换网络,测试出以下结果。

双机并发测试

大小/M

个数

文件总大小

花费时间

速率个/秒

速率M/S

0.25

80000

20000

456

175

44

0.5

40000

20000

332

120

60

1

20000

20000

258.5

77

77

2

10000

20000

247

40

81

三机并发测试

大小/M

个数

文件总大小

花费时间

速率个/秒

速率M/S

0.125

240000

30000

1106

217

27

1

30000

30000

367

82

82

2

15000

30000

343

44

87

测试结果总结如下:

Ø 文件上传个数的速率与上传文件大小成反比,文件越小,每秒钟上传个数越多。

Ø 文件上传流量的速率与上传文件大小成正比,文件越大,每秒钟上传流量速率越大。

1.7. 理论数据与实验数据的对比

现在让我们将上面理论估算出来的值与测试环境中所得结果做一对比,主要看每秒钟上传文件个数与流量速率。

Ø 每秒钟上传文件个数

每天上传1张图片理论需求:69.4

每天上传2张图片理论需求:138.8

实际能力:44

Ø 每秒钟流量速率

每天上传1张图片理论需求:138.8MB

每天上传2张图片理论需求:277.6MB

实际能力:87MB

注意:

以上只是单纯的上传测试,在实际生产环境,是读/写混合操作,读的数量会大大多于写操作,因此以上所得到的值为理论极大值。实际业务不会是平均分布,往往会有大的短时并发。

1.8. 业务解决方案

MFS具有简单易用的优点,但因其较轻量级,存在着一些缺陷。通过以上的估算及测试,我们会发现单一的MFS似乎不能满足我们基本业务需要,如果条件允许,则需要对业务进行切分,每个集群只应对一块业务,以减缩业务量,而切分的依据则可根据本文中得出的相关数据。

2. 自建MFS存储的测试数据

2.1. 1MB文件写入

1M文件写入,4台客户端执行,共12GB数据,数据备份数为3

客户端 花费时间

192.168.1.159 145

192.168.1.111 150

192.168.1.167 147

192.168.1.66 141

结果:每秒写入速率为82m/s,写入文件个数速率为:82pcs。

2.2. 128KB小文件写入

128KB文件写入,4台客户端执行,共12GB数据,数据备份数为3

客户端 花费时间

192.168.1.159 271

192.168.1.111 309

192.168.1.167 339

192.168.1.66 386

结果:每秒写入速率为37.7m/s,写入文件个数速率为:294pcs。

2.3. 1m文件读取

1m文件读取,4台客户端执行,共12GB数据

客户端 花费时间

192.168.1.159 61

192.168.1.111 157

192.168.1.167 113

192.168.1.66 137

结果:每秒读取速率为105m/s,读取文件个数速率为:105pcs。

2.4. 长时稳定性测试

1M文件写入,4台客户端执行,连续写入测试 14.5小时 写入文件4T 速度为 80.35m/s

3. 自建存储系统的成本估算

以下以使用MFS自建存储服务为例,核算其使用成本。假设未来业务的规范如下:

Ø 平均文件大小 2MB

Ø 文件数量 1000万

Ø 每日上传数量 100万

3.1. 需求计算

Ø 存储需求

存储大概需要2T空间,如果使用3份冗余的话,则需要6T空间。

Ø 带宽需求

根据2/8原则,将全天访问量的80%(100万X2X0.8),分布于20%的时间(24X0.2=4.8小时),因此计算出带宽需求为:93MB/S。

3.2. 自建存储服务器的预计成本

Ø 服务器及硬件

包含三台存储服务器,1台Web服务器(兼图片处理及视频处理),此处未做服务器的高可用及单独的计算模组,最低综合成本为:2万X4=8万

Ø 服务器托管费

以BGP机房的一般价格8000元/年/台,计算,则一年期的服务器托管费为:8000X4=3.2万

Ø 带宽费用

由于需求计算中所需带宽为93MB/S,因此我们至少需要1G带宽,以每100元/Mb/月价格计算,则一年期带宽费用为100X1000X12=120万

Ø 人力及维护成本

以维护人员薪资8000/月计,此人员每年平均使用20%的精力维护此组服务,则全年人力及维护成本为:8000X12X0.2=2.4万

经综合计算,自建存储服务器最低成本为:8万+3.2万+120万+2.4万=133.6万 ,因为不能按需使用,因此只能按照规划容量购买资源。

还有一种方式为使用普通机房的带宽(如东莞的资源),带宽便宜,20元/Mb/月,外加CDN加速,由于带宽主要还是在CDN上,而CDN价格一般在100元/Mb/月,因此价格不会少,反而可能会多。

4. 使用第三方云存储方案对比

目前在国内市场做云主机的基本都有专门的存储系统,在本方案中,只侧重于存储方面,而不涉及云主机及其它服务。我们之前在挑选存储合作伙伴时,做了一个对比表格:

其实在经过技术指数对比后感觉七牛云比较适合我们的应用,专门做存储,支持功能多,文档清晰价格也还可以。但后来经朋友介绍,了解到微软Azure已经在中国大陆运营,运营方是鼎鼎大名的世纪互联,因此又分配了些人力对微软Azure的云存储做了调研,综合分析后得出结论:微软的云存储更适合我们。

4.1. 成本对比

七牛云收费的大头在流量,而存储本身占用的比例很小,只有10%左右;微软Azure的存储使用成本与七牛云不同,其带宽成本低,每个月前20T流量免费,而存储本身成本高,1T的存储每个月需要1000元左右,如果将这个项目的全部数据放在Azure上的话,费用非常吓人,但与运营的同事咨询后得知我们这个项目所上传的文件在一小段时间后是可以删除的,存储的文件最多也是2T,每月存储成本在2000元左右。经过我们计算在控制文件存储数量的情况下,微软Azure的使用成本会更低。

4.2. 资源优势对比

Windows Azure由世纪互联运营,拥有北京、上海的顶级骨干机房,我们有做长期监控测试,网络质量非常好,再加上微软的技术实力及大规模的运营团队来做服务保障,服务质量能够得到保障。而七牛云,虽然其功能完整且使用也方便,但其各项网络及硬件资源可能无法与世纪互联相比,因此为了保障业务后续的稳定性,我们更倾向于使用Windows Azure的存储。

4.3. 七牛云的SLA服务质量保证

我们特意查看了七牛云的服务条款,对于SLA服务质量有如下描述,感觉服务质量级别不高。

Ø 数据安全

您了解七牛云存储无法保证其所提供的服务毫无瑕疵(如七牛云存储安全产品并不能保证您的硬件或软件的绝对安全),同时七牛云存储承诺不断提升服务质量与服务水平。所以您同意:即使七牛云存储提供的服务存在瑕疵,但上述瑕疵是当时行业技术水平所无法避免的,其将不被视为七牛云存储违约。您同意和七牛云存储一同合作解决上述瑕疵问题。

数据备份系您的义务和责任,七牛云系统具有数据备份功能不意味着数据备份是七牛云存储的义务。七牛云存储不保证完全备份用户数据,亦不对用户数据备份工作或结果承担任何责任。

您理解并充分认可,虽然七牛云存储已经建立(并将根据技术的发展不断完善)必要的技术措施来防御包括计算机病毒、网络入侵和攻击破坏(包括但不限于DDoS)等危害网络安全事项或行为(以下统称该等行为),但鉴于网络安全技术的局限性、相对性以及该等行为的不可预见性,因此如因您网站遭遇该等行为而给七牛云存储或者七牛云存储的其他用户的网络或服务器(包括但不限于本地及外地和国际的网络、服务器等)带来危害,或影响七牛云存储与国际互联网或者七牛云存储与特定网络、服务器及七牛云存储内部的通畅联系,七牛云存储可决定暂停或终止服务。

Ø 终止协议

七牛云存储可提前30天在七牛官网上通告、给您发网站内通知以及邮件通知的方式终止本协议。届时七牛云存储将您已支付但未消费的款项退还您指定的银行账户或其它可收款账户。

Ø 服务质量及赔偿

您理解,鉴于计算机、互联网的特殊性,下述情况不属于七牛云存储违约:七牛云存储在进行服务器配置、维护时,需要短时间中断服务;由于互联网上的通路阻塞造成您网站访问速度下降;

如果因七牛云存储原因造成您不能正常使用七牛云存储服务的,七牛云存储以小时为单位向您赔偿损失,即连续达1小时不能正常提供服务的,延长一小时的服务期(以此类推)。如果因七牛云存储原因造成您连续72小时不能正常使用服务的,或因七牛云硬件故障而给您造成损失(非因七牛云存储过错造成的故障除外),您可以终止接受服务并可以要求赔偿损失,但非七牛云存储控制之内的原因引起的除外。

在任何情况下,七牛云存储均不对任何间接性、后果性、惩戒性、偶然性、特殊性的损害,包括您使用七牛云存储服务而遭受的利润损失承担责任(即使您已被告知该等损失的可能性)。

在任何情况下,七牛云存储对本协议所承担的违约赔偿责任总额不超过向您收取的违约所涉服务之年服务费总额的25%。

4.4. 微软Azure的SLA服务质量保证

我们保证至少在 99.9% 的时间,我们将成功地处理请求以便读取来自读取访问地域冗余存储 (RA-GRS) 帐户的数据,只要在辅助区域上重试从主区域读取数据的失败尝试。 我们保证至少在 99.9% 的时间成功地处理请求以便从本地冗余存储 (LRS)、区域冗余存储 (ZRS) 和地域冗余存储 (GRS) 帐户读取数据。 我们保证至少在 99.9% 的时间成功地处理请求以便将数据写入本地冗余存储 (LRS)、区域冗余存储 (ZRS) 和地域冗余存储 (GRS) 帐户,以及读取访问地域冗余存储 (RA-GRS) 帐户。

我们在网络上找寻了一些资料,有如下描述:

Microsoft Azure在全球从没有丢失过数据,在中国提供3*2的备份,在上海和北京两地各三份备份。第二是微软的云计算有混合的优势,无论是私有云、公有云等,微软都可以提供无缝的对接,包括开发环境、框架、安全、身份认证等。第三是承诺,微软有技术、大规模运营的经验,了解中国对标准政策的法律法规,花费很长时间储备、建立研发团队,寻找合作伙伴,建设数据中心,要做到无缝的运营、保证较高的稳定性和质量是很难的。由世纪互联运营的Microsoft Azure提供99.95%的企业级服务等级协议(SLA)保证,每年停机检修时间不超过4.38小时,用户可以放心构建和运行高可用的应用程序,而不必担心将经历放在基础架构上。

5. 我们的选择

使用自建存储服务器,由于不能弹性使用且无法合理预估使用量,因此签合同时一般情况下只能按较大需求来购买资源,一年的使用成本为133万左右,且需要熟悉分布式存储的成熟的运维团队来维护,自如建的成本更高。而使用第三方的云存储,则需要考虑的方面更多些,除了要考虑功能性是否满足外,更重要的是稳定性、安全性以及品牌成熟度,毕竟管理层通常会认为大品牌的产品质量更有保证些。通过这次考查及分析,我们认为微软Azure的云存储会更适合我们,虽然在我们这个子项目活跃用户数达到1000万以后其花费花更多一些。所谓合适,其实就是某种程度上的折衷,适合我们的才是最好的。

http://www.cnblogs.com/sennly/p/4136734.html

自建存储与使用微软Azure、七牛等第三方云存储综合考察分析的更多相关文章

  1. 微信小程序云开发-云存储-上传文件(图片/视频)到云存储 精简代码

    说明 图片/视频这类文件是从客户端会话选择文件. 一.wxml文件添加if切换显示 <!--上传文件到云存储--> <button bindtap="chooseImg&q ...

  2. php七牛批量删除空间内的所有文件方法

    相信大家都在使用七牛的免费云存储服务的同时,有清空七牛云存储镜像文件或者批量删除七牛云空间文件的需求,该怎么做?官方的工具好像并没有提供批量删除的功能,七牛云官方给出的建议是删除空间,再新建一个这样太 ...

  3. (转)云存储:阿里云OSS 、又拍云和 七牛 的比较

    阿里OSS:好处就是,那是一套完整的体系,存储,数据库,CDN,服务器,阿里都可以给你全包.缺点,费用对于没有盈利的网站来说太高了,好像定位就是给那些高端客户使用的,而且CDN,OSS的流量是分开收费 ...

  4. 国内云存储对比: 阿里云、腾讯云、Ucloud、首都在线

    阿里云的数据存储<http://www.aliyun.com/product/rds/> RDS — 关系型数据库服务(Relational Database Service,简称RDS) ...

  5. WordPress网站加速优化,一键免费使用七牛CDN插件

    利用wordpress搭建网站是个人建站的主流方案,我曾分享过wordpress网站加速优化必做的十件事,帮助了不少个人站长.今天介绍帮助wordpress网站提升速度至少10倍的免费CDN加速插件: ...

  6. 网站优化指南之数据库缓存、CDN与云存储

    1 数据库缓存. 常见的做法是用内存做cache,把数据库里的内容提前取出读到内存里,用户再请求时,就不直接读数据库,而是读内存里的数据,从而缓解了数据库的压力. 过去比较常用的缓存软件是memcac ...

  7. UEditor1.4.3.3整合Spring MVC和七牛

    [前言] 项目中涉及将UEditor上传服务器整合进已有的基于Spring MVC的服务中,并且将上传到本地改为上传到七牛,看似简单的一个需求,实际做起来还是遇到了一些困难.在这里分享一下经验-- 七 ...

  8. 七牛Qshell 常用命令打印

    下载 该工具使用Go语言编写而成,当然为了方便不熟悉Go或者急于使用工具来解决问题的开发者,我们提供了预先编译好的各主流操作系统平台的二进制文件供大家下载使用,由于平台的多样性,我们把这些二进制打包放 ...

  9. 定时备份 MySQL 并上传到七牛

    多数应用场景下,我们需要对重要数据进行备份.并放置到一个安全的地方,以备不时之需. 常见的 MySQL 数据备份方式有,直接打包复制对应的数据库或表文件(物理备份).mysqldump 全量逻辑备份. ...

随机推荐

  1. android 更改avd路径

    第一种方法,适合还没有建立 AVD 的情况 即:在计算机右击的属性 选择环境变量,然后添加一个用户的环境变量,名字为 "ANDROID_SDK_HOME”,然后把变量值改为你想将" ...

  2. 如何通过 jQuery text() 和 html()

    text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容(包括 HTML 标记) val() - 设置或返回表单字段的值 $("#btn1").c ...

  3. 安全删除mysql binlog日志

    命令行下执行 show binary logs; purge binary logs to 'mysql-bin.000070';

  4. Gson解析POJO类中的泛型参数

    在开发Android与API交互的时候,使用Json格式传输,遇到了这样一个情况,返回数据格式POJO类如下: public class ApiResult<T> { private in ...

  5. android之Itent.ACTION_PICK Intent.ACTION_GET_CONTENT妙用

    你是不是很多时候,想从弹出的电话本姓名列表中中查找到某个人,然后再获取该人的详细信息呢? 你是不是想选择从弹出的列表中选择一张图片,然后将其进行进一步的操作呢? 如果,你想,那你是不是很像知道,我们应 ...

  6. hibernate annotation配置经验

    1.将annotation写在entity类文件的get方法上面

  7. 转:ORACLE的JDBC连接方式:OCI和THIN

    oracle的jdbc连接方式:oci和thin oci和thin是Oracle提供的两套Java访问Oracle数据库方式. thin是一种瘦客户端的连接方式,即采用这种连接方式不需要安装oracl ...

  8. LA 4255 (拓扑排序 并查集) Guess

    设这个序列的前缀和为Si(0 <= i <= n),S0 = 0 每一个符号对应两个前缀和的大小关系,然后根据这个关系拓扑排序一下. 还要注意一下前缀和相等的情况,所以用一个并查集来查询. ...

  9. Amazium源码分析:(1)基本介绍

    前言 Amazium是一个网格系统的框架,分析该源码的目的是了解网格系统的实现. 网格系统 定义:设计美观页面布局的方式,上图能够很直观的了解什么是网格系统. 基本概念 column: 列. gutt ...

  10. php 在函数内引用全局变量 讲解引用

    <?php $var1 = "Example variable"; $var2 = ""; function global_references($use ...