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

新时代应用程序设计及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日在北京国家会议中心隆重举办。产业观察、技术培训、主题论坛、行业研讨,内容丰富,干货十足。票价优惠,马上 报名

VB利用 UnloadMode 来控制窗体的卸载? VB利用Form_QueryUnload询问使用者是否关闭窗口 利用VB的图片框实现屏幕的滚动 利用VB动态改变Windows显示模式的两种方法 利用VB控制窗口显示风格 利用VB实现浮动按钮 VB利用子类处理技术限制窗体的大小 奇形怪状的窗体 -VB资料 强制ComboBox弹出下拉框 -VB资料 强制和防止窗口重画 -VB资料 巧用“关于”对话框-VB资料 请问在VB中如何关闭别的应用程序窗口 确定屏幕分辨率-VB资料 让VB5支持动画光标 让窗口拒绝接受键盘和鼠标事件 -VB资料 让窗体处于最前面 -VB资料 让窗体居中 -VB资料 让所有的控件都动起来 -VB资料 让最大化和最小化按钮消失-VB资料 任意多边形的窗口-VB资料 如 何将「拒 绝 被 盖 住 的 窗 口 」还 原-VB资料 VB如何创建椭圆形的窗体? VB如何创建无Icon的窗体? VB如何防止Edit框中的Password不被非法获取 VB如何将鼠标显示成动画鼠标? VB如何利用程序拉下 ComboBox? VB如何让窗体右上角的X失效? VB如何使Form的背景图随Form大小改变 VB如何使Text文本框的属性只读? VB如何使窗体右上角的"X"无效? VB如何使窗体最小化并消失 帮帮忙,呵呵!!!一个小问题!!!!! 用VB的兄弟姐妹们,来整个MSN如何? 关于dllhost占用系统资源的问题! 谁是雍亲王,出来说话!!! 在WSAD5.0里怎么添加类型为MYSQL的数据源 高手们,帮帮我噢(解决立刻给分) 全中国程序员联和起来。 如何在web的FORM1模式下画一条线段 界面贴图问题 为什么我用Server.MapPath(""),返回不了任何东东? 上手指路,高分相送 asp怎样连到SQL Server 2000?给100分,在线等 ASP.NET和SQL 哪位兄弟有用asp.net做的OA完整的例子...大家快来.. 关于dllhost占用系统资源的问题! Kylix是否和Delphi一样有RTF控件可以处理丰富文本? 小弟想考程序员!各位大哥指点一下嘛!有要考的交流一下嘛! 查询条件的问题?? 从事共享软件开发的进来谈谈做共享的辛酸好吗? TListView中某一SubItem怎末实时更新?在线等。。 http://www.000163.com/的空间能不能信得过? 请帮忙哟,在线急等 asp.net下如何用c#编写程序实现调用数据库中的多个表显示在datagrid 如何调用存储过程来删除表中的列名???? 给一个变量赋空值的问题 如何在DirectDraw显示Edit,输入文字?? 贴子回复次数大于跟给分次数是什么意思啊?让不让结啊?? 结交delphi爱好者! 请各位高手给我指点一下方向? 如何在Sybase数据库中获得刚插入的那条记录的主键? 怎样获得菜单项(menuitem)名? 简单问题 请问如果有一个dll文件,我想知道里面有什么函数,但我又没有说明书,有什么工具么? 报表设计器怎末没有在外接程序菜单中显示出来呀?? 如何知道选哪个? 急,如何将图标保存在一个数组中,并将它显示出来? struts配制数据源中如何指定url编码? 在csdn设立开放源代码的项目 妈的!等咱有了钱... zt 请问那位大哥有在linux用mysql管理前端啊 client script动态改变表单的问题 我从网上下载了一个例程,可是太大了,不知道从哪里开始读 如何能在程序的线程被kill的时候将定义的变量写入文件保存 有做过图书馆管理系统的请进(VB+SQL Server)C/S结构 请问这样一行代码是什么意思? 简单问题给100分 在csdn如何改变字体,还有,如果不必自动登陆? 关于创建共享库(.so)的问题,高手帮忙 关于如何限定一个文本框的数据类型 超出一个月未结贴的名单公布 用DATAGRID的绑定列能传一个ID给下一下FROM吗? 有什么牌子的天文望远镜是可以直接接到单反相机的?想拍月球的环形山 邑这个字读什么 I kinda dig it International confidence 蒙鸠为巢的翻译谁有? 如何辨别黄鳝洞里是否有黄鳝 人体哪些部位的长度具有特殊关系 his theory is very difficult ,but -------people understand it.a few few a little little我觉得,but表示转折 应该是有几个人能够理解它 我选的a few 可是答案是few 如何自制黄鳝钓具,说出几种,和在稻田里辨别黄鳝洞里是否有鳝鱼 "I kinda dig it ."和"Beat the hell out of me. 不在同一直线上合力的大小和方向怎么求 一个黄鳝洞有几条黄鳝 婷字怎么组词 合力于分力的关系 不在同一直线上的合力一定时与分离的关系 分力一定的时与合理的关系 如何辨别野生黄鳝与饲养的黄鳝?菜市场卖黄鳝有野生的也有饲养的,但是不知道野生的和饲养的有什么外观上的差异? “婷”字怎样组词? pairing button是什么意思 如何在稻田里找黄鳝洞 2010年世界经济不稳定,不确定因素主要有哪些 物理作用在同一直线上的合力一辆小推车一开始以10牛的力推做匀速直线运动,前面有一障碍物改用20牛的力往回拉,在往回拉的过程中做的合力是多少? 一辆四轮车共行120尺,则前轮比后轮多转6圈,若把前轮的周长扩大1/5,再按原路行驶,则前轮比后轮多转4圈,问前后轮周长各多少? 婷组词()婷或婷()规范练习急用! pairing partner是什么意思 俺今天下午上啥课?有知道的么? 婷怎么组词?一定要在今天 挖孔桩和钻空桩有什么区别 一般情况下现在上到第几课了?课文名是? 2010年世界经济存在哪些不稳定不确定因素 虫洞 和 虫孔有什么区别?是关于黑洞的~搞不清啊.黑洞和虫洞是有关的,根据爱因斯坦的广义相对论来说,虫洞是连接黑洞和白洞的,下面的又怎么能说两者无关呢?请注意看时间简史`~ 如图,竖直放置的螺线管与导线abcd构成回路.导线所围区域内有一垂直于纸面向里的匀强磁场,螺线管下方水平桌面上有一导体圆环.当导线abcd所围区域内磁场的磁感应强度随时间按图中哪一图 ‘婷’能组什么词 English teacher的缩写是什么? 物理怎样学才更简单? 螨虫是什么,长什么样,大小如何,在人身体的哪一个部位?我想弄一点,咋弄? 忄与 这个字念什么?忄与 这个字念什么? 谁能教教我微元在物理解题中的应用?rt 看看这个是什么动物.看到朋友发的,有谁知道叫什么 齿轮传动和带传动有什么区别? 教我解答 大家看看这是个什么动物? 传导带和导带有什么区别? 谁能教教我这道题? 好的答案给好评 哪位能告诉我只是一种什么动物, V带传动与平带传动相比较,其主要优点是什么? 我买的警用手电筒,为什么用了几个月后射出来的光斑中间有个黑圈圈,而且还越来越大. which什么意思 请帮忙整理一下地理的几个国家,日本,俄罗斯,印度,澳大利亚,巴西格式1是否被特殊线穿过【南北极圈,南北回归线,赤道】:2人种3通用语言4世界之最【关于河流,地形等最大,最高,或最广】5主 my grandpa's hobby is growing vegetables 划线提问 萧燕上午八点半从家出发去离家时二千米的外婆家.10:30 行全程2/5按照这样的速度,小燕14:00之前能到家吗?把一百人分成四队,第一队人数是第二队的3/4,第一队是第三队的5/4,第四队有多少人? 急求MC与AVC的关系 每天想你已经成了我的习惯用英语怎么说 警用手电甩一甩灯泡为什么有声音? 如何构建初中语文高效课堂 1.这是我的习惯 英语.2.I've got used to it.这句应该是现在完成,used这里是不是,形容词,我记得 be used to it / get used to it 是形容词好像3.I am used to it.介词to后面也可以跟 代词词 it 杠杆的画法一找---二画---三作--- perspective candidates “我的习惯有很多”的英文 物理杠杆回答技巧在考试时,遇到问调节杠杆在水平位置平衡,其目的是?如何辨别填瞎弄出杠杆自身重力对实验的影响或便于在杠杆上直接读出力臂的大小 pipeline candidates 是什么意思?以下是这个词组出现的地方1.Emerging pipeline candidates2.Almost all of those pipeline candidates are oral direct-acting antivirals.3.Amylin Outlines Corporate Strategy to Maximize Global Value of Diabete “邑”有谁知道这个字怎么读,是第几声 第四题,要说明 贵阳小学现黑板报外包 评论称扼杀学生受吉林地震影响 哈尔滨铁路局紧急扣停青岛涉黑头目张韶军一审死刑 其余16韩国总统朴槿惠:将查清国情院涉嫌干政美媒称奥巴马支持率跌至新低 挫折积累罗马表新款岩螺多功能系列 向大海致敬“京城土豪聚会超海天盛筵美女全裸上阵江苏沿江8市今起用“苏五” 耗油量几吉林前郭地震灾区已发现2户房屋倒塌、江苏全省出现液态奶供不应求 物价上涨调查显示逾半受访香港公司明年平均加薪中国最后一个未通公路的县墨脱今日举行通讯:通往“高原孤岛”的“生命线”高薪由五毛一块凑起 过万很少聚焦激发社会投资活力:用改革撬动“活快递哥倒在送货路上香港官员:监护人代双非儿童买房应被豁复旦大学研究:PM0.5“杀伤力”盖传美国在台北设监听站 台方回应:台美宁波实现大灾之后无大疫 传染病例同比南京:空气质量不达预期将人工增雨消霾华夏速通卡办理流程?消费信息查询?女星首次出镜照 谁更怂普洱茶收藏界炮火云集,烽烟再起“大”有不同—沁园RO Plus大容Pasternack推出性能达110这台摄像机靠光来充电2850点附近或是突破历史新高的起点三城楼市进\"后限购时代\"【留学】日本大学介绍之京都大学神华煤价两月内降价7次【美妆博客评测】让“特效药”MAY 阿迪达斯2015年目标落空夜深人静的时候 是撕逼的时候楼市调控三城记:限购松贷款紧左右互博速度与激情:非会员咋让迅雷下载从30被称作世界第八大奇观的,是个男人|完户口那些事夏普业绩亏损,计划出售总部大楼来用5秒短视频打一场只需用拇指操作的上半年房地供应减7.7%出师不利,百度DuWear表盘UI设
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘