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

技术栈的选择:从Groupon转向Node.js、淘宝去IOE谈起

HTML文档下载 WORD文档下载 PDF文档下载
今年10月份,知名团购网站Groupon宣布完成了为期1年的工作——将Groupon美国站点从Rails迁移到了Node.js;在2010~2013期间,阿里巴巴逐步完成了“去IOE”运动……这些公司为什么要如此“折腾”呢?

在本文开始之前,先来看看一些案例。

  • 今年10月份,知名团购网站Groupon宣布完成了为期1年的工作——将Groupon美国站点从Ruby on Rails全面迁移到了Node.js。
  • 2010~2013期间,阿里巴巴逐步完成了“去IOE”运动,将“IBM小型机+Oracle数据库+ EMC2存储”架构逐步转向了“MySQL+PC Server”。
  • Twitter将其一些后端服务从Ruby on Rails迁移到了JVM上。
  • 京东商场后台抛弃.NET,使用Java重写。
  • Facebook iOS客户端使用HTML5重写,后又换回原生应用。
  • ……

一、这些公司为什么要如此“折腾”

关于技术栈的选择和迁移,并不是几个简单的原因就能说清楚的,也并不是说新的技术栈就比老的技术栈要优秀很多,其实每种技术都有存在的理由,并在特定领域内有其强大的优势的,当然也有缺点,比如 C的性能很高,但是开发效率较低;Java的功能强大,但是没有Ruby简单灵活。

那么这些公司为什么要如此折腾呢?下面以一些公司的实际案例,仅列出一些主要、常见的原因。

1.  速度、可维护性——Groupon从Rails转向Node.js


为什么要放弃原有技术栈?

Groupon目前在全球共有两套站点——美国网站和欧洲网站,其美国网站前端最初是一个单一的Rails(最流行的Ruby开发框架)代码库。对于为什么会选择Rails来开发最初的网站,Groupon开发人员表示,Rails非常适合小型团队快速开发,可以让网站快速启动并运行起来,这对于初期功能不断变化的Groupon来说,是个非常不错的选择。

随着Groupon的发展和新产品不断推出,这个代码库越来越大,有太多的开发者在同一个代码库工作,他们很难在本地运行并测试产品,如果有问题需要回滚,那么每个人的工作都前功尽弃了。

Groupon团队决定将原有的单一Rails库分割成小的、独立的、更易于管理的库。

为什么选择Node.js?

Groupon团队评估了不同的软件栈,想寻找一个能够解决这些问题的方案——有效处理大量传入的HTTP请求、使并行API请求服务于每一个HTTP请求、将结果渲染为HTML5,并可以有效实现监控、部署和支持。

该团队使用不同的软件栈开发了原型,并测试了它们,总体来说,发现Node.js是个非常适合的解决方案。

如何迁移?

Groupon团队使用Node.js重建了网站页面的每个主要部分,将它们作为一个独立的Node.js应用程序,然后重建了基础设施,使所有独立的应用程序可以一起工作。迁移之后,Groupon成为了全球最大的Node.js部署产品之一。

迁移带来的好处

  • 之前单个Rails前端代码库被分割成了20个独立的应用程序,其带来了如下的好处:
  • 页面加载更快——快了50%
  • 与之前相比,处理相同的流量所使用的硬件资源更少
  • 团队可以独立地更改、部署各自负责的模块
  • 网站功能和设计实现可以快速迭代

更详细的信息可参阅 Groupon开发团队的博客。

2.  原有技术栈已无法满足如今的规模——Twitter部分服务从Rails迁移到了JVM


Twitter在2006创建初期也是基于Ruby on Rails开发的,其架构设计也是完全可以应付当时的访问量。但是随着Twitter的快速发展,在每秒上万访问量的处理上,原有架构开始出现各种性能问题,比如Twitter开源负责人Chris Aniszczyk称,在2010年世界杯期间,球员进了一个球或者得到红黄牌,网站就宕机了。

为了解决这个问题,Twitter急需开发一个全新的架构,以应付现在越来越大的访问量。对于Twitter为什么从Rails转向JVM语言,来看看Ruby创始人松本行弘是如何说的。

Twitter刚开始开发的时候不可能考虑到会有现在这样大的访问量,可以说现在的Twitter发展到当初在设计上的极限了。
一个网站在遇到设计极限的时候,有很多解决方法,比如重写架构、换其他语言等等,他们的工程师想要挑战一些新的东西,就提出要改用Scala,因为Scala是编译型语言,性能也不错,正好适合编写新的架构,我觉得这样也不错。
在我看来,在网站所提供的服务还没有完全成型的时候,最重要的是能够对需求的变化做出快速的反应,这个时候就需要Ruby这样灵活性比较高的语言;而在网站获得成功之后,遇到了设计瓶颈,用一种新的语言,比如Scala,来编写一个新的架构,以节约一定的资源,我认为这也是很好的一个结果。Twitter转向Scala还只是在其核心部分,而在Web前端和一些内部工具上还有很多地方在用Ruby。

此外Twitter还将一些后端服务使用Java和 Clojure(基于JVM的Lisp方言)进行了重写,其基础设施也采用了一些开源项目。

迁移后,Twitter在美国总统竞选期间没有出现宕机。目前Twitter每秒处理约6000条消息,加起来每天处理超过5亿或每周35亿条消息。

3.  技术上更可控,规模上更易扩展——淘宝去IOE


2010~2013期间,阿里巴巴逐步完成了“去IOE”运动,将“IBM小型机+Oracle数据库+EMC2存储”架构逐步转向了“MySQL+PC Server”。

至于阿里巴巴为什么要“去IOE”,阿里技术保障部DBA负责人周宝方表示主要从以下几个因素考虑:

  • 集中式的严重制约:集中式强大单点远远满足不了阿里特别是当时淘宝爆炸式业务增长应用的模式,这里可分为三个方面,稳定性、跨IDC容灾切换、快速扩容;
  • 技术面临失控,创新潜力受限;
  • 专用设备规模化场景下诸多限制;
  • 成本(这应该是整体最次的因素);
  • 安全

“去IOE”之后,阿里的技术架构非常灵活,支撑了业务的快速发展,比如在双十一,阿里可以很淡定地做业务扩展;其次是阿里掌握了技术自主可控操作;另外还包括基础工程技术和人才的积累、技术的沉淀、成本、安全性的提升等等。

详细信息可参阅《 阿里周宝方谈“去IOE”战略及实施》。

4.  快速开发需要——PayPal使用Node.js重写其支付系统


PayPal 公司长期存在着“ 非我所创 ”的文化,这导致 PayPal 采用新技术的态度很消极,项目开发进度也极其缓慢。正是由于 PayPal 行动缓慢,其他支付服务商 Stripe 和 Square 趁机成长,逐渐撼动 PayPal 的市场地位。同时,PayPal 当时的开发技术也已经无法满足快速开发的需求,因为当时的开发基本全是 Java,不需要用 Java 来实现的也会用 Java 完成。

2012年4月,David Marcuss成为 PayPal 的总裁后,任命工程师团队重写支付系统,最终,工程师团队用了8周时间完成了该项任务,他们选择了Node.js和一些开源项目对系统进行重新开发,最终他们将这一技术栈整合成了一个 快速开发框架——Kraken,以实现公司其他产品的快速开发。

5.  追随潮流,但这是有代价的——转向HTML5


HTML5 是应用开发领域的未来趋势,由于其跨平台性,一些企业也开始将应用使用HTML5重写。

比如Facebook和LinkedIn采用HTML5重写其iOS客户端。但是他们也付出了一定的代价——由于用户的网络环境并没有预想的那么好,结果导致应用启动、浏览信息流、打开图片都比较慢,因此他们后来又放弃该技术,转而使用苹果的iOS SDK重新构建,由于是本地应用,速度提升非常明显。

当然,这并不是说HTML5不好,而是时机还未成熟。

6.  成本考虑——选择开源软件


由于昂贵的成本,开源软件往往是小型初创公司的首选。比如服务器方面:

  • 单从系统的性能和吞吐量来讲,Windows Server也不差,但是Windows在管理和部署方面没有Linux方便;
  • Windows服务器的授权费用使架构规模的横向扩展成本偏高;
  • 一些高端的服务器软件只有UNIX/Linux版本
  • 一些优化、缓存、数据库解决方案只针对Linux。

7.  更换技术团队或CTO


有这样一种情况存在,比如原有代码库相关开发者大部分都离职了,且相关工作没有交接好,文档又不全,导致现有的开发人员难以维护,或者现有开发人员认为原有代码“坏味道”太多,不愿意维护,所以团队一拍即合,重写架构。

也有可能公司更换CTO后,公司的原有架构不是新CTO所熟悉的,而且他认为原有架构有一定的问题。

8.  被迫选择


如果公司正使用的某些产品的原开发者不再提供支持,那么只能寻找其他替代品。

还有就是在特定平台上,你只能选择某个技术栈,比如iOS开发,你只能选择Objective-C(当然也可以选择其他跨平台开发工具,但是性能上比不上原生应用)。

二、大公司是如何做的

在技术栈的选择和迁移上,大公司会非常慎重,不仅要考虑新的技术栈是否能解决现有的问题,还需要从公司战略(比如发展方向)、技术发展局势(比如移动化、云端化)方面考虑。

1.  不断尝试新技术栈——Groupon

迁移现有架构或技术栈,需要大量的人力和其他资源,此外,为一个线上产品更换底层设施需要非常高的技术,比如有人将淘宝去IOE比喻成在公路上为一个高速行驶的汽车更换轮胎。

一些公司的开发团队会尝试不同的技术栈,制作出原型并进行测试,以此来看是否满足需求。

除了做好预备工作外,开发团队还会选择先迁移部分应用或服务,小步前进,并在此过程中,快速验证新技术栈的适用性,并及时反馈,以便能够发现问题后快速回滚。

2.  优化原有技术栈——Facebook

当然,也有一些公司不愿放弃原有的技术栈,比如 Facebook,转而在原有技术栈的基础上进行优化。

Facebook的前台主要使用PHP编写,尽管PHP编程效率高,能够支持产品的快速迭代,但是与传统的编译语言相比,脚本语言在CPU和内存使用率上不够好,随着Ajax技术的广泛采用,加上SNS对动态要求较高,这些缺点更显得突出。

自2007年以来,Facebook尝试使用多种不同方法解决这一问题,比如使用另一种语言重写Facebook、重写PHP的核心部分Zend引擎,但最终还是没有获得所需的性能。

于是HipHop for PHP诞生了,该项目由一个PHP到C++的转换程序、一个重新实现的PHP运行库和许多常用PHP扩展的重写版本构成,可大大加速和优化PHP应用。据悉,由于HipHop,Facebook Web服务器上的CPU使用率平均减少了50%。

3.  也有失败案例

当然,在技术栈迁移过程中,也有失败的案例,比如5173网站从.NET转向Java以失败告终。详细信息可见范凯 《对.NET系统架构改造的一点经验和教训》。

三、如何选择技术栈


选择技术栈需要参考的因素有很多,一些基本因素如下:

  • 产品预期上市时间
  • 开发团队和生产力情况
  • 可维护性
  • 可扩展性
  • 使用环境
  • 社区和许可情况(开源项目)

对于实际上该如何选择,华为开源支持平台专家庄表伟给出了他的建议。庄表伟认为:

在快速原型的阶段,就可以选择快速开发的语言,而在实用的阶段,就应该选择更加实用的语言。而在一些极端的领域,效率至上与实用至上可以毫不相干,各自有所追求,前期追求效率的开发产品,由于成本极低,大多是可以随时抛弃的。而真正的困难在于想要兼得。常见的与架构相关的两种痛苦:

  • 一种是,刚开始为了追求快速开发,在技术选型上怎么快怎么来,结果系统越来越大,越来越复杂,等到想要考虑架 构优化,想要重构的时候,却已经积重难返,改起架构来伤筋动骨;
  • 另一种是一开始想得太多,架构做得太复杂,杀鸡用牛刀的技术用得太多,往往还没有等到系统开发完成,就已经Game Over了。

庄表伟认为想要兼得鱼和熊掌的确困难,但是并非没有可能,我们可以找到一些优秀的、可选的技术集合,对于技术选型的判断,需要考虑理论情况与实际情况:

考虑效率

  • 技术复杂度(复用性):学习并掌握一组技术栈,需要了解多复杂的技术;相应的,当我们掌握了这门技术,它可以在多少地方复用?
  • 技术友好度(优雅性):在开发的过程中,会不会有各种莫名其妙的陷阱,会不会让我纠缠于各种莫名其妙的细节?

考虑实用

  • 业务复杂度(组织性):随着业务的复杂,我们的代码会不会最终无法驾驭?无法维护?无人能懂?
  • 性能提升度(潜力):随着业务的增长,压力的提升,我们会不会最终被迫放弃现有的技术架构,重头开始?

详细信息可参阅《 技术选型:效率至上与实用至上》。

四、看顶尖互联网企业的技术选型

移动应用云服务工具APICloud宣布完美适配iPhone6 从应用分发到能力开放 华为开发者联盟沙龙上的共赢理念 SOOMLA框架:移动游戏分分钟创建个虚拟商店 Facebook:如何让应用适合所有系统、带宽以及屏幕 Docker实践者不能错过2014 Container技术大会的九大理由!(讲师议题全面揭晓) 2014全球云计算大会中国站(CC China)精彩集锦 腾讯X5浏览服务正式开放 30多款APP成为首批受益者 Node.js设计经验谈 LeanKanban University首位中国认证讲师路宁:看板会为更多国内企业带来深刻变革 环信IM沙龙纪实:无分享不IM,无社交不未来 【工具推荐】ESL:更简洁、更高效的标准加载器 【先锋】亲加通讯云:以云服务模式为App提供社交引擎 2014中国移动开发者大调查第一批获奖名单大曝光 移动开发云服务AVOS Cloud宣布完成A轮融资 Uplinq2014:人工智能嵌入硬件 万物互联建生态 Uplinq2014:基于Vuforia的新奇智能玩具 一应俱全!开源跨平台3D应用开发框架Minko 【线下技术培训】敏捷测试实战解析和系统方案 《近匠》Ping++:简单、高效、第三方支付SDK 有关编程的12个猜想 【问底】王帅:深入PHP内核(二)——SAPI探究 【CTO俱乐部走进汽车之家】活动图文实录 只为逼格?超薄便携式无线充电设备Deuce 戴尔未来重心:云计算、大数据、移动互联与安全 【讲师】搜狐于顺治:Container在搜狐PaaS平台中的应用实践 【先锋】从代码层诊断,云端OneAPM平台让开发者专注开发 阿里将推无线领域重磅计划 阿里百川无线开放大会揭晓 提升网站转化率的四步优化方案 开发者应该了解的API技术清单! 【讲师】腾讯刘永峰:Docker时代,公有云面临的挑战和机遇 移动开发工具服务商Mob推出免费短信验证码SDK .net framework? SDK实例的书有没有买的,请各位前辈推荐几本,谢谢了! QQ被盗,气愤之及。 三级菜单为什么不能导入*.swf影片啊???? SDK实例的书有没有买的,请各位前辈推荐几本,谢谢了! 哪位好心人推荐1本VB6的电子版控件大全教程.我是1名初学者---百分送!!!!多谢多谢在线等待 请高手指点 隐藏qq在状态栏的小图标! 关于基于Web Services技术的实验项目讨论 swf文件能不能转换成avi文件 如何使Winxp+iis5支持浏览Asp+? qq状态栏的小图标隐藏! 不重新分区可以吗? 如何改变桌面快捷图标,如果调出.ICO这个作为程序的快捷图标 一个难题 vb 高手们,能加我为你们的好友吗,我是初学者? 判断合法的email? 一个关于游标的问题 强烈推荐:rh linux 8.0 投票选举:谁为水源脸皮第一厚之人。 如何在dehpi中调出本地计算机的IP地址? 推荐一本书!!! 直连SQL SERVER2000怎么写代码?SQLCA.DBMS= "MSS microsoft sql server 2000" SDK实例的书有没有买的,请各位前辈推荐几本,谢谢了! 谁知道免费starcraft站网地址 一个程序开始端像dehpi会有一张图片以便缓冲,问这张图片怎么在程序中设制? 论坛全新开张,欢迎捧场 怎么将asf文件转换成avi文件 存储过程的问题? 如何在PictureBox控件中显示数据库中存储的图象 地址栏不见了!!! @@@@@@@@ TreeView 的问题 @@@@@@@@@@@@@@ 请教:哪里可以下载工具栏控件 怎样不用Delphi6的那个qtintf.dll啊? 对多语言问题的总结,集各位CSDN的智慧,让大家共享之 怎样将string类转化为其他类型,例如... 请问在哪里可以下在IIS 5.0 for Windows NT 4.0? 今天我才明白,我不是那么绝情,那个女孩竟然在我的心里留下了一份震撼 如何检测和修正ghost文件? Friecin(雪客)进来拿分(300分奉上,请高手做答关于MDI和DLL的问题) 想做程序员,考研如何选择 AnsiCompareStr和CompareStr? Behard进来拿分(300分奉上,请高手做答关于MDI和DLL的问题) CDatabase类里获取数据库名的函数是哪个啊? 请问RichEdit中如何在代码中修改选中字符的字体和颜色? 安装 WebSphere应用服务器问题 我发现我怀孕了,不知道是谁的!:( 中国电信 为什么我的打印机打印时会出现重影?? 我怎么把他们一一显示出来在listbox里?代码写出来! 请问BOOT扇区中各个数据的意义。。 如何防止踩踏事件 Lei Feng was always thinking of what he could do more for the people哪里错了 用适当形式填空 1.I ________ already_________(see)the film.I _____(see)it last week.2.——__________he_______(finish)his work today ------Not yet. 最近在360上直接下的金山词霸,词霸什么的都需要联网才能够查英语单词的,而且还没音标,讨厌死了,那个好心人给推荐个安装在电脑上的,不用联网,有音标,词汇量还不错的英语电子词典,最好 To:I wish you have good time every day ) 英语翻译求“见者有份”这个词准确的的英文翻译.可能中文一般都浓缩得短小精辟但是英文会很长,但请不要出现中国式英文, 怎样区分记叙、描写、抒情、说明、议论? 12.i wish you'll have a good time on the beach.同义句 普通玻璃能阻挡紫外线吗?原因是什么? 什么成语来形容头大的 会英文的人事进.三天前我去过那.翻成英文?我写两句,老师说都错了!1Three days ago I went there老师说,这句是三天前我去了那,不是去过那2.There days ago不能与 I have been there lah.还是错! 普通玻璃能阻挡紫外线吗 in the 20th century,in the 1950s,这两个时间词的前面为什么要加 the? 人事员英文怎么写 为什么普通玻璃能阻挡紫外线注意是普通玻璃啊书上说 普通玻璃可以阻挡紫外线 使光电效应消失 He looks like his father.(同义句)He—————his father. “不要问我太阳有多高,不要问我星星有几颗…”是什么歌名呢?谁唱的! 普通玻璃能吸收或阻挡多少紫外线? 语文题目,漫画题:别出圈 (提示:画面上小孩写的四个字是:坐井观天) If you don't have ___for your hobbies,you should plan your time carefully.A.a lot time B.enough time C.time enough D.lot of time 玻璃能挡住百分百的紫外线吗? 仔细观察下面的漫画,用生动形象的语言将画面内容描述出来.添加:1.那人讲的“是旷野之上,何处是我家……”2.漫画标题是《居无定所》3.姚万俤 绘4.不要瞎扯,不要已有的答案,大约8行,一行 have time for hobbies=have time( )( )hobbies 1.根据音标写单词/braun/2.根据首字母补全:(1)Can't you s____?These cakes are r____,like the moon.(2)S_____ comes after August.Mid-Autumn Festival sometimes comes in this m_______.3.对括号里的提问:Two girls 【are cleaning】 th 形容在耳边轻轻说话很亲密的样子的成语 He usually thinks of ___ he can do more for the people.a.what b.that c.how d.why为什么选C 用括号内所给单词的正确形式填空I will choose my sister _____(help) me.My father's job is _____(drive) a bus.The children in poor areas all hope _____(go)to schoolbencause they love studying.Yesterday Simon _____(choose) as the chairman 彼此在耳边低声说话.用成语 风筝与线作文 为什么说林则徐 魏源 是地主阶级代表 维护的是清王朝的统治? he looks like his father.同义句改写he and his father_____ _____ ____. 有一题英语选择题是He was born______ A.in 1950s B.in the 1950s C.in 1950`s 应该选什么? 林则徐魏源是地主阶级抵抗派,抵抗怎么理解 写块和块定义有什么区别 假如我是小草,我愿意为你______;假如我是星星,我愿意为你______.仿句是 地主阶级抵抗派林则徐魏源为代表他们干了啥? 定义块和写块有什么不同? 不要问我星星有几颗? 太阳光照在玻璃上的反光有没有紫外线 英语翻译淮南孔旻,隐居笃行,终身不仕,美节甚高.尝有窃其园中竹,旻愍其涉水冰寒,为架一小桥渡之.推此则其爱人可知.然余闻之,庄子妻死,鼓盆而歌.妻死而不辍鼓可也,为其死而鼓之,则不若不 He always thinks of __ more than himself.A、otger B .others C、the other D 、the others 选什么,为什么.它们之间有什么区别? 梁启超认为变法最重要的是什么?比起魏源、曾国藩.他在学习西方问题上有什么进步? 英语翻译Hot dip galvanizing is a process by which iron and steel can be treated to prevent rusting.In essence it involves dipping the article with a chemically clean surface into a bath of molten zinc which reacts with the iron and forms a coatin he always thinks of(how)he can work better for the people.为什么用how 而不用what? 梁启超思想核心 求翻译:人事だと思ってPS.说这句话时,当事人很生气.求这句话原义和延伸义,即,在生气的情况下说又可以怎样理解? 学英语的方法 后世对于梁启超的思想到底是褒还是贬?各自反映的角度是?造成什么影响?有什么事实依据? 英语翻译红烧大排(香酥)排骨烧白干红烧鱼块回锅肉茄盒青椒塞肉木须肉莴笋炒肉丝西红柿鸡蛋土豆肉丝蒜苔肉丝芹菜干子肉丝家常豆腐剁椒鱼椒盐鸡腿(翅根)梅菜扣肉米粉肉(排骨) 学英语有什么方法 英语翻译Tracy Wong is a well-known Chinese-American writer.But her writing skill was something she picked up by herself.After her first job ,teaching disabled children,she became a part-time writer for IBM.Then,writing stories was simply a person 不要问我星星有几颗,我回告诉你有很多,这是什么歌里的歌词 我想问下人事 新公司有没有通信补贴 话费报销之类的,用英文怎么说啊? 哪些地理景观的发展与变化比较显著,哪些比较缓慢?求答案 来自星星的你里面有一个插曲出现很多次了,是什么歌 How many foods do you have?怎么改错 网络表情符号-_-#,→_→,=_=,+_+*,∠※, 如何防止踩踏事故 He of how he could do more for the people.B is always thinking C has always thought为什么不用has always thought he often thinks of ()he can do more for the four modernizations.这里面为什么能够判断他少的是状语,而i can't understand ()they insist on going by motorbike中是少了定语呢?单看一个句子,怎么知道先行词有没有被省略
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘