如何理解PayPal對(duì)Node.js的應(yīng)用和開(kāi)發(fā)

本篇內(nèi)容主要講解“如何理解PayPal對(duì)Node.js的應(yīng)用和開(kāi)發(fā)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“如何理解PayPal對(duì)Node.js的應(yīng)用和開(kāi)發(fā)”吧!

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿(mǎn)足客戶(hù)于互聯(lián)網(wǎng)時(shí)代的武安網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

從歷史上看,我們工程團(tuán)隊(duì)的代碼已經(jīng)被分割成瀏覽器層(使用HTML , CSS和JavaScript )和應(yīng)用層(使用Java ) 。試想一下,一個(gè)HTML的開(kāi)發(fā)人員要求一個(gè)Java開(kāi)發(fā)人員將“A”和“B”頁(yè)面連接在一起,但是這就是我們。該模型通過(guò)引入全棧工程師,落后那些能夠創(chuàng)造一個(gè)好的用戶(hù)界面,然后生成應(yīng)用程序去支持它。稱(chēng)他們?yōu)楠?dú)角獸,但是這就是我們想要的,在PayPal中,主要阻滯劑是我們?cè)跒g覽器和服務(wù)器之間建立的人工邊界。

Node.js 使用javascript,通過(guò)建立瀏覽器和服務(wù)端的應(yīng)用程序幫助我們解決了這個(gè)問(wèn)題。它統(tǒng)一了我們團(tuán)隊(duì),讓我們?cè)诩夹g(shù)堆棧上了解和應(yīng)對(duì)我們用戶(hù)的任何需求。

早期使用Node.js

和其他一樣,我們把Node.js 作為一個(gè)原型的平臺(tái)。同其他一樣,它表現(xiàn)了很好的性能,我們決定在產(chǎn)品上使用它。
最開(kāi)始的時(shí)候,我們使用express作為路由,nconf來(lái)作為配置,grunt來(lái)建立工作流。我們特別喜歡express框架的普及,卻發(fā)現(xiàn)它并沒(méi)有在多個(gè)開(kāi)發(fā)團(tuán)隊(duì)很好地?cái)U(kuò)展。express是非強(qiáng)制性的,并允許您在任何方式合適地去設(shè)置一個(gè)服務(wù)器。它非常靈活,但不利于在大型團(tuán)隊(duì)中保持一致。隨著時(shí)間的推移,我們看到的模式脫穎而出,更多的人拿起node.js的轉(zhuǎn)身進(jìn)入Kraken.js ,它不是一個(gè)框架本身,而是基于express的一個(gè)層,允許它擴(kuò)展到更大的組織。我們希望我們的工程師專(zhuān)注于打造自己的應(yīng)用程序,而不是僅僅著眼于建立自己的環(huán)境。
到現(xiàn)在為止,我們?cè)趦?nèi)部使用kraken.js 已經(jīng)有幾個(gè)月了(不久,我們將會(huì)開(kāi)源),我們的工程師團(tuán)隊(duì)期望將它變成一個(gè)實(shí)時(shí)的公司內(nèi)部的node.js應(yīng)用程序。

促使Node.js 到產(chǎn)品上

我們首先在產(chǎn)品上嘗試node.js不是一個(gè)小的應(yīng)用程序,它是我們的賬目總覽頁(yè)面,這個(gè)頁(yè)面具有很大的流量。我們打算去使用,但是我們也得降低風(fēng)險(xiǎn),

于是我們同時(shí)建立了一個(gè)java應(yīng)用程序。我們知道如何去部署和度量java應(yīng)用程序,因此如果在node.js 程序出了任何問(wèn)題,我們能夠迅速的切換到j(luò)ava上來(lái)。它提供對(duì)一些數(shù)據(jù)的設(shè)置。

部署

我們?cè)?月份就開(kāi)始了,它花費(fèi)了我們幾個(gè)月的時(shí)間去研究node.js必要的基礎(chǔ)東西。比如sessions, centralized logging, keystores。在這段時(shí)間內(nèi)我們有5名工程師在使用java工作。在2個(gè)月的java開(kāi)發(fā)后,2名工程師開(kāi)始使用node.js 并行開(kāi)發(fā) app。在7月初的時(shí)候,他們相互溝通了一下,他們的應(yīng)用程序具有相同功能。node.js的應(yīng)用程序,是以一個(gè)更小的團(tuán)隊(duì)在2個(gè)月后開(kāi)始,但是很快就追上了。有幾個(gè)細(xì)節(jié)脫穎而出后,我們運(yùn)行測(cè)試案例,兩個(gè)應(yīng)用程序通過(guò)相同的功能測(cè)試。node.js 是:

1)更少的人去建立,幾乎是2倍甚至更快的速度
2)少了33% 的代碼
3)建立40%甚至更少的文件

這個(gè)提供了一個(gè)令人鼓舞的消息表明javascript可以更快的工作。我們都同意并且做了一個(gè)決定:將java應(yīng)用程序擱置了。但是問(wèn)題是java工程師在項(xiàng)目上,開(kāi)始的時(shí)候?qū)D(zhuǎn)向node.js并且很高興的在我們的工作流中提交代碼,提高我們雙倍的生產(chǎn)力不太自信。

性能

性能是一個(gè)高興而有爭(zhēng)議性的話題,在我們的案例中,我們一個(gè)團(tuán)隊(duì)有2套功能相同的應(yīng)用程序:一個(gè)使用java 基于Spring而另一個(gè)基于kraken.js 使用 express, dust.js 和其他的開(kāi)源代碼。這個(gè)應(yīng)用程序包含了3套路由,并且每一套路由2個(gè)或者5個(gè)請(qǐng)求,數(shù)據(jù)是通過(guò)Dust去渲染頁(yè)面的。

在我們的測(cè)試路由中,我們收集的數(shù)據(jù)是吞吐量和響應(yīng)時(shí)間
如何理解PayPal對(duì)Node.js的應(yīng)用和開(kāi)發(fā)

你能看到在我們的node.js 應(yīng)用程序中:

1)與Java應(yīng)用程序相比較,雙倍的每秒請(qǐng)求。更有趣的是,Node.js應(yīng)用程序是單核,而在Java中五核。我們希望進(jìn)一步增加這個(gè)鴻溝。
2) 35%的跌幅,平均響應(yīng)時(shí)間在同一頁(yè)。這導(dǎo)致響應(yīng)200ms的快一些用戶(hù)肯定會(huì)注意到。

對(duì)于這個(gè)結(jié)果我申明一下:我們的框架使用2種不同的應(yīng)用程序,它僅僅在不同的技術(shù)上的是一個(gè)對(duì)等測(cè)試。有可能你的區(qū)別更大。也就是說(shuō),我們非常激動(dòng)的看到了node.js表現(xiàn)出的性能。

Kraken:改變PayPal開(kāi)發(fā)文化的Node.js框架
PayPal(全球流行的網(wǎng)上支付服務(wù))公司發(fā)布了一款Node.js Web開(kāi)發(fā)框架——Kraken。

Kraken基于Express,Express是目前Node.js上最流行的MVC模式的Web開(kāi)發(fā)框架,通過(guò)提供一系列強(qiáng)大特性幫助開(kāi)發(fā)者快速創(chuàng)建各種Web應(yīng)用。而Kraken在Express的基礎(chǔ)上提供了更加穩(wěn)健的功能合集,支持本地化、環(huán)境配置、更加注重應(yīng)用程序安全等。

為什么會(huì)有 Kraken?

之前,PayPal 公司長(zhǎng)期存在著“非我所創(chuàng)”的文化,這導(dǎo)致 PayPal 采用新技術(shù)的態(tài)度很消極,項(xiàng)目開(kāi)發(fā)進(jìn)度也極其緩慢。正是由于 PayPal 行動(dòng)緩慢,其他支付服務(wù)商 Stripe 和 Square 趁機(jī)成長(zhǎng),逐漸撼動(dòng) PayPal 的市場(chǎng)地位。同時(shí),PayPal 當(dāng)時(shí)的開(kāi)發(fā)技術(shù)也已經(jīng)無(wú)法滿(mǎn)足快速開(kāi)發(fā)的需求,因?yàn)楫?dāng)時(shí)的開(kāi)發(fā)基本全是 Java,不需要用 Java 來(lái)實(shí)現(xiàn)的也會(huì)用 Java 完成。

2012 年 4 月,David Marcuss 成為 PayPal 的總裁,并任命工程師團(tuán)隊(duì)在 6 周內(nèi)完成支付系統(tǒng)的重寫(xiě),這是一個(gè)為 PayPal 帶來(lái)了 35 億美元收入的系統(tǒng)。最終,工程師團(tuán)隊(duì)用了 8 周時(shí)間完成了該項(xiàng)任務(wù),他們選擇了 Node.js 對(duì)系統(tǒng)進(jìn)行重新開(kāi)發(fā)。當(dāng)然,PayPal 的其他大量的子系統(tǒng)還需要整合到 Node.js 系統(tǒng),所以起初 Node.js 僅作為一個(gè)快速開(kāi)發(fā)原型架構(gòu)。

后來(lái),PayPal 越來(lái)越多的新開(kāi)發(fā)項(xiàng)目都逐漸采用 Node.js 和其他開(kāi)源軟件來(lái)完成,這就促成了一個(gè)可以快速開(kāi)發(fā) Web 應(yīng)用的 Kraken.js 項(xiàng)目的誕生。

下面我們對(duì) Kraken 的框架結(jié)構(gòu)和特點(diǎn)進(jìn)行簡(jiǎn)單的總結(jié)分析,希望能夠幫助大家更好地了解 Kraken。

Kraken 框架套件

Kraken 框架套件包括多個(gè)部分,Kraken.js 僅是該框架的主體部分。該框架還包括其他模塊(可獨(dú)立使用):

lusca:支持 Express 的應(yīng)用程序安全模塊
makara:支持 Dust.js 的國(guó)際化(i18n)模塊
Adaro:支持 Express 的一款 Dust.js 視圖渲染器
Kappa:NPM 代理插件
除了上述可以獨(dú)立使用的模塊之外,Kraken 套件還包括了一系列的依賴(lài)和實(shí)用工具:

Generator-kraken:Yeoman 生成器
Enrouten:用于 Express 的路由(route)配置中間件(初始化與配置模塊)
Kraken-devtools:Kraken 應(yīng)用程序開(kāi)發(fā)所需的工具合集


Kraken的特點(diǎn)

通過(guò)前面的介紹,我們已經(jīng)基本了解了 Kraken 究竟是怎么一回事兒,那 Kraken 到底具有哪些吸引開(kāi)發(fā)者的特點(diǎn)呢?

1. 項(xiàng)目結(jié)構(gòu)清晰

Kraken 將生成的項(xiàng)目的配置、內(nèi)容和模板、路由邏輯(routing logic)放在了不同的位置,方便開(kāi)發(fā)者對(duì)文件進(jìn)行組織和管理。下面,我們?cè)敿?xì)了解下 Kraken 所創(chuàng)建項(xiàng)目的基本結(jié)構(gòu):

/config,存放應(yīng)用程序和中間件配置
/controllers,控制器
/lib,存放開(kāi)發(fā)者自定義的庫(kù)文件和其他代碼
/locales,特定語(yǔ)言?xún)?nèi)容
/models,模型
/public,公共的網(wǎng)絡(luò)資源
/public/templates,服務(wù)器和瀏覽器端模板
/test,存放單元和功能測(cè)試用例等
index.js,應(yīng)用程序入口文件
隨著項(xiàng)目的不斷成長(zhǎng),這種組織方式和策略對(duì)開(kāi)發(fā)者來(lái)說(shuō)會(huì)更加友好。

2. 良好平衡開(kāi)發(fā)環(huán)境與生產(chǎn)環(huán)境

Kraken 的配置文件為 /config/app.json,它會(huì)在運(yùn)行時(shí)加載文件中包含的鍵值對(duì)。全部的應(yīng)用程序配置均存放在這一個(gè)文件中,大大方便了開(kāi)發(fā)者。/config/middleware.json 則是自定義的中間件配置文件。

說(shuō)起開(kāi)發(fā)環(huán)境與生產(chǎn)環(huán)境,二者通常在端口號(hào)、主機(jī)名等方面的參數(shù)設(shè)置會(huì)有不同,Kraken 允許創(chuàng)建開(kāi)發(fā)模式下使用的配置文件,如 /config/app.json 為生產(chǎn)環(huán)境下的配置,/config/app-development.json 則是開(kāi)發(fā)環(huán)境下的配置,然后可以通過(guò)自定義環(huán)境變量(定義環(huán)境變量 NODE_ENV 為 production 或 development)來(lái)控制要加載哪個(gè)配置文件。如此一來(lái),可以方便開(kāi)發(fā)者在生產(chǎn)環(huán)境和開(kāi)發(fā)環(huán)境進(jìn)行快速切換!

3. 注重安全

通過(guò)Lusca模塊來(lái)為安全保駕護(hù)航,并遵循OWASP安全原則,同時(shí)也默認(rèn)為全部調(diào)用啟用了幾個(gè)請(qǐng)求/響應(yīng)頭文件:

跨站請(qǐng)求偽造(CSRF)標(biāo)頭
內(nèi)容安全策略(CPS)標(biāo)頭
隱私優(yōu)先項(xiàng)目平臺(tái)(P3P)標(biāo)頭
X-FRAME-OPTIONS 防止點(diǎn)擊劫持
4. 其他

同時(shí),它還有下面幾個(gè)特點(diǎn):

路由(route)與邏輯(logic)分離:方便程序運(yùn)行失敗時(shí)快速鎖定問(wèn)題。
模板(template)共用:Kraken 選用 Dust 作為模板語(yǔ)言,同時(shí)在服務(wù)器端和客戶(hù)端使用了同一個(gè)模板,如此一來(lái),就可以做到代碼復(fù)用。
支持本地化: Kraken 可以在運(yùn)行時(shí)基于請(qǐng)求上下文來(lái)加載內(nèi)容包(content bundle),所以在模板渲染之前就可以通過(guò)添加上下文來(lái)給用戶(hù)提供相應(yīng)的本地語(yǔ)言支持,大大增強(qiáng)了應(yīng)用的友好性。
示例與文檔

關(guān)于 Kraken,官方給出了下面兩個(gè)示例,可以幫助大家學(xué)習(xí)和了解:

例一:本地化與國(guó)際化:給 Web 應(yīng)用增加多語(yǔ)言支持,讓各地用戶(hù)能夠用當(dāng)?shù)卣Z(yǔ)言來(lái)使用 Web 應(yīng)用
例二:部署中間件:創(chuàng)建一個(gè)網(wǎng)頁(yè)計(jì)數(shù)器,為大家解釋在應(yīng)用生命周期中如何部署中間件
開(kāi)源項(xiàng)目

Kraken 是一款開(kāi)源項(xiàng)目(分發(fā)協(xié)議為Apache License v2.0),大家都可以對(duì)該項(xiàng)目進(jìn)行 Fork 和提交修改。它也提供了一份簡(jiǎn)潔的使用文檔。項(xiàng)目源碼和文檔均可在Github頁(yè)面進(jìn)行查看。

最后

任何一個(gè)項(xiàng)目的誕生都有其產(chǎn)生的背景,也必然有相應(yīng)的需求驅(qū)動(dòng)。正如 Kraken,正是由于 PayPal 為了滿(mǎn)足其快速開(kāi)發(fā) Web 應(yīng)用的強(qiáng)烈需求,才選擇了 Node.js,才有了這個(gè)項(xiàng)目。

同時(shí),我們也需要注意工程師團(tuán)隊(duì)中存在的“非我所創(chuàng)”文化,對(duì)于新技術(shù)要采取積極的態(tài)度,不能一成不變,否則將給企業(yè)發(fā)展帶來(lái)阻礙。

到此,相信大家對(duì)“如何理解PayPal對(duì)Node.js的應(yīng)用和開(kāi)發(fā)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

分享標(biāo)題:如何理解PayPal對(duì)Node.js的應(yīng)用和開(kāi)發(fā)
網(wǎng)站地址:http://bm7419.com/article42/pssghc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站商城網(wǎng)站、企業(yè)網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)公司響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司