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

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

GitHub再遭攻击 主要服务中断约一小时 移动开发者将有望拥有.app域名使用权 微信将推“游戏中心”?移动互联网入口圈地加剧 美国航空公司首次开放API 并举办“黑客马拉松”编程大赛 谷歌数据中心设计的10条“黄金法则” GitHub时代:为什么我们都在开源 VMware发布Horizon Suite 三款应用打包折扣低 TOP30+应用排行榜:二月份国内外综合榜单 开源是否意味着不需要负任何责任? 微软年度科技展 酷炫技术知多少 图解Hadoop生态系统 HTML5并不给力 微软IE10又默认启用Flash Oracle出新提案:Java正逼近iOS? TIOBE 2013年3月编程语言排行榜:厚积薄发 Ruby反超Perl 清华大学开源镜像站将被关闭 发表公开信 前Google资深研究员赵勇回国创业 专注计算机视觉/模式识别 开发者福音,微软开源Kinect源代码 日本很积极:富士通和NEC确认将推Tizen设备 10大支持移动“触摸操作”的JavaScript框架推荐 数据科学家的争夺及美分析学专业研究生院的建立 从开放走向封闭 Netflix宣布停止发布API key 《植物大战僵尸》神秘续作:可能是一款横版游戏 高性价比:GlassUp宣布支持Windows Phone系统 未挖掘到足够信息:非收集数据少,是利用率只有1% 下一个帝国:谷歌收购初创公司DNNresearch 苹果更新Apple Store应用,可查看零售店库存 开源软硬件:福特汽车的OpenXC计划 Temple Run:Oz稳坐付费榜头把交椅,迪士尼名利双收 Facebook开放图谱示好开发者 新增书籍电影等九项操作 源代码管理的六大视觉模式 最新算法面世 可提高云数据库性能 做过基于对话框程序的文件序列化(Serialize)的朋友看过来(急) 执行delete后,为什么没有释放内存空间 如何控制文本的输出格式? 如何打印很长的一行文本,一行打印不下,要换行? 有什么好的方法,将excel和dbf文件转换成ACCESS和--在线等待 一个SQL Server的小问题 问题解决? 如何为TreeView添加事件? 执行delete后,为什么没有释放内存空间 我又一次糊涂了 关于工具条中加控件,并设定控件大小的问题(100)! 老问题,刷新时的重复添加,有好的解决方法了吗? what????this is redhat6.0 如何看分析解释语句,,谢谢,,100分。 搜索的问题 vb中文件保存的原代码是怎样的? 请教各位高手以及愿意帮助我的各位前辈们! 请问报表设计器是怎么用的? 请教!delphi4 是否可在windows xp 环境下安装? 创建EJB Test Client 的问题》???怪啊 用CSS可以改变table中的字体颜色吗? 在delphi中怎样注册一个ocx控件,用代码如何实现!!! 如何找到文件? 請問怎樣知道SQLServer里IMAGE字段是否為空 救命啊!开发gis系统需不需要后台数据库 散装赛扬III配的原装Intel风扇的问题 急!!!百分求解window api中CHOOSEFONT与LOGFONT关系。 问一个vc中CRecordset定义问题 怎么通过程序改变REMOTEDATACTL的属性? 请问如何在JSP中实现邮件的收发?(涉及到密码验证的问题)我已经郁闷很久了! 如何得到另一个进程中的线程正在使用的tcp/ip端口? **好像有一个网址可以自由上传30M以下的软件,请问有谁知道这个网址?????** Unicode的问题???? db 库文件被破坏,请教高手? 本人刚接触vc,紧急求助! 请问,如何将简体字的网页,转换为繁体字的网页? 请教vb3秒精确定时问题? 哪位大侠能在今天内急救!!关于asp.net的数据验证和数组传送问题 lihonggen0(李洪根,用VB,标准答案来了) 密码被人盗用 在Delphi中用ADO怎样连接Excel表 x++等的问题。 当一个数据库数据更新后如何通知所有连接到此数据库的用户来更新自己? 一个有趣的问题 奉献100, 现在手头有个程序,关于附件上传! 如何判断A字符串中是否包含B字串? 做个类似的邮件发送程序 快快就我 怎样同时新增主从两张表的数据? vb.Net中的几种类型集合中,那种适合于用Index和Key来索引?我怎么觉得.Net的CollectionBase还没有vb6的Collection好使? 为亚洲雪耻,为中国队加油!! 紧急求助:在那儿可以找到关于字体文件的文件格式!!! 钾离子进出细胞有几种方法? na-k泵和载体蛋白和离子通道的关系?钾离子进出细胞有几种方法?na-k泵和载体蛋白和离子通道的关系? 一瀑布落差30m,假如在下落的过程中水的初速度为零并且机械能减少量全部转化成水的内能,水的温度升高多少 用于碳化树脂的高温炉及配件该用什么型号的啊?浙江哪个厂家有这种高温炉? 手动碳化机和气动碳化机有什么区别和特点 瀑布落差30米,假如在下落过程中机械能减少量全部转换为水的内能求水的温度升高多少减少机械能等于增加内能mgh=cmt为什么只需求热量?内能不是包括动能和势能吗.温度是动能的标志 但是为 请问这几道题怎么做?第二道题我觉得是对的.请说明方法,最好可以用图.最好可以在纸上写拍下来.急求. 生物质特点,特征与意义生物质能源的特点,特征是什么.相对于其他可再生能源,开发生物质的意义是什么没悬赏分了.麻烦啦 镁条在空气中燃烧生成氧化镁、氮化镁和碳化作烟跑掉了是什么意思?难道生成的是气体? 最好写纸上. 神经细胞的NA离子外流和K离子内流的运输方式是什么?那个NA离子泵是什么懂了,顺便说一下二楼在植物上学的是那个H离子泵吗,生长素会激活它,细胞H离子外流,细胞壁酸化,有利于细胞 同温同压下,同体积的氧气和甲烷,它们的原子数之比为 速回数学 最好写纸上发图 杯子灌上热水后凉了盖子很难打开,除了浇热水外,还有什么办法(不损坏杯子},什么物理原理? 竹子碳化的作用是什么?竹地板碳化后有吸收有害气体的作用吗?大庄地板在竹地领域处于什么地位? 为什么水银温度计碎了可以撒上硫磺,可以去除水银吗RT 怎样提前预防负压的产生? 什么反应生成碳化镁 要想水压达到0.04千帕以上,水箱该离出水口多高 无负压供水设备是用什么技术来防止负压的? 炭化铝和水能生成什么? 在同温同压下,同体积的氢气和甲烷,它们的原子数之比是.a 2:5 b 1:1 c1:5 d1:8在同温同压下,同体积的氢气和甲烷,它们的原子数之比是.a 2:5 b 1:1 c1:5 d1:8,选什么啊.为什么啊? 炭化是什么意思 在纸上画着,拍下来. 同温同压下,同体积的氢气和甲烷,它们的原子数之比是 最好是写下来然后拍成图片. 初三物理问题 内燃机 !一柴油机的飞轮转速为2400r/min 由此可推断 该柴油机每秒做功多少次?我连题都没看懂 r是什么啊 拜托各位具体点啦~~ 求加工中心P和L是什么意思 请教生物质锅炉的特点与安装注意事项,有知道的请帮忙解答 碳化的定义有关建筑材料中石灰变为碳酸钙的哪个碳化过程在钢筋混凝土结构中,水泥的酸碱性对钢筋有一定的影响,但是碱性会在氢氧化钙碳化为碳酸钙时减弱,钢筋会在无碱性时更快的生锈, 加工中心G10后面的L--分别是什么意思 轧钢加热炉有哪几种 印章上的篆体是什么字印章上的篆体是什么文字 循环次数 比 活塞往返次数 比 曲轴转动圈数 比 冲程个数 比 飞轮转的圈数 比 做功次数 等质量的氢气氧气氮气氖气甲烷和二氧化碳气体,所含分子数由大到小的顺序是原子数由大到小的顺序是 什么篆体字刻章好我想做一枚书籍、书画收藏章,用什么篆字体好?{耿旭长收藏章}最好为方形,字形是阳文好还是阴文?(最好有个设计图形.) 四个冲程中每个冲程的表现 及内燃机一些知识 加工中心四轴a前面有个l是什么意思 不锈钢杯子摔了一下 倒了开水会一个劲的响 抗炭化性是什么意思? 加工中心F.Q.R各代表什么意思 自来水的流速是多少,一般自来水压力是多少 304不锈钢水箱焊接用316的焊丝可以避免焊缝生锈腐蚀么 十万火急,十万火急,绿矾与NH3HCO3一比二反应,怎么可以把水约了?这不是晶体吗 长期用不锈钢杯子喝热开水,不锈钢的成分是什么,因为最近脱发厉害,且铅中度中毒,我担心是因为长期用不锈钢的杯子喝水的缘故.俺是搞档案工作的,会有灰尘,另外晒出来的图纸是氨水弄 汽油机的效率比柴油机低,是因为柴油机的喷油嘴喷出雾状的柴油,增大受热面而提高效率.为什么汽油机不把火花塞改为喷油嘴,吸气时只吸空气,从而提高效率 哎,老师说要总结化学反应现象,很多都不会,/ 1.铜与氧气在加热的条件下的反应现象 2.汞与氧气在加热条件下的反应现象 3.过氧化氢分解的反应现象 4.实验室制氧气的反应现象 5.氯酸钾加热生 杯子装满开水后盖子打不开了怎么办 高温炭化是什么意思 木炭机和炭化炉价格要多少? 南极极昼和极夜和北极那个长 某四冲程汽油机汽缸直径D为65mm,活塞冲程h为55mm,满负荷工作时做功冲程,燃气的平均压强p为9.58乘10的5次方,飞机转速n为1500r/min.1.求这种汽油机满负荷工作时的功率P2.若满负荷工作时每分钟消 谁能告诉我一下木炭机设备的炭化炉的材质是什么,还有炭化炉的构造! 内燃机的工作过程由___、_____、_____、_____四个冲程组成. 瀑布从10m高处自由落下,如果下落过程中减少的机械能有20%转化为水的内能,水升高的温度是多少 木炭机的炭化炉之木炭机中占有怎样的地位呢? Na+进出细胞的方式是是主动运输还是被动运输?是否耗能,是顺浓度还是逆浓度运输?和钠钾泵运输原理一样吗 瀑布从10M高处落下,如果下落中减少的机械能有50%转化会水的内能,水的温度升高多少?减少的50%转化为水的动能 不就是说空气阻力做功的50%转化为水的内能吗 请问怎么求? 如图最好写在纸上照下来 钠钾泵通道进出细胞的方式是主动运输还是被动运输 水从40M高处落下,如果水下落过程中减少的机械能有50%转化为内能,则水升高温度是多少? 如图,答案要详细最好写纸上.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘