说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

新时代应用程序设计及MongoDB的十个深入理解

HTML文档下载 WORD文档下载 PDF文档下载
区别于从小做起,Serendip从服务发布起就需要处理大量数据,因此他们不得不放弃传统的软件设计方式,转向Scala、Akka、Play、MongoDB、Elasticsearch等新时代技术堆栈。

【编者按】打造一个高扩展性应用程序并不是一件容易的事情,首先要选择合适的技术堆栈,这些技术在具备高扩展性的同时,还需要具备良好的“活力”。不仅如此,你还需要清楚它们的扩展极限,这样才能做出更好的应用程序扩展策略。本次为大家分享两篇博文,其中之一是Serendip前首席架构师Rotem Hermon的Web应用程序设计——架构中囊括了云服务、NoSQL等众多新时代元素。另一个则是10个MongoDB深入理解,出自MongoDB资深解决方案架构师Asya Kamsky。

以下为译文:

Serendip是个社交音乐服务,用作好友间的音乐分享。基于“人以类聚”这个原因,用户有很大的几率在好友那发现自己喜欢的音乐。Serendip基于AWS构建,使用了的堆栈包括Scala(以及一些Java)、Akka(用以处理并发性)、Play框架(用于Web和API前端)、MongoDB以及Elasticsearch。

堆栈的选择

Serendip面临最大的挑战就是刚开始就需要处理大量数据,因为Serendip的一大特性就是从Twitter或者其他音乐服务上收集音乐相关信息。因此,在选择技术堆栈时,首要考虑的问题就是扩展性。

1. JVM

JVM非常适合Serendip的系统特性,同时它的性能也得到许多实践验证,选用它还很大程度上归结于许多开源系统都可以使用本地客户端。

2. Scala、Akka及Play框架

着眼JVM生态系统,Scala这种新式编程语言就非常突出了,同时Scala还可以与Java保持良好的互操作性。之所以选择Scala,Akka这个适合流处理的基础设施框架也占了很大一部分因素。在2011年服务开始构建时,Play web框架才刚变得流行,可靠性也才初见端倪,那时候这些技术都是非常前沿的,不过值得兴奋的是,Scala和Akka在2011年底合并成了Typesafe,而Play也在不久后合并了进来。

3. MongoDB

选择MongoDB的原因许多,比如对开发者友好、易于使用、特征集和可扩展性(使用自动分片)。然而,我们很快就发现,应用程序的数据使用和查询方式需求在MongoDB上建立大量索引,这样一来,系统将很快遭遇性能和内存瓶颈。因此,我们改变了MongoDB的使用策略——继续使用MongoDB作为主要的键值文档存储,同时还利用其原子增量支撑几个需要计数器的功能。

在更换使用策略后,MongoDB表现的非常稳定。同时,MongoDB还有1个易维护的优点,虽然很大一部分原因在于一直避免使用分片和只使用了单一的副本集(MongoDB的分片架构确实非常复杂)。

4. Elasticsearch

为了更好的查询数据,我们需要一个具有搜索能力成熟的系统。在所有可能的开源搜索解决方案中,Elasticsearch是无疑面向云解决方案中最具扩展性的一个。通过动态索引模式及多种搜索和分类的可能性,Elasticsearch让我们看到了支撑很多特性的可能,无疑问的,它成为了系统架构中的一个核心组件。

对于MongoDB和Elasticsearch的维护没有使用托管方案,这主要基于两个原因:首先,希望拥有两个系统的绝对控制,我们不期望将升级或者降级假手于人;其次,需要处理的数据量决定使用EC2将比自己托管贵得多。

系统的统计

Serendip的“pump”每天处理大约500万条信息,即处理来自Twitter、Facebook或其他系统的数据。这些信息经过一系列的“filter”(从其它的服务上抓取并处理音乐链接,比如YouTube、Soundcloud、Bandcamp等),并为这些信息加上元数据。pump和filter在系统中扮演的角色类似Akka,整个过程由一个专门的m1.large EC2实例支撑;因此,它可以按需的进行扩展,并通过Akka的remote actors将负载分配到集群处理。

从这些数据中,系统大约每天可以获得85万条有效信息,这些信息中包含了相关的音乐链接。所有信息都会在Elasticsearch中进行索引,同时MongoDB中也会如此,用于备份和计数。因为每条信息都会修改几个对象,Elasticsearch的速度大约在每秒40个左右。

在Elasticsearch中,信息(tweet和post)的索引按月进行,每个月大约包含2500万条信息,并且拥有3个分片。集群运行了4个节点,每个都建立在m2.2xlarge实例上,还会拥有一个m1.xlarge副本。

Feed的建立

在feed设计时,我们期望它是动态的并且记录了用户行为和输入。如果一个用户将“rock-on”标注到1首歌曲上,或者将“airs”打到某个艺术家上,我们希望这个行为在feed中立刻被反映。如果用户对某个艺术家比较无爱,那么以后将不会给他推荐这首歌。

我们同样希望这个feed整合了多个资源,比如朋友的共享、喜欢艺术家的作品以及那些具有相同品味人们的推荐。这就意味着常用的“fan-out-on-write”方法将并不适合,服务需要一个更实时feed系统的构建方法,充分利用起从用户那收集的信息,而Elasticsearch的一组特性让一切成为可能。

Feed的算法整合了几种策略,它会动态调整不同资源的比率,当然每个策略都会重点考虑用户最近的行为和输入。策略的整合会被转换成实时数据上的不同查询,这些数据会不停的被Elasticsearch索引。鉴于这些数据的实时性以及索引的按月建立,系统只需要查询所有数据中的很小一部分。

幸运的是,Elaticsearch对这样的搜索支撑得非常好。同样它还提供了架构扩展的一个途径——通过增加分片数量,搜索可以通过增加更多的副本和物理节点进行扩展。

“music soulmates”的寻找过程同样是Elasticsearch的充分应用,作为不间断社交流处理的一部分,系统会为社交网络用户计算它所收集中被共享最多的艺术家。

每当Serendip的用户发射一个信号(不管是airing音乐还是与feed交互),都会引起一次“music soulmates”的重计算,算法依赖于喜爱艺术家列表(会被经常修改)重新匹配具有共同口味的用户,当然类似人气、被分享次数这些数据也会被考虑进去。同时,系统还会使用另一套算法来过滤垃圾推送者和异常值。

经过长时间的生产环境测试,我们发现整个系统运行的非常平稳,同时也不需要去考虑附加的系统来运行更加复杂的集群或者推荐算法。

监视和部署

Serendip使用ServerDensity进行监控和提醒,ServerDensity是个付费服务,原生提供了MongoDB和服务器的监视。这个工具在系统内部得到了大量使用,通过自定义指标来显示内部系统的统计。

使用内部统计收集机制收集系统内每个行为的事件,并将它们保存在MongoDB集合中。定时作业每分钟都会从MongoDB中读取这个数据。这样一来,操作数据的同时,ServerDensity还起到了监控Elaticsearch和报警的作用。

服务器和部署的管理依赖于Amazon Elastic Beanstalk,Elastic Beanstalk是AWS定制PaaS解决方案,非常易于开始。虽然它并非完全意义上的PaaS,但是基础功能足以满足一般的用例需求。它提供了简易的自动扩展配置,同时还可以通过EC2来完全访问。

应用程序的建立依赖于EC2上的Jenkins实例,Play网络应用程序被打包成一个WAR,通过post-build脚本将WAR推送给Elastic Beanstalk作为一个新应用程序版本。新版本不会自动地部署给服务器,必须通过手动完成,通常在阶段性的测试后部署到生产环境。

经验总结

下面总结了Serendip打造过程中的几个关键要素:

1. 知道如何进行扩展。可能并不是第一天就需要扩展,但是需要清楚系统中每个部分的组件都可以扩展以及能扩展到什么程度,一定要给自己一定的时间进行扩展。

2. 准备好应对峰值。特别是程序打磨的初期阶段,保留足够的空间以应对突发负载或者进行快速扩展。

3. 选择一门不会拖你后腿的语言。确保语言具备你期望使用技术的本地客户端,或者至少是积极维护的,不要让你的应用程序卡在库的更新上。

4. 相信炒作。你期望的技术必然是长久存在的,一个响亮的,具备活跃社区并且评论不断的技术恰恰证明了它的活力。

5. 不要太相信一些争辩。多查一些该技术的热门评论,它可以让你知道技术的弱点所在。但是也别太在意它们,因为人们在失望时的情绪是非常激动的。

6. 拥有足够的兴趣。选择一门让你兴奋的技术,这才能让你保持充足的动力。


以“ 云计算大数据 推动智慧中国 ”为主题的 第六届中国云计算大会 将于5月20-23日在北京国家会议中心隆重举办。产业观察、技术培训、主题论坛、行业研讨,内容丰富,干货十足。票价优惠,马上 报名

浴火重生:OpenFeint创始人推开源平台OpenKit 紧随AWS数据仓库服务 Rackspace力鼎Cloudant 创业者谈:畏惧失败,但也要拥抱失败 谷歌赢得一场战斗 苹果能否赢得战争? 走进大学校园:是什么让学生成为独立开发者? 移动周报:为什么说独立开发者才是光明康途? MapFan eye:看日本地图导航应用的新玩法 数据会被清空:部分三星、魅族手机存安全漏洞 IE10简化文件访问 支持FileReader API 从MySQL迁移到MariaSQL Wikipedia力求开放 奥巴马筹款网站的制作过程 国内芯片厂商发力4G 新岸线2013年将推LTE方案 CMDN Club 23期:开放平台和O2O移动产品开发 花旗调低Apple股票评级 不信iPhone5会卖得好 2012年Linux Journal读者选择奖结果公布 百度云SiteApp:三步轻松创建移动网站 Twitter跨数据中心图片存储系统Blobstore解析 摩托罗拉携手中国移动发布Intel Inside智能机新锋丽i MT788 第五届“英特尔杯”全国大学生软件创新大赛圆满落幕 Appro推出液冷超级计算机 Dell:曾敦促微软WinRT放弃Windows品牌 IE10十大优点:渲染页面比Chrome快8% 法国电信:开放平台下的O2O移动产品怎么玩? 客如云创始人彭雷:寻找O2O“失落的半圆” 中国电信宋鹏飞:天翼开放平台的服务及架构解析 W3C小组宣布:HTML5标准制定完成 还记得DUQU吗?起因可能是Windows中存在了20多年的漏洞! API管理的五大规则 Google也节能:挖角美能源部Arun Majumdar博士 预测:云计算领域的5大变革 CTO俱乐部:移动信息化的创新实践及互联网创业 谁听到过bios这样的报警声 谁知道哪里可以下载vtk4.0软件吗? 斑竹:为什么我提问的帖子没了,难道被删了吗?http://expert.csdn.net/Expert/topic/1323/1323618.xml?temp=.942135 请教?题目:用名为min的函数模板计算两个参数的最小值,用一对整形、字符和浮点数测试所编程序! C++builder6 下载 在线等待有关TurboC4.3的安装问题(还有D版VC的安装) 如何通过EJB删除数据库中的一行记录? 请帮忙 远程桌面共享的密码在注册表中的位置???急!!! 推荐软件:WinReplace批量文件内容替换工具 请推荐一个Java Decompiler 怎样用VB 检测EXCEL是否运行出 (菜鸟级100分) 高分求购 数据库中的OLE字段的读取问题。 研考快了,有几到题莫名其妙,求帮助! 求助大虾??????? 帮忙!! 如何获得当前程序的完整路径和文件名? 高分请教:resin2.1.6+sql2000下,jsp提取的字段显示均为乱码 Ftpcommand ? 如何获取最小化按钮消息?PreTranslateMessage(MSG* pMsg)如何处理? 请教高手——图片如何转换成视频? 河北的高程什么时间报名?什么时间考呀? 等待在线 JS文件打开乱码,如何看到其真实内容? 急,在线等待,90获取如何让Collection集合内对象的顺序改变!!! 在那里可以找到浪潮英信服务器 的声卡和显卡的驱动程序? 一个文学性网页,有砖头尽量扔过来。散分!!! 在jsp中连接oracle报错,请高手帮我分析原因(100分) 很丢脸的,兄弟们来帮我一下哦,? 我的困惑 谁知道哪里可以下载vtk4.0吗? 两个关于日期的问题,请大家帮帮手. #include windows.h 的问题 OS 很多近期帖子打不开,WHAT CAN I DO? 求regionMatches的使用实例! VS.net的安装错误问题 TOP托普万岁! 河北的高程什么时间报名?什么时间考2003年呀? 等待在线 java/swing/jtable的强烈问题 在Linux中如何配多个ip地址? 免费给你www.***.net www.***.com 快来每人有分得 大家不帮忙我就死定了!!!(来者有分,解决问题再送200!) java/swing/jtable的强烈问题 我为什么看不到我自己发的问题? 向高手求助!如何查找指定文件? 授权问题! 怎样解决向右展开的菜单(层)被select下拉框遮盖的问题!!!(以前的帖子打不开了) 向高手求助!如何查找指定文件? 怎么在JAVA中实现只有让一个子类才能访问它父类的属性,用private,还是protected? 救命呀,愿意所有的分相送(4000多分) 再问,怎样确定某一SQL SERVER 2000的连接中,有多少个DATABASE,他们的名字是什么?? 松狮犬医院洗澡后暴亡 主人打官司索赔杭州一名女教师被骗102万元 骗子称男子包养弟弟前女友 欲与妻子三人同床男子因女儿遭邻居诅咒将其一家四口杀害男子用自家房门钥匙偷开警车 被行政拘爱犬洗澡后死亡 杭州狗主为起诉宠物医嘉兴3名90后游客钱塘江观潮遭潮水卷女子老公被警察带走 骗子称有门路骗钱宁波一名劫匪路遇强悍姑娘 抢劫不成被宁波老板投机买被拍卖房子 违约承担差男子深夜摸进情侣家摸女子大腿 慌乱中月薪两千的年轻厨师装成高富帅专偷奢侈妙龄女以色谋财 为向同事借巨款多次献女子如厕时尖叫 过路男子疑发生状况闯慈溪工人排污井下险遇难 一人报警及时奉化一辆货车撞倒电瓶车 20多人抬起杭州一名大伯无意开错一把锁 结果好像小伙背着吉他装学生 碰瓷计划被识破骗子骗完大一女生想骗其爸爸 连环骗术女子向老公泼汽油 警方以涉嫌放火罪将绍兴市民发现巨大甲虫 头上长有长犄角你好,嫦娥,广寒宫,陪着你,慢慢变老当你仰望星空,可曾想起我?影视打望【马斯克:特斯拉将在华建厂女篮联赛浙江位居第四宁海:帮你预约一份工坚持维护二战成果【中兴破局:不是互联网公司富阳农合行启动博爱救助金紧扣强军目标 回应官兵关切“最强大脑”集结号安倍新花招休想篡改历史皮尔洛当选意甲最佳【微软收购诺基亚接近尾声:新增贷款近半投向小微企业开心事:返乡路上很温暖农村“快递”多期盼乌克兰总统解散政府沪深新股现涨停潮我省建立专职工资谈判队
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘