新聞中心
nodejs應(yīng)該學(xué)習(xí)哪些框架?
分享nodejs幾個好用的框架

獨山ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
第一名: express 50.4k (2010年1月發(fā)布)目前star 和下載量最高的老牌框架。Express 是一款基于Node.js以及Chrome V8引擎,快速、極簡的JS服務(wù)端開發(fā)框架,它提供了用來開發(fā)強壯的 Web/移動應(yīng)用,以及 API 的所有功能。并且開發(fā)人員還能夠方便地為它開發(fā)插件和擴展,從而增加 Express 的能力。第二名:meteor 42k (2012年發(fā)布)Meteor是一個基于nodejs和mongodb數(shù)據(jù)庫的實時web框架。你可以用js搞定客戶端、服務(wù)端的開發(fā)。另外,客戶端、服務(wù)端的界限被極大的模糊??蛻舳说慕缑娓?wù)端的數(shù)據(jù)是雙向綁定的,修改服務(wù)端的數(shù)據(jù),用戶界面會隨著更新;你也可以在客戶端直接修改服務(wù)端的數(shù)據(jù)庫。meteor/meteorgithub.com第三名: nest.js 30.8k (2017年11月發(fā)布)作為目前上榜框架中發(fā)布最晚,也是star 最高且增長最快的 typescript 后端框架。Nest 是一個用于構(gòu)建高效,可擴展的 Node.js 服務(wù)器端應(yīng)用程序的框架。它使用漸進式 JavaScript,內(nèi)置并完全支持 TypeScript(但仍然允許開發(fā)人員使用純 JavaScript 編寫代碼)并結(jié)合了 OOP(面向?qū)ο缶幊蹋現(xiàn)P(函數(shù)式編程)和 FRP(函數(shù)式響應(yīng)編程)的元素。Nest 框架底層 HTTP 平臺默認(rèn)是基于 Express 實現(xiàn)的,所以無需擔(dān)心第三方庫的缺失。 Nest 旨在成為一個與平臺無關(guān)的框架。 通過平臺,可以創(chuàng)建可重用的邏輯部件,開發(fā)人員可以利用這些部件來跨越多種不同類型的應(yīng)用程序。 從技術(shù)上講,Nest 可以在創(chuàng)建適配器后使用任何 Node HTTP 框架。 Nest 提供了一個開箱即用的應(yīng)用程序架構(gòu),允許開發(fā)人員和團隊創(chuàng)建高度可測試,可擴展,松散耦合且易于維護的應(yīng)用程序。 中文文檔docs.nestjs.cn第四名: koa 30k (2013年11月發(fā)布)Koa框架由Express原班人馬打造,它的核心是 ES6 的 Generator。Koa 使用 Generator 來實現(xiàn)中間件的流程控制,使用try/catch 來增強異常處理,同時在 Koa 框架中你再也看不到復(fù)雜的 callback 回調(diào)了。Koa框架本身非常小,只打包了一些必要的功能,但是它本身通過良好的模塊化組織,讓開發(fā)人員可以按照自己的想法來實現(xiàn)一個擴展性非常好的應(yīng)用。第五名: sails 21.6k (2012年7月)Sails 作為一個非常穩(wěn)固的 Node.js 框架,提供了建立任何規(guī)模的 Web 應(yīng)用所需要的所有功能。Sails.js 在底層使用了 Express框架來提供對 HTTP 請求的處理,同時使用 框架來處理WebSocket 請求。同時作為一個前端應(yīng)用開發(fā)框架,它允許開發(fā)人員選擇他/她熟悉的技術(shù)來開發(fā)應(yīng)用。同時 Sails.js 也通過 waterline 框架實現(xiàn)了 ORM 功能。通過這個功能,你的應(yīng)用程序可以在不進行大的修改的前提下,就可以從一個后端數(shù)據(jù)庫,切換到另外一個后端數(shù)據(jù)庫(也可以是一個NoSQL數(shù)據(jù)庫)。Sails 特別適合用來開發(fā)對數(shù)據(jù)的實時更新有較高要求的應(yīng)用,比如多人棋類游戲,單頁Web應(yīng)用等等。如果你對 Ruby, Django 或者 Zend 有一定的了解,那么你將非常容易理解Sail中的概念。第六名:Egg 16.2k (2016年7月)Egg是基于Koa,由阿里Node.js團隊封裝的企業(yè)級Web應(yīng)用解決方案,以約束和規(guī)范化團隊開發(fā),幫助開發(fā)團隊和開發(fā)人員降低開發(fā)和維護成本為核心設(shè)計理念的優(yōu)秀解決方案。Egg已經(jīng)被用在阿里多條產(chǎn)品線(包括螞蟻)上,已經(jīng)證明它的安全和可靠性,可以放心用。第七名: fastify 16k (2016年10月)目前性能最好的 node.js 框架。Fastify是一個高度專注于以最少開銷和強大的插件架構(gòu),使用簡單,擴展靈活,包含了基于擴展的開發(fā), 同時官方為了方便開發(fā)plugin,提取了通用部分,方便模塊化,同時我們可以在路由中添加schema 方便的進行數(shù)據(jù)的校驗(基于json schema),生態(tài)也很不錯,已經(jīng)提供了很多擴展插件。第八名: loopback 13.2k (2013年6月)LoopBack開發(fā)框架是一套Node.js模塊集,可以用獨立使用或整合使用來快速開發(fā)REST API接口程序。背后是IBM的子公司在支持。LoopBack應(yīng)用可以通過模型API來跟數(shù)據(jù)交互,本地通訊在Node.js內(nèi)部完成,遠程通訊使用REST客戶端API,如與原生客戶端iOS、Anroid和Html5等進行通訊。第九名: hapi 12.8k (2012年8月)HapiJS是一個開源的、基于Node.js的應(yīng)用框架,它適用于構(gòu)建應(yīng)用程序和服務(wù),其設(shè)計目標(biāo)是讓開發(fā)者把精力集中于開發(fā)可重用的應(yīng)用程序的業(yè)務(wù)邏輯,向開發(fā)者提供構(gòu)建應(yīng)用程序業(yè)務(wù)邏輯所需的基礎(chǔ)設(shè)施。第十名: polemo 11k (2012年12月)網(wǎng)易開源的游戲后端框架。pomelo是一個游戲服務(wù)器框架,與以往單進程的游戲框架不同, 它是高性能、高可伸縮、分布式多進程的游戲服務(wù)器框架,并且使用很簡單。它包括基礎(chǔ)開發(fā)框架和一系列相關(guān)工具和庫,可以幫助開發(fā)者省去游戲開發(fā)中枯燥的重復(fù)勞動和底層邏輯工作,免除開發(fā)者的重造輪子,讓開發(fā)者可以更多地去關(guān)注游戲的具體邏輯,大大提高開發(fā)效率。Pomelo支持所有主流平臺的客戶端,并提供了客戶端的開發(fā)庫。覺得有幫助就一鍵三連哦~
一個SAAS系統(tǒng)服務(wù)平臺前后端?
該問題非常好,因為它代表了純粹開發(fā)技術(shù)類科技,但同時也從技術(shù)向運營服務(wù)的延伸。
任何SaaS系統(tǒng)的最終目的都是為入駐到SaaS系統(tǒng)的客戶服務(wù),為客戶提供價值的,而任何開發(fā)架構(gòu)都是為了讓SaaS能更好的實現(xiàn)、提供更好的服務(wù)的。
從系統(tǒng)開發(fā)需要達到的目的,我們追蹤溯源,列出SaaS平臺需要實現(xiàn)的目標(biāo):
實現(xiàn)入駐客戶的功能需求滿足SaaS系統(tǒng)本身的運營需求實現(xiàn)SaaS可擴展性明白需要實現(xiàn)的目標(biāo)后,我們再將相關(guān)技術(shù)框架做個歸納列表:
限于篇幅,每個技術(shù)框架介紹請讀者自行查閱網(wǎng)上資料。此處只介紹選擇最佳框架的思路。
1、根據(jù)SaaS系統(tǒng)入駐客戶規(guī)模和可能的數(shù)據(jù)量大小,來選擇技術(shù)開發(fā)架構(gòu)SaaS開發(fā)系統(tǒng)技術(shù)開發(fā)架構(gòu),首先需要考慮系統(tǒng)的可擴展性,作為SaaS系統(tǒng),本身具有行業(yè)特性,不僅僅是為某一單獨客戶的自定義,而是需要考慮一類主要需求都相同的客戶,實現(xiàn)大家的共性需求,如:CRM的SaaS平臺,財務(wù)管理的SaaS平臺,銷售管理的SaaS平臺等,在此基礎(chǔ)之上,如果有特別特殊的客戶,在根據(jù)客戶的個性化需求,提供企業(yè)自定義功能。
同時SaaS系統(tǒng)需要根據(jù)技術(shù)發(fā)展、行業(yè)需求演化等因素,能通過最小的代價實現(xiàn)版本升級迭代,大家都知道,只要在技術(shù)架構(gòu)不變更的情況下,其他技術(shù)功能的升級迭代成本相對都是比較小的。如何選擇一個合適的技術(shù)開發(fā)架構(gòu),以滿足將來一段時間內(nèi)的用戶需求,就是SaaS系統(tǒng)設(shè)計時需要考慮的問題??蓮囊韵聨讉€方面來選擇:
(1)先明確后臺采用
.Net
技術(shù)還是Java技術(shù);(2)確定表現(xiàn)形式后,選擇前端框架。Web前端是必須得,如果SaaS系統(tǒng)需要移動端,則前端還需要選擇移動端開發(fā)框架;
(3)后端框架目前主流采用Java框架居多,有助于將來框架升級和自定義維護;
(4)前端框架如果涉及移動端,建議采用原生 + 混合的,對一些需要動態(tài)Web頁面,采用H5相應(yīng)的框架;
2、根據(jù)入駐客戶功能需求,選擇對應(yīng)的框架入駐SaaS系統(tǒng)客戶,都屬于同類功能需求的用戶,但根據(jù)客戶規(guī)模不同,對SaaS設(shè)計和框架選擇不同:
(1)如果用戶量大,對性能要求高,建議后端增加Redis框架,做好內(nèi)存管理;
(2)如果SaaS系統(tǒng)在提供服務(wù)前一年時間,系統(tǒng)需要修改或增加的地方會相對多一些,此時建議后端加上Log4j,有效管理輸出日志,根據(jù)日志快速定位和分析功能點情況;
(3)如果客戶離散化程度較高,行業(yè)非標(biāo)準(zhǔn),建議在Spring的基礎(chǔ)上,采用目前主流的Spring Boot微服務(wù)技術(shù)框架;
(4)如果采用Java開發(fā),選擇Maven框架作為項目管理、自動部署的技術(shù)框架,可大大提高開發(fā)便捷性;
3、技術(shù)框架的選擇,要盡量滿足SaaS系統(tǒng)運營服務(wù)要求SaaS系統(tǒng)的核心是后一個S(即:Service),在滿足系統(tǒng)功能開發(fā)的基礎(chǔ)上,需要一整套和前端功能相匹配的SaaS系統(tǒng)運營服務(wù)系統(tǒng),該系統(tǒng)對任何SaaS運營來講都是不同的,不同的行業(yè)需要針對提供不同的服務(wù),但有以下幾點需要在選擇技術(shù)架構(gòu)時考慮:(1)需要有開放接口功能,便于對接第三方系統(tǒng),如:呼叫中心、服務(wù)器監(jiān)控平臺等;
(2)對于運營系統(tǒng),客戶服務(wù)及時性和有效性比較重要,需要在消息機制上進行優(yōu)化,建議后臺加入RabbitMQ框架,對用戶的咨詢、投訴和其他服務(wù)做好消息隊列處理;
(3)SaaS后臺服務(wù)由于屬地關(guān)系,可能會設(shè)立各地方的服務(wù)團隊,因此,系統(tǒng)會涉及到分布式部署的問題,此時Dubbo分布式服務(wù)框架就可以很好的解決將來SaaS系統(tǒng)大規(guī)模分布式的情況。
以上三個方面權(quán)衡后,還需要考慮是否需要中臺,根據(jù)筆者經(jīng)歷,普通規(guī)模(如:入駐用戶量在10萬以下)的SaaS系統(tǒng),使用中臺的價值并不大,但大規(guī)模系統(tǒng),是有必要開發(fā)自己的中臺的,關(guān)于中臺的開發(fā)和選擇,技術(shù)開發(fā)商和前后端開發(fā)是相似的,此處不再深入。
服務(wù)器三大框架?
從系統(tǒng)架構(gòu)來看,目前的商用服務(wù)器大體可以分為三類,即對稱多處理器結(jié)構(gòu)(SMP:Symmetric Multi-Processor),非一致存儲訪問結(jié)構(gòu)(NUMA:Non-Uniform Memory Access),以及海量并行處理結(jié)構(gòu)(MPP:Massive Parallel Processing)。
一、SMP(Symmetric Multi-Processor)
所謂對稱多處理器結(jié)構(gòu),是指服務(wù)器中多個CPU對稱工作,無主次或從屬關(guān)系。各CPU共享相同的物理內(nèi)存,每個 CPU訪問內(nèi)存中的任何地址所需時間是相同的,因此SMP也被稱為一致存儲器訪問結(jié)構(gòu)(UMA:Uniform Memory Access)。對SMP服務(wù)器進行擴展的、使用更快的CPU、增加CPU、擴充I/O(槽口數(shù)與總線數(shù))以及添加更多的外部設(shè)備(通常是磁盤存儲)。
SMP服務(wù)器的主要特征是共享,系統(tǒng)中所有資源(CPU、內(nèi)存、I/O等)都是共享的。也正是由于這種特征,導(dǎo)致了SMP服務(wù)器的主要問題,那就是它的擴展能力非常有限。對于SMP服務(wù)器而言,每一個共享的環(huán)節(jié)都可能造成SMP服務(wù)器擴展時的瓶頸,而最受限制的則是內(nèi)存。由于每個CPU必須通過相同的內(nèi)存總線訪問相同的內(nèi)存資源,因此隨著CPU數(shù)量的增加,內(nèi)存訪問將迅速增加,最終會造成CPU資源的浪費,使 CPU性能的有效性大大降低。實驗證明,SMP服務(wù)器CPU利用率最好的情況是2至4個CPU。
二、NUMA(Non-Uniform Memory Access)
由于SMP在擴展能力上的限制,人們開始探究如何進行有效地擴展從而構(gòu)建大型系統(tǒng)的技術(shù),NUMA就是這種努力下的結(jié)果之一。利用NUMA技術(shù),可以把幾十個CPU(甚至上百個CPU)組合在一個服務(wù)器內(nèi)。
NUMA服務(wù)器的基本特征是具有多個CPU模塊,每個CPU模塊由多個CPU(如4個)組成,并且具有獨立的本地內(nèi)存、I/O槽口等。由于其節(jié)點之間可以通過互聯(lián)模塊(如稱為Crossbar Switch)進行連接和信息交互,因此每個CPU可以訪問整個系統(tǒng)的內(nèi)存(這是NUMA系統(tǒng)與MPP系統(tǒng)的重要差別)。顯然,訪問本地內(nèi)存的速度將遠遠高于訪問遠地內(nèi)存(系統(tǒng)內(nèi)其它節(jié)點的內(nèi)存)的速度,這也是非一致存儲訪問NUMA的由來。由于這個特點,為了更好地發(fā)揮系統(tǒng)性能,開發(fā)應(yīng)用程序時需要盡量減少不同CPU模塊之間的信息交互。利用NUMA技術(shù),可以較好地解決原來SMP系統(tǒng)的擴展問題,在一個物理服務(wù)器內(nèi)可以支持上百個CPU。比較典型的NUMA服務(wù)器的例子包括HP的Superdome、SUN15K、IBMp690等。
但NUMA技術(shù)同樣有一定缺陷,由于訪問遠地內(nèi)存的延時遠遠超過本地內(nèi)存,因此當(dāng)CPU數(shù)量增加時,系統(tǒng)性能無法線性增加。如HP公司發(fā)布Superdome服務(wù)器時,曾公布了它與HP其它UNIX服務(wù)器的相對性能值,結(jié)果發(fā)現(xiàn),64路CPU的Superdome (NUMA結(jié)構(gòu))的相對性能值是20,而8路N4000(共享的SMP結(jié)構(gòu))的相對性能值是6.3。從這個結(jié)果可以看到,8倍數(shù)量的CPU換來的只是3倍性能的提升。
三、MPP(Massive Parallel Processing)
和NUMA不同,MPP提供了另外一種進行系統(tǒng)擴展的,它由多個SMP服務(wù)器通過一定的節(jié)點互聯(lián)網(wǎng)絡(luò)進行連接,協(xié)同工作,完成相同的任務(wù),從用戶的角度來看是一個服務(wù)器系統(tǒng)。其基本特征是由多個SMP服務(wù)器(每個SMP服務(wù)器稱節(jié)點)通過節(jié)點互聯(lián)網(wǎng)絡(luò)連接而成,每個節(jié)點只訪問自己的本地資源(內(nèi)存、存儲等),是一種完全無共享(Share Nothing)結(jié)構(gòu),因而擴展能力最好,理論上其擴展無限制,目前的技術(shù)可實現(xiàn)512個節(jié)點互聯(lián),數(shù)千個CPU。目前業(yè)界對節(jié)點互聯(lián)網(wǎng)絡(luò)暫無標(biāo)準(zhǔn),如 NCR的Bynet,IBM的SPSwitch,它們都采用了不同的內(nèi)部實現(xiàn)機制。但節(jié)點互聯(lián)網(wǎng)僅供MPP服務(wù)器內(nèi)部使用,對用戶而言是透明的。
在MPP系統(tǒng)中,每個SMP節(jié)點也可以運行自己的操作系統(tǒng)、數(shù)據(jù)庫等。但和NUMA不同的是,它不存在異地內(nèi)存訪問的問題。換言之,每個節(jié)點內(nèi)的CPU不能訪問另一個節(jié)點的內(nèi)存。節(jié)點之間的信息交互是通過節(jié)點互聯(lián)網(wǎng)絡(luò)實現(xiàn)的,這個過程一般稱為數(shù)據(jù)重分配(Data Redistribution)。
但是MPP服務(wù)器需要一種復(fù)雜的機制來調(diào)度和平衡各個節(jié)點的負載和并行處理過程。目前一些基于MPP技術(shù)的服務(wù)器往往通過系統(tǒng)級軟件(如數(shù)據(jù)庫)來屏蔽這種復(fù)雜性。舉例來說,NCR的Teradata就是基于MPP技術(shù)的一個關(guān)系數(shù)據(jù)庫軟件,基于此數(shù)據(jù)庫來開發(fā)應(yīng)用時,不管后臺服務(wù)器由多少個節(jié)點組成,開發(fā)人員所面對的都是同一個數(shù)據(jù)庫系統(tǒng),而不需要考慮如何調(diào)度其中某幾個節(jié)點的負載。
需要掌握哪些技能?
我見過的架構(gòu)師有兩種,一種是碼農(nóng)一步步成長蛻變成的架構(gòu)師,一種是PPT架構(gòu)師。
我希望大家都能成為前者。
我現(xiàn)在差不多能算半個架構(gòu)師,為啥是半個,因為本身是要帶項目的,但是也會負責(zé)產(chǎn)品線內(nèi)其他項目的架構(gòu)設(shè)計和評審工作,姑且算是半個吧。我分享一下我的看法,如果有不對的地方歡迎大家留言指正。
技術(shù)單位中,不管是我這種半個架構(gòu),還是轉(zhuǎn)職的架構(gòu),都是技術(shù)出身的,甚至現(xiàn)在也會寫一些代碼,所以技術(shù)能力是必不可少的。
深入了解一門語言,對其他的一些編程語言也了解過一些。
編碼能力一定要過關(guān),有些時候甚至?xí)蠹軜?gòu)師親自上陣寫代碼的。
深入的學(xué)習(xí)過一些主流的框架,有些甚至需要研究到源碼的級別。架構(gòu)嘛,技術(shù)一定得是要過關(guān)的。成長的道路上,誰還沒研究過一些源碼。
熟悉大多數(shù)流行的框架、中間件,達不到深入研究源碼的程度,但是至少使用過、優(yōu)缺點是什么、使用場景是什么。這樣在架構(gòu)設(shè)計的過程中,可以根據(jù)實際的需要,選擇合適的技術(shù)。
業(yè)務(wù)在一個業(yè)務(wù)領(lǐng)域,有著一定的業(yè)務(wù)知識儲備。比如一個銀行業(yè)務(wù)的機構(gòu)師,去一個電商網(wǎng)站做架構(gòu)設(shè)計,肯定玩不轉(zhuǎn)喲。
需求分析能力:所有的機構(gòu)設(shè)計,都是在了解用戶的業(yè)務(wù)流程之后,才開始做的。要充分的理解用戶到底想要什么功能,再去設(shè)計怎么實現(xiàn)這些功能。甚至有些時候用戶自己都不知道要什么,需要架構(gòu)幫他們?nèi)ニ伎?、去設(shè)計。
業(yè)務(wù)抽象能力:業(yè)務(wù)功能最后要是要用代碼來實現(xiàn),架構(gòu)師需要對系統(tǒng)中的各種子系統(tǒng)、模塊,以及它們之間的關(guān)系、如何交互等行為,進行抽象;用知識和經(jīng)驗來解決實際的業(yè)務(wù)問題。
其他溝通能力:和用戶、需求溝通,和領(lǐng)導(dǎo)溝通,和項目經(jīng)理溝通,和開發(fā)人員溝通。
文檔和畫圖能力:溝通明白了,還是要落實在文檔上,特別是畫圖的能力,很重要,趕緊下一個Visio好好練練。
提出問題、提出質(zhì)疑的能力:我就屬于聽到用戶的需求,容易說“行行行,好好好,可以實現(xiàn)”。其實用戶提的需求不一定合理,可能花費大量的時間去實現(xiàn),最后卻不是他們真正想要的東西,要多質(zhì)疑他們,給他們提更好的解決方案。
學(xué)習(xí)能力:保持一定的技術(shù)敏感度,需要不斷的學(xué)習(xí)新的技術(shù)。比如十年前項目緩存都用的是ehcache,現(xiàn)在都用memcached、redis,說不定再過幾年又有更好的解決方案了。
希望我的回答能夠幫助到你!
網(wǎng)頁名稱:nodejs應(yīng)該學(xué)習(xí)哪些框架?(一個SAAS系統(tǒng)服務(wù)平臺前后端?)
當(dāng)前URL:http://m.fisionsoft.com.cn/article/cdpsjid.html


咨詢
建站咨詢
