如何快速實(shí)現(xiàn)鯤鵬彈性云服務(wù)器的Node.js部署和高可用性?
作者簡(jiǎn)介:知乎大V“王老師(化名)”,中國(guó)科學(xué)院計(jì)算技術(shù)研究所計(jì)算機(jī)博士,主要進(jìn)行遷移學(xué)習(xí)、機(jī)器學(xué)習(xí)方面的算法與應(yīng)用研究。畢業(yè)后加入微軟亞洲研究院,擔(dān)任研究員職務(wù)。
“Node 開發(fā)者容易面臨的前三大困惑分別是異步編程、事件驅(qū)動(dòng)以及 Debug。同時(shí),文檔是大家最期待的資源,新人對(duì)視頻教程和免費(fèi)在線課程的呼聲最高。”這份《2020 年 Node.js 開發(fā)者調(diào)查報(bào)告》給出的信息,也正是當(dāng)下很多開發(fā)者心中的疑惑。如何學(xué)習(xí)和進(jìn)階Node.js?如何讓自己寫的代碼順滑無bug?如何才能找到易用和高可用的平臺(tái)呢?今天我來提點(diǎn)自己的拙見,看完覺得有用的老鐵希望直接三連(球球你們不要”下次一定“)。
JavaScript相信大家都不陌生,尤其是對(duì)于前端工程師而言,更是必備技能。傳統(tǒng)意義上的 JavaScript 是運(yùn)行在瀏覽器上的腳本語言。而Node.js 是一個(gè)運(yùn)行在服務(wù)端的框架,它的底層使用了 V8 引擎。我們知道 Apache + PHP 以及 Java 的 Servlet 都可以用來開發(fā)動(dòng)態(tài)網(wǎng)頁,Node.js 的作用與他們類似,只不過是使用 JavaScript 來開發(fā)。他提供了底層服務(wù)器功能環(huán)境,包括二進(jìn)制數(shù)據(jù)操作、文件系統(tǒng) I/O、數(shù)據(jù)庫訪問、網(wǎng)絡(luò)訪問等。它的特性使其在現(xiàn)存的多種成熟服務(wù)器語言中脫穎而出。
同樣聲名鵲起的還有華為云。近年來,華為云已經(jīng)成為市場(chǎng)上的一股不容小覷的力量。尤其是前段時(shí)間,華為云鯤鵬生態(tài)帶著鋪天蓋地的宣傳橫空出現(xiàn),對(duì)其的評(píng)論的風(fēng)向也是花樣繁多,那么華為云鯤鵬彈性云服務(wù)器的表現(xiàn)究竟如何呢?本文將會(huì)帶大家親自感受一下在華為云鯤鵬彈性云服務(wù)器的 CentOS 系統(tǒng)上安裝、部署、測(cè)試 Node.js 項(xiàng)目,以及其高可用性的探索。
話不多說,我們走起。
Node.js部署環(huán)境配置全流程
首先,輸入以下命令”LANG=en_us.UTF-8 ssh root@EIP“登陸華為云,需要使用華為云服務(wù)器 ECS 的公網(wǎng) IP 替換命令中的 EIP
一般本地服務(wù)器時(shí)可以直接獲取公網(wǎng)IP,那么在華為云鯤鵬彈性云服務(wù)器,如何獲取公網(wǎng) IP 呢?而在云服務(wù)器中,彈性公網(wǎng) IP 地址則可以通過點(diǎn)擊“控制臺(tái)”->“服務(wù)列表”->“計(jì)算”->“彈性云服務(wù)器 ECS”進(jìn)入服務(wù)器列表,進(jìn)行查看并復(fù)制。
在登陸時(shí)需要注意的是,輸入密碼的時(shí)候終端是不會(huì)有展示的,所以一定要確保密碼是正確的。
登陸成功后顯示的界面如下。
然后就可以下載 node.js 安裝包了,執(zhí)行下載命令
解壓文件
為 node 和 npm 建立軟連接,建立完軟連接后可以直接查看 node 和 npm 的版本,出現(xiàn)下圖即表示安裝成功。
使用代碼如下:ln -s /root/node-v10.16.0-linux-arm64/bin/node /usr/local/bin/node
ln -s /root/node-v10.16.0-linux-arm64/bin/npm /usr/local/bin/npm
其實(shí)到這里Node.js服務(wù)器環(huán)境就已經(jīng)部署完畢了,可以直接運(yùn)行項(xiàng)目代碼 。但如果服務(wù)器上運(yùn)行多個(gè)項(xiàng)目時(shí),如果只安裝一個(gè)全局的node.js版本,則在升級(jí)時(shí)可能會(huì)遇到很多問題。所以我們需要使用 nvm 版本管理器安裝 node.js 多版本,這并不是一個(gè)必須的步驟,但是依然值得嘗試。
首先,下載 NVM 版本管理器,并在終端中輸入以下命令
git clone https://codehub.devcloud.cn-north-4.huaweicloud.com/Demo01087/nvm.git ~/.nvm && cd ~/.nvm
然后激活 NVM 版本管理器,并將其追加到 profile 文件下
echo ". ~/.nvm/nvm.sh" >> /etc/profile
NVM修改完畢后,就可以安裝不同版本的node了,例如下圖安裝12.3.0的node包
node安裝完畢后,就可以在服務(wù)器上運(yùn)行腳本了。為了簡(jiǎn)化流程,我選擇運(yùn)行一個(gè)簡(jiǎn)單的腳本,利用node起一個(gè)服務(wù)器,部署在3000端口上。
服務(wù)器啟動(dòng)后,要想外網(wǎng)能夠訪問還需要再控制臺(tái)配置下安全組規(guī)則。
到這里node.js的部署環(huán)境配置實(shí)測(cè)就已經(jīng)結(jié)束了。來展示一下我的成品。
這次比較不按套路出牌,沒有“hello world”
從前端語言到運(yùn)維實(shí)踐
在此次實(shí)踐中,我們可以簡(jiǎn)單點(diǎn)評(píng)一下大鯤鵬帶給我的直觀的感知。首先,它對(duì)于新用戶的友好度是很高的,以Node.js的部署環(huán)境配置來看,云端實(shí)驗(yàn)室中的鯤鵬實(shí)驗(yàn)中配置了相關(guān)的實(shí)驗(yàn)和ABC級(jí)別的指導(dǎo)教程,用戶可以根據(jù)指導(dǎo)一步步實(shí)現(xiàn)環(huán)境配置,即便是小白程序員也能輕松上手;代碼一鍵復(fù)制的功能對(duì)于并不熟悉linux命令的開發(fā)者而言也算是細(xì)致入微了。
隨著競(jìng)爭(zhēng)的加速,對(duì)于前后端的程序員都需要了解一些運(yùn)維部署的知識(shí),鯤鵬學(xué)院則提供了這樣一個(gè)方便大家學(xué)習(xí)的平臺(tái)。在這上面你能方便的獲得小白開發(fā)者、鯤鵬開發(fā)者的相關(guān)課程,并且在完成了各類課程的學(xué)習(xí)之后,可以通過各類微認(rèn)證和職業(yè)認(rèn)證,來檢驗(yàn)自身的學(xué)習(xí)成果,并且還能通過官方認(rèn)證還能獲取就業(yè)優(yōu)先推薦機(jī)會(huì),實(shí)用性這里必須加粗標(biāo)紅。
對(duì)于企業(yè)來說,把網(wǎng)站部署在云端能夠減少大量的運(yùn)維負(fù)擔(dān),充分利用華為云的基礎(chǔ)生態(tài)和平臺(tái)能力,可以減少建站部署的復(fù)雜程度,解放程序員雙手,讓大家不用禿頭改代碼收獲幸福人生;降低程序員和產(chǎn)品經(jīng)理的掐架頻率。
隨著網(wǎng)站用戶訪問量增大,系統(tǒng)服務(wù)很容易掛掉。例如微博突發(fā)熱搜,淘寶的雙十一等關(guān)鍵節(jié)點(diǎn)正是考驗(yàn)我們服務(wù)器能力的時(shí)候。很多大公司都會(huì)自研彈性負(fù)載均衡系統(tǒng),但是管理兩臺(tái)機(jī)器的復(fù)雜程度不是管理一臺(tái)機(jī)器的兩倍,甚至是8倍、10倍。這其中需要考慮防火墻、抗DDoS攻擊、監(jiān)控報(bào)警、日志打點(diǎn)、數(shù)據(jù)同步等一系列問題,其實(shí)是一個(gè)很復(fù)雜的事情。因此,對(duì)于更多的企業(yè)站點(diǎn)使用云服務(wù)廠商提供的彈性負(fù)載均衡系統(tǒng)會(huì)更加的簡(jiǎn)單便捷,節(jié)省成本。
基于ELB和AS服務(wù)的高可用性解析
隨著網(wǎng)站用戶訪問量增大,系統(tǒng)服務(wù)很容易掛掉。例如微博熱門事件,淘寶的雙十一等關(guān)鍵節(jié)點(diǎn)正是考驗(yàn)我們服務(wù)器能力的時(shí)候。很多大公司都會(huì)自研彈性負(fù)載均衡系統(tǒng),但是管理兩臺(tái)機(jī)器的復(fù)雜程度不是管理一臺(tái)機(jī)器的兩倍,甚至是8倍、10倍。這其中需要考慮防火墻、抗DDoS攻擊、監(jiān)控報(bào)警、日志打點(diǎn)、數(shù)據(jù)同步等一系列問題,其實(shí)是一個(gè)很復(fù)雜的事情。所以,對(duì)于更多的企業(yè)站點(diǎn)使用云服務(wù)廠商提供的彈性負(fù)載均衡系統(tǒng)會(huì)更加的簡(jiǎn)單便捷,節(jié)省成本。
首先了解什么是高可用性,高可用性是系統(tǒng)一種特征或者指標(biāo),通常是指提供一定性能上的服務(wù)運(yùn)行時(shí)間,高于平均正常時(shí)間段。反之,則消除系統(tǒng)服務(wù)不可用的時(shí)間。衡量系統(tǒng)是否滿足高可用,就是當(dāng)一臺(tái)或者多臺(tái)服務(wù)器宕機(jī)的時(shí)候,系統(tǒng)整體和服務(wù)依然正??捎?。
舉個(gè)例子,一些知名的網(wǎng)站保證 4 個(gè) 9 以上的可用性,也就是可用性超過 99.99%。那 0.01% 就是所謂故障時(shí)間的百分比。比如一些金融和電商網(wǎng)站都會(huì)對(duì)這些指標(biāo)有嚴(yán)格的要求。
彈性伸縮服務(wù)能夠在秒殺、搶購(gòu)等流量激增的情況下能夠確保服務(wù)器能夠動(dòng)態(tài)擴(kuò)容,滿足客戶的良好體驗(yàn)。比如下單服務(wù),當(dāng)流量如潮水般涌過來的時(shí)候,ELB會(huì)根據(jù)算法動(dòng)態(tài)的分配服務(wù)器資源,同時(shí)結(jié)合AS服務(wù)動(dòng)態(tài)擴(kuò)容服務(wù)器資源。
負(fù)載均衡是分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一。一般通過負(fù)載均衡,解決分布式系統(tǒng)的大流量、高并發(fā)和高可用的問題。
那么在華為云鯤鵬彈性云服務(wù)器中,是如何保持高可用性的呢?其大體流程如下圖所示:
1. 流量調(diào)度。ELB通過監(jiān)聽器檢查連接請(qǐng)求,跟進(jìn)調(diào)度算法定義的轉(zhuǎn)發(fā)策略將請(qǐng)求流量分發(fā)至后端服務(wù)器,起到了交通指揮官的作用,但是他更加的智能。
2. 健康檢查。判斷后端服務(wù)器的業(yè)務(wù)可用性,確保將請(qǐng)求發(fā)送到健康的的ECS上。如果發(fā)現(xiàn)服務(wù)有問題也會(huì)進(jìn)行及時(shí)摘除。
3. 會(huì)話保持。將一段時(shí)間內(nèi)來自同一用戶的請(qǐng)求轉(zhuǎn)發(fā)到相同的后端服務(wù)器,保障用戶訪問的連續(xù)性。
4. 彈性伸縮。可以根據(jù)訪問量自動(dòng)擴(kuò)展,保障業(yè)務(wù)靈活可用。例如上圖中提到的利用定時(shí)/周期策略觸發(fā)伸縮,當(dāng)cpu/內(nèi)存/入網(wǎng)流量等監(jiān)控指標(biāo)達(dá)到警告閥門也會(huì)觸發(fā)伸縮。
搭產(chǎn)業(yè)順風(fēng)車,走開發(fā)快速道
開發(fā)產(chǎn)業(yè)的一個(gè)典型特征就是活到老、學(xué)到老,五年前的JavaScript和現(xiàn)在相比堪稱天壤之別。研讀Node.js 使用報(bào)告,發(fā)現(xiàn) Node.js 的使用有許多的成長(zhǎng),而且,五年前的瀏覽器環(huán)境和現(xiàn)在的Node環(huán)境全然不同。在云時(shí)代,越來越多的語言創(chuàng)造了更多可能,也讓開發(fā)變得更加便捷。就像此次測(cè)試中,基于JavaScript、Python、Java等解釋型語言開發(fā)的應(yīng)用程序,其與CPU架構(gòu)并無相關(guān),因此將這類應(yīng)用程序移植到華為云鯤鵬彈性云服務(wù)器上之后,無需修改和重新編譯,都可以按照與x86一致的方式部署和運(yùn)行應(yīng)用程序即可,對(duì)開發(fā)者的幫助是顯而易見的。
語言的升級(jí)帶來了便捷,也帶來了一些新的趨勢(shì),越來越多企業(yè)將主體業(yè)務(wù)放到云端,越來越多的前端工程師關(guān)心并參與到后端和全棧的工作中去。開發(fā)需求升級(jí),各類開發(fā)者社區(qū)也便跟著升級(jí),而華為云鯤鵬社區(qū)便是一個(gè)這樣的平臺(tái),其能夠提供的技術(shù)能力不僅能夠解決企業(yè)業(yè)務(wù)需求,還能快速賦能開發(fā)者,實(shí)現(xiàn)快速成長(zhǎng)。開發(fā)者能方便的找到適合自己能力的相關(guān)開發(fā)課程來進(jìn)行學(xué)習(xí),學(xué)會(huì)使用這些更加高效的產(chǎn)品,讓自己的價(jià)值不斷上升,避免出現(xiàn)網(wǎng)傳“35歲被扼頸”的窘迫局面。
更為可觀的是,前端工程師遠(yuǎn)非云計(jì)算浪潮中最大的受益者。合理使用云服務(wù)器帶來的ELB、AS等能力,能夠讓運(yùn)維工程師從繁雜的工作中解脫出來,專注于系統(tǒng)的優(yōu)化。目前,包括華為云在內(nèi)的很多云服務(wù)能夠提供大量的基礎(chǔ)功能和運(yùn)維工具,這些能力能夠讓自己脫離機(jī)械式編程工作,而是在不斷的探索中發(fā)現(xiàn)更多高效、實(shí)用的工具,基于新的技術(shù)環(huán)境上實(shí)現(xiàn)適配性升級(jí),避免頻繁的重復(fù)造輪子,而是搭乘軟件行業(yè)的順風(fēng)車,走上真正的開發(fā)快速道。
鯤鵬開發(fā)者系列課程傳送門在此,良心知識(shí)不付費(fèi),參與回帖互動(dòng)還有獎(jiǎng)品拿,吐槽建議都闊以: http://suo.im/5t3Vgt