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

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

跳过开发者,专注补Bug的iOS 8 Beta 6悄然发布 集群管理可以很简单,Google又放大招 应用内直接打车:Uber面向第三方开发者开放API 百万美元巨奖!英特尔启动感知计算挑战赛 IBM 2014技术峰会在京开幕! OpenGL 4.5规范标准发布,大大提升API性能! 更萌更贱:Flappy Bird开发者推虐心新作Swing Copters 学习的革命:AR增强现实遇到儿童应用 颠覆旧概念,IBM Bluemix开启云开发时代 专访企业QQ SaaS团队,谈企业级LNMP架构设计 《近匠》Coding:将软件开发搬到云上 小米与美视频游戏服务Ouya合作 进军国内客厅 新工具Get!轻松实现2D画面动态光影的Sprite Lamp 一周消息树:罗升阳的Android之旅 手游不易:GungHo 3.44亿美元售Supercell股权 周末去哪儿 当然是去2014微信开发者大会!(附参会提醒和名单) 开源框架Ember.js迎来1.7.0和1.8 Beta 1更新 《近匠》RealSense:几行代码,为游戏添增实感交互 MDCC游戏应用征集关键词:中小团队,3D,转型,IP 共话HealthKit:能否颠覆医疗保健生态系统? Perception Neuron系统,让动作捕捉技术不再高冷 2014年DevOps实践调查报告 .NET程序性能的基本要领 百度手机卫士宣布开放三大能力 构建互联网安全生态 火速围观,AMD APU新芯片架构A68H呼之欲出! 对于测试人员而言,TDD意味着什么? 年用电910亿度,那些庞大的数据中心该用什么支撑 走近黑客们的世界,感受网络空间的心跳 VMworld 2014 Day One:Docker、数据中心、混合云新举措 Docker和Kubernetes或将加速SDN发展 前端开发框架三剑客—AngularJS VS. Backone.js VS.Ember.js 谁知道用VC++直接操作硬盘?告诉我一声,多谢了 请问考OCP的12本宝典在哪里下载?有人能介绍介绍经验吗?谢谢! Nobody can help me? 去考MCSD我合格吗? 怎样让程序自动修改IE中htm文件? !!!andyting!!!!过来拿分!!!!!! 请问各位大陆市场有没有<>? 请问学习vb有什么好书吗?请高手们帮帮忙,推荐几本好书?谢了!~ 谁知道生成随机数的算法 ListView问题 急急急急急急急急急急急急急急急急急急!!!! 如何向Access数据库中加入图片并从数据库中读出显示? 急,请问如何查询多个表(这些表有公共字段)查询结果按公共字段生成输出表单 请问关于利用JSP转换成HTML格式的问题 格了C:... 我装了Xteam linux kernel版本为:2.4.2,可是启动的时候屏幕上竟是0101010101010101,但用引导盘启动就可以的. 请高手们指点 "afx"是什么意思? 钩子函数里:GETMESSAGE????hook问题 大家帮帮忙!!我用vc中的Win32 console application调试c++程序时,输出的结果总是看不到,一出来就不见了啊!怎么办啊????急!!!!! 请教高手TDataSource的问题????????????????????????????????? TShockWaveFlash控件怎么样在播放时屏蔽其右键?另外怎么样让它在播放时单击鼠标让其播放结束?( Delphi版中没人回答 ,到这儿来试试) 谁有pb6.5的源代码,偶初学pb,想参考一下,最好是access或sql的,偶愿意送300分/个 LPWSTR-CString的相互转化? SQL语句问题,请指教。 我算不算“蓝领”? unix下面怎么实现多线程?可不可以发个例子给我?我的邮箱是caochao@powerise.com.cn 如何将数组中的一个元素附以二进的值 又来送分了! 请问用水晶报表设计报表的VB程序,安装时是不是一定要装水晶报表,如果不,安装应该怎么办? ListView问题:怎样在程序中自动选择LISTVIEW控件的某项或某些项? 怎样用VC设置在窗口区域内的鼠标形状? 如何在一个窗体的OLE控件内播放一个flash动画,不是另开窗口播放!谢谢! 不使用MFC,显示BMP文件的方法 请问什么时候可以知道程序员通过否? 招聘WINDOWS程序界面设计程序员 我明天签珠海天心,大家给个意见先!! 现在怎么办? 谁会在页面上加入右建菜单? 如何在程序里动态创建控件 如何转换字符型为CString型? to:ChinaOK-----401的设置方法? 不用winsock 用api的哪个函数可获得本机的网卡地址及ip地址?? 请问谁有EZSQL? 为什么我在安装ORACLE9I是,运行RUNINSTALLER然后就让等,就没有反映了。 。 请问如何通过红外线读取收集电话簿的内容? 请问微软的资源管理器的listview 的图标是从哪里装入的?是注册表吗还是从某个文件? AFX_MSG 谁装了.net RC3,给个RC3中win form的例子,可以吗? 请问磐英ep-3vba能上赛扬2或p3吗? 如何做類似OptionButton一樣的控件 我国决定在黄淮海平原发展优质专用小麦产业带,这样的好处是( )A 这里是冲积平原,农业历史悠久,劳动力资源丰富,便于灌溉B 这里地形平坦,土层深厚,农业生产能很快实现现代化C黄淮海平 选择(简单) 初学大学物理,求解题思想和思路,用不导电的细塑料棒弯成半径为R的圆弧,两端间空隙为l(l 地理选择题求解析 东北师范大学生物化学实验书用的是哪一本? 单质铜制造硝酸铜的最适宜方法是什么、 为什么多肽链的方向都是从N-末端指向C-末端 可用元素符号直接表示的单质化学式的物质 类别有:(1)—— 如:(2)—— 如:(3)—— 如:氦气 红磷 的金刚石的镁 的金 的5Cu 表示的意义Cu 是 哪个元素啊 不记得了,找也麻烦 请教下这道大学物理题怎么做? 大学生化 英语语法问题:第3题为什么选c? 乙烯和氢气、溴气、和盐酸反应后得到的化合物之间都有碳键相连 例子:CH2=CH2+HCL→△ CH3-CH2CL 而它和H-OH反应却得到CH3CH2OH 之间没碳键 为什么?还是只是其中的一种写法 请问A,C选项答案, 25题为什么选C 如图所示,质量为m=16kg的实心圆柱体,半径r=0.15m,可绕固定的水平集合轴转动.一根轻质柔绳一端固定在圆柱体上,并绕上几周,另一端系质量为m=8kg的物体,当物体m由静止释放后,求:(1)物体m的 答案是A,C选项为什么不对 这道题为什么选C,感觉C 很wordy.还有其他选项为什么错误? 转速为每分钟150转,半径为0.2m的飞轮,因受到制动而在2分钟内均匀减速至静止静止,求飞轮的角加速度及在此时间内飞轮所转动的圈数圈数我是用(dθ/dw)*(dw/dt)=w然后在积分算的 结果是300圈,但答 告诉我c选项为什么不对 求25题答案为什么选C 求教一道大学物理题.知道的速度解答.O(∩_∩)O谢谢.题目: 在做等离子物力对撞试验的时候,如果把第三能量公式的极坐标向负方向调整三个阿尔法单位,那么对能量最终计算结果会产生多少 1、天冬氨酸蛋白酶中形成“催化二联体”中两个天冬氨酸残基的作用可以互换.2、脂肪的碘价高表示含游离的脂肪酸多.3、蛋白激酶A活化的方式为别构调节.4、蛋白质变性后,摩尔吸光系数增 地理第三题,为什么选c,a怎么不对 说明一下理由,其他错的选项也说明一下)实验室里,用如右图所示装置还原氧化铁的过程中,可能生成四氧化三铁、氧化亚铁或铁等固体物质.关于该实验,下列说法错误的是(C )A、实验时, 关于很简单的化学题目1道磷与氧气反应的生成物中白烟与白色烟雾有区别吗? 到底选B还是C每年冬半年瑞典的旅游业有点特殊,游客在这里过夜的人数占总旅游人数的90%以上,而且往往第二天一早就离去,其原因是( )A.商业服务多在夜晚 B.森林晚会吸引了游客C.游客观看 2012年朝阳区初三化学一模21题B选项怎么解释21.除去下列各组物质中的杂质,所选用的试剂及操作方法均正确的是(括号内的物质为杂质,所选试剂均足量) 选项 物质 选用试剂 操作方法 A 木炭 为什么选C?请分析每一个选项下列叙述:①两种不同的酸溶液混合,溶液一定呈酸性;②X (OH)3 的碱性大于Y (OH)3 的碱性,说明金属性X一定强于Y;③乙炔的实验式:C2H2;④HIO的电子式: ; ⑤D2O 补习生化学差,只有点基础,但也很零岁,怎么学我就是这个补习生,现在很在化学方面很迷茫,没有学习的方法. 初三化学求解答,为什么不选A(只解释A) 关于氨基酸的等电点求精氨酸的等电点(已知其α-羧基,α-氨基和胍基的pK值分别为2.17 ,9.04和12.48) 高中地理试题,根据西藏产业结构的变化图,可判断西藏—— 答案是C,我选了B.求答案解析和B选项错高中地理试题,根据西藏产业结构的变化图,可判断西藏—— 答案是C,我选了B.求答案解析和B选 初三化学全部定义!请告诉我初三化学中的所有的重点定义 为什么这么选...其他选项有什么不妥..He gave it back to me.He( )to me.a.turned it b.retured it c.turned it back d.turned it round 标准状况下 11.2LN2和NO的混合气体所含原子数为 NA个 不应该是 0.5 MOL 的气体分子 N2中有N原子 0.5 +0.5MOL NO中N 是 O.5MOL O 是 0.5MOL 共2MOL吗= = 生物分子识别的化学基础rt 怎样配置50g16%的nacl溶液(1)所需的仪器(2)配置的步骤 要配制10%的过氧化氢溶液20ml,需要向溶质质量分数为30%的过氧化氢溶液中加入多少质量的水才能稀释完成?总觉得是不是少了些条件啊 .笨笨的 做不像 ,分不多 ,就当帮帮小弟啦.实验室用质量 第八题为什么不选C 说明选这个答案的理由 最好对每个选项都作出分析1They suggested that a committee be set up to____ the matter[A] look for [B] look after [C] look in [D] look into2He did not work hard enough and_____ he failed the exam[A] as a resul 大学的生物化学实验通常有哪些? 我在补习化学,因为基础差,总是跟不上老师的节奏在我还没有把一道题搞懂时,老师已经开始讲下面的题了,我很担心补习了没有效果,因为有些知识点到现在我都还是不理解、不会运用,但是补 “化学性肝损伤”和“熬夜”有什么联系?我常熬夜,朋友送了一种茶,上面写对“化学性肝损伤”有辅助治疗作用,请问我喝它来保健没什么问题吧? 判断题“配偶选择可能存在性间选择,通常是雌性同相互竞争的雄性个体中选择交配的对象”解释一下这道题的意思,以及什么是性间选择?附:答案是正确. 如何巩固化学生物基础知识原来成绩很不错(很好),可是一道理综成绩就下来了,我知道是我化学和生物基础不好,所以综合了做的慢,现在要高三下半学期了,我该怎么赶啊.我认为自己有实力, 初三化学怎么学,我要速成的.一星期要至少要搞定一本书,熬夜. 生物化学实验有哪些 有谁能弄到物理的基础知识,还有生物和化学 配制50克10%的NaCI溶液,下列实验操作中,所得溶液的溶液质量分数可能大于是10%的是 A、称量固体NaCI时,天配制50克10%的NaCI溶液,下列实验操作中,所得溶液的溶液质量分数可能大于是10%的是A、称 普通动物学的辅导练习册上有一道判断题“在群居动物中,雌性个体间通常存在性内选择,不同个体的社会优势等级由此决定.”解释一下什么是性内选择,它和性间选择有什么不同么?附:另: 20题C选项为什么错 (问一下 ,怎么判断这是几月的,是根据那个仅有的20度吗.) 牛血清白蛋白的提取与鉴定的设计方案;但你说的一些方法我根本就不能完成!是否还有简单的提取与鉴定的方法,如:用电泳的方法来分离用BCA法来鉴定怎么操作! 第五题,为什么C选项是错的? 求教英语选择题,麻烦详解一下C选项Son:Father,you promised that if I did well in the exam you would buy me a new bike.Father:________ I will buy it tomorrow.A.So did I.\x05\x05\x05\x05\x05B.Really?C.So I did.\x05\x05\x05\x05\x05D.You shou 第六题应该选那个? 11题的C选项为什么错? 据报道,某年3月9日,我国科考队员在北极黄河站(78°55′N,11°56′E)观看了极夜后的首次日出.完成9∽11题9.当日,科考队员在黄河站看日出时,北京时间为A.10时 B.13时 C.16时 D.19时10.当日,日落于 尽量多说几个! 高一几道化学选择题(有1-2个选项符合)1.下列关于SO2的说法中,“错误”的是A二氧化硫能使有色物质颜色消失,说明它具有氧化性.B二氧化硫的水溶液能是紫色石蕊试液变红,说明他能和水反
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn