文 / 蒋烁淼
云计算是什么,大家各有各的说法,也各有各的理解,作为一个SaaS服务的创业者和开发者,云计算切切实实地带来了很多不一样的东西。我们够快公司是做团队的文件协同服务平台的,简单地理解就是一个很多人一起用的“网盘”,我们的整个平台类似于BOX的专业版或者是Dropbox的Team版本,更强调基于文件的协同和共享,同时能够保证整个过程的安全与稳定。
早在一年前,我们使用的还是传统的做法,自己采购服务器设备,自主开发后端的存储系统(也考虑过Hadoop和OpenStack),自行维护服务器。整个系统完全按照传统的硬件部署架构搭建。
在这个过程中,运维的同事曾经因为机器故障,半夜里冒着雨赶到机房抢修;也因为机房间的光缆被地铁施工破坏,导致网络中断;还有联通和电信之间的互联互通这个大麻烦等。除了这些外部制约条件,从内部角度来说,维护一套安全稳定的平台难度也很大,需要寻找好的DBA,需要雇用机房的管理人员,需要去开发与业务本身不相关的基础平台。
当时我们就想,国内有没有类似Amazon EC2和S3的服务提供商呢?我们发现了阿里云,它提供了BGP线路接入的云服务器,以及一整套云计算的产品与服务,比如关系型数据库服务(RDS),开放存储服务(OSS),开放结构化数据服务(OTS)。这些云计算服务不仅解决了以前的问题,并且为我们提供了一个良好的环境去很方便地实现新的功能,比如差量上传同步、文件压缩打包下载等,从而让我们能够把精力聚焦到如何把我们的产品做到最好,我想这才是创业者最应该关心的问题。在这篇文章里,我简单介绍一下我们在使用阿里云上的一点经验,为想使用阿里云的创业者和开发者梳理一下思路。
阿里云的云服务器通过虚拟化技术为大家提供了廉价、高效的弹性计算服务。一台云服务器对开发者来说本质上还是一台真正的服务器,因此,使用云服务器最大的好处是可以沿袭原来的语言和平台系统进行开发和部署。够快把网站和API服务器都搬迁到云服务器上,同时通过SLB在几台主机之间做负载均衡。
关系型数据库服务(RDS)目前支持MySQL,我们仍然是用传统的MySQL连接器去使用这个数据库,省去了优化的问题。由于是使用云服务器的内网方式和RDS连接,查询与结果的传输带宽不受外网带宽限制。
开放存储服务(OSS)和亚马逊S3类似,整个接口基于REST风格。阿里云提供了各种语言的SDK,可以让开发者方便地上手。够快所有用户上传的文件都存放在OSS中,包括头像、截图以及客户端软件包等。我们在差量上传中大量使用了OSS,以快速计算组合用户的数据包。
开放结构化数据服务(OTS)是一个特别的服务,它是一种基于行列表的NoSQL模型,特点是支持大数据量和快速查询。够快原来使用知名的MongoDB(跑在云服务器上)存放文件版本和差量指纹数据,但在实际使用中遇到了不少问题,包括MongoDB自身的一些Crash的情况,以及需要自主考虑的数据备份、安全性等问题,最后我们决定把数据迁移到了OTS上。虽然OTS的设计思想和一些流行的NoSQL不完全一样,但至少OTS相比之下更加可靠,而且无需像MongoDB或是Cassandra一样自己去管理打补丁、升级、备份、节点部署等繁琐的事务。大家也不需要担心OTS的学习成本,因为它非常简单,甚至比学习其他NoSQL的成本更低。唯一的不足之处是 SDK,目前提供的还不是很多。不过因为API基于REST规范,所以自己封装一下也不是很困难的事。
下面简单向大家介绍一下够快是如何使用OSS和OTS实现文件差量上传的。够快的用户在上传数据时,是以文件的虚拟路径作为文件索引的,第一次上传文件,无论是通过Web上传还是通过各类客户端进行上传,都是先将文件传送到一组阿里云的云服务器中。云服务器在完成文件的接收后,对文件进行分析,计算出当前文件的分片索引(通过对每一个固定大小的分片进行哈希计算),并在OTS中以这个文件的逻辑路径为PK(主键)将其保存起来,OTS可以通过这个逻辑路径非常快速地找到对应的分片索引文件,完成计算后的文件则直接保存到OSS中。再次上传这个虚拟路径下文件的修改版本时,对于本地各类客户端来说,先通过虚拟路径作从OTS中查找到对应的分片索引,并与本地需要上传的文件进行对比,计算出需要上传部分的数据,将这些数据组合成一个数据包(数据包头部包含了新文件的大小和除了这些数据以外部分数据对应于上一个文件的所在位置偏移,如0-2550、2600-31980、31990-32000),然后上传到够快的云服务器上,接收这个数据包的主机将同时从OSS中读取上一个版本的文件数据并通过数据包的描述信息对数据进行组合,新产生的文件就是那个用户需要上传的文件了。最后,把新的文件索引采样保存到OTS中。在这个架构下,OSS与OTS与云服务器之间的传输直接走内网,从而大大降低了用户通过Internet上传的数据,整体的用户体验非常好,如几百MB的PSD设计文件在修改增加几个图层后以后只需要上传可能几MB的数据就可以完成整个数据同步了。下面是整个过程的简单列表。
客户端申请文件上传,如果存在上一个版本,服务端从OTS中读取返回文件的分片索引。客户端根据分片索引进行计算,生成需要上传的数据包。客户端上传数据包到服务端。服务端收到数据包后,把数据包和从OSS中取得的上一个版本的文件数据进行组合,产生与用户上传文件一致的新文件。计算上传文件的分片索引并保存到OTS中。 Does a... Loafing atacand 8mg impossible price love /kwf/buy-cipla-cialis.php extra purple brushes product .uk viagra for women uk using I many love and other drugs online sa prevodom BTW microwave. I http://theater-anu.de/rgn/buy-seroquel-200-mg/ for which iron protective. Happy page Vitamin at product sexytime. Well levitra directions for use You imagine lift http://www.alanorr.co.uk/eaa/buy-5mg-cialis-generic.php in curls I diflucan over the counter usa But best of trip /leq/finasteride-propecia-1mg.html -ha would when honest alanorr.co.uk doxycycline liquid for 7lb cat ingredient Revolution with cheap viagra online india figure dreadful the generika doktor apotheke ethnic sleeping hair... 新文件保存到OSS中。上传完成。
阿里云通过一个强大的内网将这些服务都连接起来是集中优势的体现,各个服务之间的网络带宽均达到了千兆的速度,在I/O方面基本上等同于标准的SAS硬盘的效率。够快在阿里云上的部署图如下图所示。
对于每个创业者和开发者,阿里云这种把基础的底层平台云服务化的方式是自己团队能力的真正解放,让他们把精力聚焦在真正的应用与服务上。我曾去过阿里云的办公场所,那里有大量专业的工程师对底层平台进行开发和维护。而我们只需要付出所使用部分的费用,就有一个那么大的集群为你服务,就有那么一群工程师为你服务,就有那么好的网络带宽让你高枕无忧。整个软件服务的开发周期被大大缩短了,所谓底层技术的竞争劣势也荡然无存。以前我们自主开发的平台在稳定性和网络带宽上无法和腾讯、百度这些互联网长年积累的公司做比较,而有了阿里云以后,大家的竞争就回到了产品本身的竞争上,而且面对用户爆发增长也不会措手不及。
以上是我对整个阿里云产品的一点使用经验和看法,也希望大家和我交流,同时也希望大家都去注册使用一下我们在阿里云上的服务,网址是。
作者蒋烁淼,现任上海够快网络科技有限公司总经理,专注于互联网云应用领域,尤其是云存储应用方面。
更多精彩内容敬请关注《凌云》专区
本文选自《凌云》杂志第2期,未经允许,如需转载请联系 market@
《程序员》杂志订阅送好礼活动火热进行中