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

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

在DELPHI 文 本 和 图 形 的 打 印 在Delphi中运用QuickReport实现多栏列印 在打印或打印预览前如何获取报表页数-Delphi资料 自定义快速报表的打印预览窗口-Delphi资料 Delphi 3 图形VCL中Bug修改方案 Delphi hint的字体和色彩如何改变 Delphi3.0中复活节彩蛋及实现 Delphi数据库应用程序开发中图像数据的存取技巧 DELPHI图形编辑技巧二则 DELPHI显示JPEG图像文件 Delphi中CANVAS使用三例 Delphi中的图形显示技巧 DELPHI中画布应用技巧 Delphi中控件深度投影及阴影效果的实现 DELPHI中利用对象的常用属性制作动画 Form生成时的事件次序-Delphi资料 LED数码管仿真显示程序-Delphi资料 TPaintBox与TImage的比较-Delphi资料 WINDOWS基于调色板的图像消隐-Delphi资料 改变图片效果-Delphi资料 改造HINT的输出方式-Delphi资料 基于Delphi的图像漫游 将BMP放入Paradox的BLOB的字段中-Delphi资料 界面色彩渐变效果的实现-Delphi资料 如何查阅可视窗口标题-Delphi资料 如何得到Timage控件的DC-Delphi资料 如何关闭一个MDI子窗口-Delphi资料 如何检测鼠标击了哪一个对象-Delphi资料 如何将鼠标锁定在固定范围内-Delphi资料 如何使你的窗口Stay on Top-Delphi资料 如何在ListView控件中绘底图-Delphi资料 treeview操作必须延迟问题: 谁要构思,免费贴在这里,给高手一个机会。 怎么样判断在一个目录下是否存在文件名为a,后缀名为.bmp,.jpg等图片文件? up and down 有没有STL中文版的习题解答下载 请介绍介绍啊. 如何向水晶报表中传入参数(在线等待) 明白硬盘的工作原理及结构的大侠请看看:我的硬盘是不是到寿命了。 SQL中怎么判断C:有个名为a1.txt?以及如何访问控制(覆盖,追加)这个文本。 源代码下载(在现等待) 有关帮助文件和.ico图片的制作 在pb中如何得到当地sqlserver的名称, 请帮我的忙,好吗!!! 问csdn一个问题 怎么利用代码访问双击sqlconnection之后弹出来的对话框里面的参数? 源码出售 用什么命令运行外部程序? 加急!!寻找swing界面高手 vfp问题? 无法启动OracleOraHome81ManagementServer 关于一个vc编写的com组件与asp调用的巨普遍的问题 如何得到 QQ 的安装路径 最新Google登陆方 fireworks高手请看(100分) 请问那位高手在sco上编译成功了gcc,用的是那个版本,指导一下在下,谢先 调用存储过程出错,如何解决,在线等,谢谢! 怎么使用(MultiPage,TabStrip)这2个控件来实现界面分多页的操作功能。 给我这样的代码,我给你100分(在线等,急用,我快疯了!) 我的JSP的WEB服务器oracle公司的ias,数据库是oracle,中文显示乱码,请教转换??? 立即加分!!帮忙up也送分!调用COM程序时,出现“在单一线程模式下,试图在一个以上线程进行呼叫”错误,如何是好? b/s模式下如何读取sql,oricle等关系型数据库中的数据? 急!!很菜的问题!NT4下的设备管理器在哪? oracle 在linux上的性能问题? 关于manifest.tmp文件(大侠帮忙!) 请帮我的忙,好吗!!! 系统怎么不是很稳定? 请问一下各位,哪里有可下的lotus 认证教材和试题,多谢多谢!! 寻求控件编写技术下载网址。 谜语:请问CLP和CLS是什么汉语的简写? up有分!★关于《网络编程〉中的问题★:如何设计udp/ip的完成端口模式,udp协议不需要accept.... 关于重定项问题? are there any software in linux, just as netant,office etc in windows? ASP的中文問題 请问:测试工程师的工作是什么?主要测试软件的哪些项目? (100分征集)如何做使得访问JSP服务器时不用加端口号(当然不能用80)?? 菜鸟求助:关于句柄的问题。请高手多多指教 请问什么是存储过程(在SQL 2000SERVER中)? 1000分的大问题!***************怎么突破内存禁区读写的权限 java学什么?怎么学? java学什么?怎么学? 高分急救:Oracle安装完成后,服务可以启动,数据库不与服务一起启动,要手动启动 如何让启动时不自动进入x windows? 化学小组的同学为测定某铜矿中碱式碳酸铜【Cu2(OH)2 CO3】的质量分数,称取该铜矿样品30g于烧杯中,逐滴加入溶质质量分数为10%的稀盐酸至恰好完全反应,共用去稀盐酸146g(假设铜矿中的杂 我要一套完整的高中政治原理及其方法论的总结 太阳系目前有多少颗行星 为何a/b=c/d 可以转换为a+c/b+d在是等比性质中 钢材(板材)内都含有哪些化学元素?各元素对钢的性能有哪些影响?最好回答详细有条理.还有相关方面的知识也顶!另外加有 钒 铌 钛 铝 铬 镍 钼 硫 磷 都有什么性能呢? 那里有让电灯定时开关的控制器 做功时的位移是物体的位移还是力的作用点的位移?而且静摩擦力为什么可以做功?物体没有相对位移和作用点也不会移动啊.. 英语翻译Hold fast to / For if dreams die / Life is a broken-winged bird / That cannot fly LED控制器,七彩灯条控制器,RGB控制器哪里有?多功能控制器分别控制20米,50米,100米,150米;质量稳定,价格有优势的厂家优先 不等式a/b*c>d,可以换成a/b>d/c吗?数值均大于0 请问,钢板化学元素有哪些. 世博会歌曲better city better life的歌词世博会 A B C D相互转换的问题A和B能互相转换,B在高温下变成C,C经过长期暴晒变成D,D发出臭臭的味道.问ABCD是什么.一个朋友给我出的难题, 火焰探测器装置(高温工业电视)铭牌写什么内容? 橡胶王国是哪个国家啊 如何在EXCEL中将A,B,C,D,形式的列数据转换成A,A,A,B,B,B,C,C,C,D,D,D的形式的列啊如题 Hold fast dreams,For if dreams die,Life is a broken_winged bird,That can never fly,Hold fast to dre 世博会英文主题歌Better City,Better life歌词 某Y132S-4三相异步电动机,铭牌数据如下:某Y132S-4三相异步电动机,铭牌数据如下:PN=13KW,UN=380V,IN=25.4A,nN=1460r/min,IST/IN=7,TST/TN=1.2,TM/TN=2.已知电源频率为50Hz,求:(1)同步转速n0,额定转差率SN;(2)额定 什么是工具铭牌 better city bitter life的歌词求2010上海世博会主题歌“better city bitter life”的歌词要千千静听里的,最好能与千千静听同步的那种 谢谢要英文歌词 三相异步电动机的铭牌确上的切解释 hold fast to your dreams什么意思 橡胶王国在哪里?如题 关于地心引力的假设g=10N/KG如果人是60KG的话,地心对你的吸引力是不是600N?如果是的话,按照 力的作用是相互的 来判断人对地心的引力也是600N但是,是地心把人吸引住了,而不是人把新球吸引住 explain:hold fast the dream for without them life is like a borken winged bird要考口语,写个跟文章差不多的, 《阿拉侬Beter city Better life》歌词 请教物理,关于一个地心引力的例子一个人在爬到树上,而掉下来是因为地心引力.那么我想问的是,一个有100斤的人,他从十米高的树上掉下来,摔死了,按照牛顿的那个计算公式是怎么计算的?那 《马来的雨》的特点具体说明, better city ,better life的英语作文急求这篇作文..差不多是初中生写的就行..60字左右.. 法向力与地心引力法向力可以比地心引力大吗?可以比它小吗?请列出例子. 谁有去过马来西亚?喜欢马来西亚吗?马来西亚有什么特点? 归纳唯物论,辩证法,认识论的原理和方法论要求,最好是原创, 《地心引力》有个物理现象需要高手解释!卫星碎片可以击中其他空间站,那就说明在同一轨道上.为何同一轨道上的飞行物,那些碎片的速度能够赶上空间站?还有,空间站不能变轨吗? 请问马来西亚的特点是什么?简洁一些,特点类的东西,人文,文化,经济,用几话阐明一下. 认识论有哪些原理啊? 橡胶枕好吗? .二级减速器课程设计 输送带工作拉力F=2300N 输送带速度V=1.5m/s 滚筒直径D=320mm 马克思主义基本原理的体系分类:哪些属于辩证唯物主义、历史唯物主义、世界观、方法论、认识论等等.希望对哲学掌握和理解比较透彻的高人回答,还记得考研时买的一本复习资料,忘了是 《地心引力》中的物理问题碎片的速度大于宇宙飞船的速度,但是为什么可以在一个轨道上飞行,不是应该做离心运动,所以应该不会再和宇宙飞船做第二次相撞,也没有的第三次啊, 物理里面的「功」是怎么回事?位移的方向一定要与力的方向一致么?而且功的计算如果碰到加速度的情况怎么办?那该怎么得出功到底是多少焦. 软流层位于哪个地方? 橡胶枕头的好处 一级圆柱齿轮减速器课程设计 带工作拉力F=4000N,运输带工作速度v=1.6(m/s),卷筒直径D=400mm,急重要是 装配图 零件图 有尺寸.我们让画 图纸 大哥大姐 软流层是指什么 研究型学习小组欲测定某铜矿中碱式碳酸铜[Cu2(OH)2CO3]的质量分数.现称取15g该铜矿样品放入烧杯中,在逐滴加入稀盐酸至恰好完全反应(假如铜矿中的杂质不予稀盐酸反应,也不溶于水),称得 A/D转换电路和D/A转换电路的程序, “地球是太阳系中的第三个行星”英语怎么说? 请问橡胶枕头好用吗? 什么是led洗墙灯洗墙灯的作用是什么? 易拉罐天线怎么做清楚啊 铜矿地下开采企业中,矿体测量用什么办法? 哪里有LED洗墙灯卖?哪里有LED洗墙灯买?哪里有大功率LED洗墙灯卖?哪里有LED大功率洗墙灯买? 软流层的状态软流层能传播地震波 说明是固体 但是软流层中有放射性物质的衰变 导致高温状态 而有岩浆喷发 且有板块漂移在上 所以有可以说是液体 那么它到底是固体还是液体 橡胶枕头好吗 a/d转换过程是通过哪些步骤完成 什么中含有软流层 压力传感器的测量面积范围一般的压力传感器测定值,能代替多大区域的值;或是说以点带代面,能用一个传感器代替多大的区域的压力值. 8.It's better to die on one's feet than _____ .a.living on one's kneesb.live on one's kneesc.to live on one's knees.选什么,怎么分析的?中文怎么翻译好? 太阳系到底有几个行星呀!一会儿说12个,一会又是10个,到底有几个行星呀!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘