据eBay官方技术博客介绍,一直以来他们依赖的都是基于Java的技术,所有的工作流都围绕着Java和JVM。考虑到ebay.com这样的流量规模和稳定性要求,使用Java这样可靠的技术明显是合适的选择。在这篇文章中,作者介绍了eBay为何以及如何开发了他们第一个Node.js应用。以下为CSDN编译。
扩展性
这一切起源于eBay Hackathon冠军项目产品化的想法,但是我们发现Java并不适合该项目(并无恶意),于是开始了Node.js世界的探索之路。
关于这个项目我们有两项基本要求:第一,尽可能地实时响应——比如维持与服务器端的实时连接;第二,能够集成eBay数量众多的独有服务,在页面上显示信息——比如绑定I/O相关操作。我们起初使用的是基础Java结构,但是它对资源的消耗大大出乎我们的预期,在产品化时遇到了扩展性问题。这促使我们决心构建一个新的 orchestrator中间件,而Node.js最符合我们的需求。
心态
eBay一直以来都围绕Java这样的强类型静态语言开发解决方案,所以一开始很难说服大家使用JavaScript做后端开发。类型安全保障、错误处理、扩展等等方向的问题都困扰着我们。此外JavaScript本身(被称为 世界上误解最多的语言)也让这场辩论变得更加艰难。为此,我们建立了一个专门的内部wiki来聚合工程师们对于Node.js的观点、疑惑、问题等等。
几天后我们明确了大家的问题,开始着手解答。不出所料,关注最多的还是在于Node.js技术的可靠性,以及Node.js在处理早期eBay独有的函数式Java实现的效率上。
我们一一解答了这些问题,并且提供了详细现实案例。这一过程让大家,包括我们自己在内都深受启发,有的问题提出的角度是甚至我们从未想过的,最终大家终于理解了Node.js的核心价值。事实上,其中一些反对观点恰恰是其特色之处。
启动
项目从零开始,我们的目标是建立一个最小化的 boilerplateNode.js服务器,但是必须拥有足够的可扩展性;此外我们并不想引入现有的框架,因为这会使应用变得臃肿。随后我们依次引入了4个Node模块——express、cluster、request以及async。数据持久性方面,我们决定采用和eBay一样MongoDB,这就不会增加使用的难度。通过这些基本设置,项目服务已经可以运行了。服务器能够接收请求、调用eBay API,并持久化一些数据。
对于端到端的测试,我们将前端服务器指向Node.js服务器,一切看起来都不错。但接下来才是更严峻的挑战,我们开始使用白板描述所有用例、敲定REST结束点、设计数据模型和结果、确定最合适的Node模块,最后实现每个端点。在接下来的几周里,我们一直在编码、编码、编码……
部署
在应用开发趋于稳定后,就是时候离开开发环境、登台运行了。我们开始研究Node.js部署问题,目标很简单:自动化过程、一次构建随时部署。这正是我们对Java构建流程的要求,我们希望两者能够尽可能无缝地对接,并保持简单。
得益于基于云的部署系统,我们所需要做的仅仅是编写shell脚本,然后在 Hudson CI job上运行。无论何时有新代码签入主分支,Hudson CI job都会自动处理——通过shell脚本构建并打包Node.js bundle,最后将其推送到云端。云服务提供了简单的用户界面,可以选择环境(QA、演示或者前期制作),并且在相应的机器上运行该应用。
现在,我们已经在不同的稳定环境中运行了Node.js服务,整个部署过程比我们想象中简单、快速得多。
监控
在eBay,我们有集成在Java线程模型以及JVM层的日志记录API,在日志数据之上还有非常优秀的监控仪表盘,能够生成报告,并且能够在出错时实时地发布警报。我们也通过hook中心日志系统,为Node.js实现了类似的监控模块,并且实现了3个不同的日志记录API:
代码级日志记录。
机器级日志记录
负载平衡级日志记录。
此外,特别需要确保日志数据格式与既有Java应用完全相同,这样就可以使用相同的仪表盘,并且通过每个人都熟悉的方式接收报告。
其中最大的挑战在于Node.js事件循环的异步特性,这会导致处理的日志完全交叉。如何解决这一问题呢?首先试想一下下面的用例:Node进程从URL请求开始,通过异步回调返回了一个DB请求。该进程会在DB事务结束前和下一个请求并行。这对于Node.js这样的事件循环模型来说是一个非常常见的场景,多个URL请求的日志会因此交叉,因此日志报告会非常难以理解。最终我们分别为该问题制定了短期和长期的解决方案。
结论
在上面的工作结束后,我们Hackathon项目已经可以上线了,它也是eBay第一个使用Node.js作为后端的应用。目前该项目已经在内部试运行了,并且在性能方面得到了积极的反馈。激动人心的时刻就在前方!
得益于第一个Node.js后端应用的成功,eBay平台团队已经在着手开发一个运行在Node.js之上的成熟前端,它将能大大提升我们非前端特定功能的开发效率。对于前端工程师来说,梦想即将成真,我们可以自豪地宣告:“JavaScript无处不在!”
转载请注明: 转载自万俟飞的博客
本文链接地址: 看eBay如何评价他们的Node.js首次尝鲜
相关推荐
nodejs-ebay-api, 用于 node.js的[No longer maintained] eBay API客户端 Node.js 客户端 我不再维护这个 MODULE 了。 如果有人有一个活动的fork,并且感兴趣的话,请告诉我,我将转移,项目。 介绍这个 MODULE 目的...
Node.js 是一种基于 Chrome V8 引擎的 JavaScript 运行时环境,它使得开发者可以在服务器端使用 JavaScript,实现全栈开发。Node.js 的主要特点是轻量、高效、可扩展性强,尤其适合构建实时交互的 web 应用,如协作...
Node.js作为一种基于Chrome V8引擎的JavaScript运行环境,近年来在Web开发领域占据了举足轻重的地位。本书不仅覆盖了Node.js的基础概念和技术细节,还探讨了它在实际项目中的应用场景,以及为何能够得到Google、...
其他大公司如eBay、Netflix、TheMailOnline和Walmart等,也纷纷采用Node.js来优化他们的Web应用开发过程和提升用户体验。 Node.js之所以成为Web应用开发的热门选择,还因为它拥有活跃的社区和丰富的模块生态系统。...
eBay, Inc. and Amazon.com (A).pdf -- Harvard Business School case
本项目"OnlineAuctionWebApp"正是这样一个模拟Ebay的在线拍卖平台,它利用了Express框架和Node.js的强大功能,构建出高效、动态的Web应用程序。本文将深入探讨其核心技术和实现细节。 首先,我们来看看Node.js。...
《eBay SDK v581.0 for Java:探索eBay API的核心技术与应用》 eBay SDK(Software Development Kit)v581.0 for Java是针对Java开发者设计的一套工具包,它允许开发人员能够轻松地与eBay平台进行交互,实现各种...
易趣API Node.js 用于节点js的Ebay API客户端。 目的是通过处理繁琐的逻辑来简化请求过程。 这是围绕eBay Api的薄包装。 文档: : :ledger: 目录安装npm install ebay-node-api 用法let eBay = require ( "ebay-node...
这个模块是出于我们在eBay上为运行node.js的需求而的。 cluster2建立在节点的cluster ,添加了一些保护措施和实用程序功能来帮助支持实际的生产场景: 可编写脚本的启动,关闭和停止流程 工人监控过程死亡 工人...
Web.APIs.with.PHP.eBay.Google.Paypal.Amazon.FedEx.plus.Web.Feeds
eBay作为美国电商行业的巨头,自成立以来在电商业的发展史中占据了举足轻重的地位。在分析eBay的兴衰之路时,我们可以从中提炼出以下知识点: 1. C2C交易模式的开创:eBay是C2C(Consumer-to-Consumer,消费者对...
【eBay菜鸟入门培训】 eBay是一个全球知名的电子商务平台,主要提供在线拍卖和购物服务。对于初入eBay的新手,以下是一些重要的基础知识和步骤,帮助你顺利开始你的外贸之旅。 1. **售前准备** - **合法性**:...
在电子商务的世界里,eBay作为一个全球知名的在线拍卖和购物网站,为个人和企业提供了广泛的交易机会。特别是近年来,跨境交易的繁荣使得更多卖家选择在eBay上开展业务。为了保障交易的安全性和合法性,eBay实行了...
【标题】"eBay平台分析与运营策略" 在IT行业中,eBay是一个全球知名的电子商务平台,它为全球卖家和买家提供了在线交易的便利。这份名为"eBay ppt.rar"的压缩包文件,很可能是关于eBay平台的业务分析、运营策略或是...
根据提供的文件信息,我们可以从中提炼出关于Ebay平台客服细节的相关知识点。由于文件内容包含了多个与客户沟通的实例,我们可以归纳总结如下: 1. 客户沟通方式:Ebay平台鼓励客户有任何疑问时,可以随时通过邮件...