Chinaunix

标题: 实现一个大规模的文档存储服务 [打印本页]

作者: Patagonia    时间: 2014-12-22 16:23
标题: 实现一个大规模的文档存储服务
  
   
        
            
            
            
以前,我们解释了为什么我们决定为
Genius Scan
选择在文档存储服务上工作,以及我们是怎样逼近这个工程的挑战的。我们认为这个过程是值得分享得,我们也希望能够从社区获得反馈。
            背景信息
            
在Grizzly实验室,我们创建了非常有帮助的生产率应用。我们的主要产品是Genius Scan,它是一个
IOS

Android
扫描器。它是最流行得移动应用之一,自从2010年6月诞生以来,网络上有超过1500万得下载量,我们从没有在广告上花一分钱,但是我们却经常收到大量的反馈。
            
            
        
   
   
        
            
            
            
Genius Scan是一个物理介质和数字世界之间的接口。它可以让你对一个纸质文档形成快照,纠正透视失真,并且可以将其处理的就像真的扫描仪一样。多做几次扫描之后,你可以构建一个多页PDF文档。Genius Scan也非常擅长将数据导出到任何你想要的地方(Box, Dropbox, Email, Evernote, Expensify, Google Drive,
OneNote
, OneDrive, FTP, WebDAV…)
            

            
当我们期望用户使用Genius Scan扫描并导出文档时,我们注意到他们中的许多人使用Genius Scan长时间存储所扫描的数据。
            
            
        
   
   
        
            
            
            要解决的用户问题
            
Genius Scan把文档存储在手机应用的本地文件夹里。由于应用是运行在沙盒里的,因此只有Genius Scan才可以访问这个文件夹,而且文档是无法在各种设备间实现同步的。除非你决定导出文件,否则这些文档是不会脱离手机的(对IOS自动备份例外)。这么做有两个优点:实现简单,隐私性强。
            
然而,
经过4年对支持问题的邮件答复
,我们可以清晰地看到用户所要求的模型:
            
            
            
            
所有这些反馈都向我们呈现出这样的需求,即文档存储服务要具有同步功能。
            
            
        
   
   
        
            
            
            自己添加的需求
            
我们要面对的主要挑战之一就是Genius Scan已经大规模的使用了。每月数百万使用用户每天大约扫描 250,000个新文档,而且已经扫描的文档要超过2亿个。我们能找到实现新产品的方法,不过我们不能只是为了以后的扩展而设计一个简单的架构。
            

            
看起来每周一都是忙着扫描的日子,不过没有看到有人扫描火鸡啊:)
            我们的服务程序需要满足以下需求:
            
            
            
            
            
            
            
            
        
   
   
        
            
            
            其他选择
            
同步是非常常见的问题,可以选择许多其他方式来实现同步:
            
            
            
            
            
通过与旧金山和法国的几个顶级公司接触之后,再加上其他的解决方案都存在缺陷,因此我们决定着手实现我们自己的服务。
            
            
        
   
   
        
            
            
            开发方式
            
早早地确认问题所在对我们来说非常重要。不过,持续不断地列出可能出现的问题和极端情形,延缓实现则更容易些,因此我们决定采用迭代的方法实现我们的目标。
            指标
            
我们正在通过测量和调查两个渠道对我们每个月数百万的活跃用户(MAU)在服务上所产生的负荷进行评估。可以对许多指标进行测量。至于调查,我们可以在Genius Scan里显示内置的广告条来询问用户。我们还可以请求用户联系我们以获得支持。
            
一个重要的测量指标是普通用户(以及超级用户)通常存储多少文档。我们还希望评估每天扫描文档的最大数量。
            
除此之外,对用户的调查还可以让我们理解资金是否可持续:用户是否已经准备为这个服务付费了?我们是不是应该给每个用户提供功能受限的测试版呢?等等。
            
            
        
   
   
        
            
            
            在安卓应用中使用Dropbox SDK
            
起初,我们想将某种同步功能与各版本的Genius Scan整合到一块。我们首先实现了一个简单的原型,通过使用
Dropbox Sync API
修改了安卓版的Genius Scan。这项工作相当快,几天时间就做了一个粗略的实现。
            
这样的原型有几个好处:第一,关于项目可行性方面它给了我们自信。第二,它让我们有一些具体东西可以考虑到客户端应用的用户体验;最后,识别安卓上的潜在问题通常是第一步(比如典型得同步冲突是什么,我们所期望的用户行为是什么)。
            
            
        
   
   
        
            
            
            自定义实现
            
下一步我们将开发我们自己的C/S解决方案。这一次,我们专注于IOS应用。我们使用
Sinatra
开发了一个简单的后台。我们服务器端的实现包含了广泛使用的
IOS应用specs

Ruby

            
我们得架构是基于
Evernote同步
。同步的核心在客户端,服务器存储状态。在某些方面来说,模型结构比较类似:在 Genius Scan中,文档包含页面,可以选择性标记。在Evernote中,笔记本包含笔记,也可以选择性标记。
            

            
            
        
   
   
        
            
            
            
我们客户端实现很好地适配了Genius Scan 以前编写的核心数据代码。另外,令人吃惊的是代码不是嵌入的:所有的同步是在各自不同的管理对象里进行的,而且管理对象间是通过分离的通知来进行通信的。
            
这个iOS原型使我对同步的理解更为深刻。此实现的第一次迭代花费了不到一周的时间进行开发,期间并没有出现任何冲突。
            
我们正在对早期的实现进行改善(有关这方面的内容,我们计划写一篇更加注重技术方面的博客文章。)。注意,这次改善仍然大量的集中在客户端,而且服务器部分是运行在本地的高速网络上的。接下来的一个行动就是在实际的网络环境下对这次改善实现的测试,其中包括网络延迟和网络出错。
            
            
        
   
   
        
            
            
            结论
            
我们两个工作在这个项目上是超级兴奋的,我们已经推迟了一段时间。我们想尽可能的快来给我们的用户提供服务。但是,我们不着急。因为我们完全没有压力,我们可以花时间将它做好。
            
如果你读到这了,我们对您的反馈(
Hacker News
)也很感兴趣。无论如何放心好了,我们会及时通知您我们的进展的。
            
            
        
   
本文转自:开源中国社区 [http://www.oschina.net]
本文标题:实现一个大规模的文档存储服务
本文地址:
http://www.oschina.net/translate/implementing-large-scale-document
参与翻译:
开源中国七里香
,
几点人
英文原文:
Implementing a Large Scale Document Storage Service
                       
                               
                    
                               
                       
                       
                       
                                时间:2014-12-15 08:59来源:开源中国社区 作者:oschina责任编辑:zhangkai

本文来自ChinaUnix新闻频道,如果查看原文请点:http://news.chinaunix.net/opensource/2014/1222/3225705.shtml




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2