婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 美團酒店服務使用Node.js實現JavaScript全棧開發的經驗分享

美團酒店服務使用Node.js實現JavaScript全棧開發的經驗分享

熱門標簽:阿里機器人電銷 機器人電銷哪個牌子好 浙江呼叫中心外呼系統多少錢 清遠語音外呼系統平臺 地圖標注標記位置導航 電銷外呼系統罵人 地圖標注銷售好做嗎 地圖標注操作方法 廣西防封卡外呼系統原理是什么

前后端分離的背景
“前后端分離”顯然已不是什么新鮮的話題,Zakas在2013年10月份就曾發表過一篇博客《Node.js and the new web front-end》討論Node背景下新時代的前端。毫無疑問,Node的出現給JavaScript語言帶來了新的生機,也使得前端開發者有了更多的可能性。

前后端分離表面上看似乎是一場“圈地運動”,但實質上前后端分離是為了解決以往開發模式的一些詬病和痛點,同時也是迎合大的行業趨勢的明智之舉。我所在的美團酒店事業部去年7月份成立,新的業務、新的開發團隊,這一切使得我們的前后端分離推進的很徹底。截至目前,前端承載的所有業務和線上服務都是基于Node,生產環境已經有近20臺服務器。如此帶來的全新前后端協作方式能夠讓專業的人做專業的事,無論前端后端都能較之前更專注在自己擅長的方面。

開發模式、技術棧

傳統的開發模式只需要專注在多終端的呈現上(瀏覽器、WebView)。而現在,瀏覽器只是前端的其中一環,延伸出來的還有Node端的架構、服務的運維能力等。上圖是我們目前的服務架構:Nginx位于Node服務之前,用做負載均衡、服務調度、Gzip壓縮等。之后便是Node服務,我們通過PM2.5進行Node服務的Cluster部署和負載均衡(充分利用多核優勢),同時作為輕量的中間層,負責路由、Controllers、Views、以及視圖的渲染,數據的獲取通過RESTful的API接口使用JSON格式交互。而后端則只需要負責業務邏輯、數據存儲、Models,并為前端提供JSON數據即可。

這樣改變之后,Node端可以進行首屏渲染等頁面加載方面的優化,頁面渲染出來之后后續的交互、渲染都交由瀏覽器端的JavaScript代碼來完成,Node端的模板和瀏覽器端的模板大部分情況下都是相同的,所以我們需要考慮模板重用的問題。我們用Juicer替換了Express框架默認的模板引擎,Juicer是一個高效、輕量的前端 (Javascript) 模板引擎,效率和易用是它追求的目標。除此之外,它還可以運行在 Node.js 環境中。通過Juicer,可以解決Node端和瀏覽器端的模板、Helper復用問題。而且基于前后端分離的工程架構下,前端的代碼倉庫和后端隔離,前端獨立負責前端靜態資源文件、模板文件、Controller的維護和發布。

按照這樣重新定義前后端分工之后,前端可以做的事情較以往更多了,比如微信SDK的接入,因為微信JS SDK的使用需要在服務端進行簽名,所以現在我們不需要后端介入,前端完全可以獨立完成微信SDK的接入。此外像我們內部和商家端SSO登錄邏輯的接入都完全由前端獨立完成。

技術選型的思考
對于前端的技術選型,我們始終保持理性、擁抱的態度。我們不會為了盲目求新而引入新的技術,技術選型是針對我們目前大團隊的場景,為了解決以往協作過程中發現的一些痛點和不足。比如引入Node是為了改進前后端的工作流和效率,提升前后端的開發體驗。再比如目前我們項目中采用的Angular、React也是針對特定的業務場景,為了提升開發效率、增強代碼的可維護性。在我們的業務應用中,面向商家、后臺的一些增刪改查系統,Angular能夠顯著的提升開發效率,而React我們目前只是在面向用戶的PC端項目中在做一些嘗試和實踐。

帶來的挑戰
這樣的分工和架構模式在給前端帶來更多可能性、更多便利的同時,也帶來了不小的挑戰,相比傳統的前端角色而言,我們需要更多的關注線上服務的狀態,進程內存占用、CPU占用的詳細狀況,以及線上異常的監控等。在我們擁抱Node的同時,對前端的能力要求是更上一階的。一段看起來正常的JS代碼,在瀏覽器端和在Node端兩種不同的運行環境下,就可能會暴露出一些以往關注不到的問題,比如內存泄露:一個閉包或者一個用于緩存數據的對象,跟瀏覽器不同,Node對內存泄露十分敏感,因為線上應用有成千上萬甚至百萬計的流量,所以哪怕是一個字節的內存泄露也會造成內存堆積,從而導致垃圾回收過程耗時增加,應用響應緩慢,知道進程內存溢出,應用重啟或崩潰。

內存泄露問題的定位
以下是我們在生產環境遭遇的一個案例:最近發現線上服務的內存占用在服務重啟后會呈線性的增長,進程啟動18小時后,內存就已經占用接近1.6G左右,之后不久便會超過V8的內存限制導致服務重啟。從圖中可以看出,在修復之前內存使用情況一直在隨時間進行周期性的波動,波動的原因就是線上Node進程不斷的重啟導致的。

眾所周知,在V8的垃圾回收機制下,一般的代碼很少出現內存泄露的情況,但是一旦出現內存泄露往往較難排查。但造成內存泄露的本質原因只有一個,就是應當回收的對象沒有正常被回收,變成了老生代中的常駐對象。好在借助一些常見的排查工具可以幫助我們定位內存泄露的具體原因:

- v8-profiler
- node-heapdump
- node-mtrace
- dtrace
- node-memwatch
這里我們使用node-heapdump來在模擬訪問的條件下生成堆內存的snapshot,并通過Chrome的開發者調試工具對生成的snapshot文件進行分析。通過對比服務剛啟動時以及使用AB模擬并發訪問一段時間后的heapdump信息可以比較容易的定位到內存泄露的問題點:是因為Juicer默認開啟了cache,會默認對編譯后的模板進行緩存,因此隨著訪問的增長和并發請求,cache對象會持續增長且不被回收,于是關閉cache并重新部署上線后線上恢復正常。

由于在瀏覽器的場景中運行時間短,且運行在用戶的機器上,即便內存使用過多或者內存泄露,也只會影響到用戶的終端。而且運行時間短,隨著進程的退出,內存也會隨之釋放,幾乎沒有太多內存管理的必要。但在Node端同樣的代碼就可能會暴露出問題。

線上服務的運維和監控
前后端分離除了意味著代碼倉庫的分離、開發協作的分離之外,還涉及到線上服務的獨立發布和單獨部署。與之俱來的當然是前端如何更好地對線上服務進行更細粒度的運維和監控,我們的SA會更多的關注線上服務的整體指標和可用性,而前端更希望能夠細粒度的了解線上Node的進程狀態以及異常情況。

PM2是一款優秀且開源的Node進程管理工具。我們在PM2的基礎上做了一些改造,同時在云端部署了數據收集、數據實時獲取的服務,從而形成了我們目前已經應用到線上的Node部署監控平臺PM2.5,它可以將線上Node服務進程級別的細粒度信息聚合在云端進行處理和可視化展現,PM2.5能夠監控Node Server和進程的各項指標狀態,且可以配置報警并在各終端(Web、iPhone、Apple Watch)展示。

PM2.5的服務架構

簡單介紹下PM2.5的服務架構:生產環境的Node服務通過PM2.5 CLI進行部署,PM2.5 CLI會持續不斷的將Node進程的各項數據上報到PM2.5的云端。云端收到上報的數據后會對原始數據進行處理并存儲至MongoDB。而Web端和iOS應用都會通過WebSocket服務從服務端獲得實時的數據流,然后通過前端進行可視化的信息展示。

PM2.5的內部實現

當Node進程通過PM2.5啟動時,PM2.5 CLI會同云端服務進行握手,握手成功后才會源源不斷的進行數據的上報。上報時首先會將數據進行AES256加密,然后使用TCP通信將數據上報到服務器,這里用到了開源的Axon,云端服務器收到數據后會將數據入庫存儲到MongoDB中,同時會進行監控報警的掃描,如果當前數據符合用戶訂閱的監控報警條件,則會通過云端的Push服務向iOS客戶端推送報警信息。云端同時運行WebSocket服務,為多個終端(Web平臺、iOS應用)提供實時數據的推送。

這里值得一提的是,PM2.5的客戶端是基于React-Native開發,目前已經提交Apple Store正在審核,審核通過后就可以從Apple Store中下載到了,客戶端提供了服務和進程基本指標的查看,同時可以配合Web平臺的監控報警設置實現7x24小時對服務的監控。

其它監控設施的接入
為了確保線上服務的可靠、穩定,我們還接入了其它一些監控設施和日志平臺,便于對線上的錯誤和訪問日志進行追蹤、分析和定位處理。

Zabbix
Zabbix是一種分布式系統監控以及網絡監控功能的企業級開源中間件,主要是被運維使用。Zabbix主要用于對服務進行心跳檢測、監控服務的各項指標,當某些指標異常或超過設定的閾值時進行短信、大象、郵件的報警。

Sentry 錯誤日志收集
Sentry是一個錯誤日志服務器,可以將程序錯誤的詳細情況集中捕獲。而且提供各種常見語言的SDK供業務接入。但Sentry在服務器端會有采樣,一般不能替代實時錯誤日志報警的監控。

日志監控平臺
日志監控平臺是美團內部的一個日志收集系統,目前美團統一使用flume收集日志,flume具有接收scribe格式日志的能力,而日志監控平臺也是以scibe格式日志來收集。日志在整個收集流程中以兩種形式存在,分別是原始日志和解析后的日志。目前我們使用日志監控平臺主要用于將訪問日志的格式化數據上報,之后就可以通過Hive/Presto對訪問數據進行查詢了。

性能監控平臺
性能監控平臺為美團各平臺和產品線提供簡單易用的、端到端的性能數據服務。同時也提供了各種常見語言的SDK供業務接入。主要用于分析Node端的接口響應,以及瀏覽器端的頁面載入性能。

小結
以上是美團酒店前端在應用Node進行全棧開發的過程中摸索前行的一些心得,也是引子,主要介紹了我們酒店事業部的前后端分離架構,線上內存泄露問題的排查,和所使用的Node服務監控平臺PM2.5,后續我會分享更多我們的Node方面的一些實踐,以及PM2.5監控平臺的背后實現,希望能對你有所幫助,也歡迎大家能夠參與進來共同交流前后端分離和Node相關的技術點。

標簽:沈陽 德宏 包頭 廊坊 雅安 江蘇 伊春 臺灣

巨人網絡通訊聲明:本文標題《美團酒店服務使用Node.js實現JavaScript全棧開發的經驗分享》,本文關鍵詞  美團,酒店,服務,使用,Node.js,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《美團酒店服務使用Node.js實現JavaScript全棧開發的經驗分享》相關的同類信息!
  • 本頁收集關于美團酒店服務使用Node.js實現JavaScript全棧開發的經驗分享的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    五月婷婷综合网| 日韩三级精品电影久久久| 曰韩精品一区二区| 成人免费的视频| 成人app下载| 国产91精品一区二区麻豆亚洲| 亚洲精品国产无天堂网2021| 久久se精品一区精品二区| 国产精品一线二线三线精华| 免费在线观看日韩欧美| 夜夜精品视频一区二区| 一区二区三区加勒比av| 中文字幕成人网| 2023国产精品自拍| 色偷偷成人一区二区三区91 | 91视频www| 国产精品麻豆久久久| 日韩一区二区视频| 在线不卡的av| 亚洲中国最大av网站| 久久99精品国产麻豆婷婷洗澡| 午夜国产不卡在线观看视频| 亚洲综合在线第一页| 亚洲免费观看高清在线观看| 欧美精品一区二区三区很污很色的 | 寂寞少妇一区二区三区| 亚洲欧美区自拍先锋| 亚洲欧洲综合另类在线| 欧美性大战xxxxx久久久| 日韩精品专区在线影院观看| 日韩**一区毛片| 亚洲欧美日韩久久精品| 26uuu国产在线精品一区二区| 欧美一级久久久久久久大片| 91精品国产色综合久久不卡电影| 欧美精品aⅴ在线视频| 成人精品一区二区三区四区| 日韩午夜小视频| 久久蜜桃av一区二区天堂| 日韩精品一区二区三区蜜臀| 久久先锋影音av鲁色资源网| 久久久久久久综合色一本| 欧洲av一区二区嗯嗯嗯啊| 日韩三级.com| 国产欧美日韩三区| 亚洲欧美一区二区三区久本道91| 亚洲美女电影在线| 午夜精品一区二区三区免费视频| 国产精品夫妻自拍| 波多野结衣精品在线| 中文字幕高清一区| 中文字幕一区二区三区视频| 国内精品久久久久影院色| 91精品国产欧美一区二区成人 | 亚洲欧洲日韩综合一区二区| 国产一区二区三区蝌蚪| 精品国产露脸精彩对白| 久久99精品久久久久婷婷| 欧美一级日韩一级| 日韩精品亚洲一区| 精品区一区二区| 国产剧情一区在线| 精品999在线播放| 久久国产精品一区二区| 亚洲精品视频在线观看免费| 国产高清精品网站| 日韩一区二区三区观看| 麻豆免费看一区二区三区| 在线不卡a资源高清| 麻豆一区二区在线| 日韩欧美电影一二三| 国产在线乱码一区二区三区| 久久久久国产成人精品亚洲午夜 | 91精品久久久久久久91蜜桃| 蜜桃视频第一区免费观看| 精品电影一区二区三区| 国产福利一区二区三区视频| 国产精品成人一区二区艾草| 欧美日韩久久一区二区| 久久国产麻豆精品| 中文字幕一区二区三区在线播放 | 日韩欧美第一区| 九九国产精品视频| 中文字幕在线不卡一区二区三区| 91福利在线导航| 激情图区综合网| 国产精品久久久久影院色老大| 91传媒视频在线播放| 美女视频黄久久| 国产亚洲欧洲997久久综合| 色综合久久中文字幕| 久久99精品久久久久久国产越南| 国产精品欧美一级免费| 欧美日韩精品免费观看视频| 国产毛片精品一区| 一区二区久久久| 精品精品欲导航| 91首页免费视频| 国产一区欧美一区| 亚洲最新视频在线播放| 国产亚洲精品免费| 欧美男男青年gay1069videost | 国产在线精品一区二区夜色| 亚洲另类在线制服丝袜| 欧美变态口味重另类| 国产成人免费视频一区| 日一区二区三区| 亚洲欧美另类图片小说| 精品久久久久香蕉网| 欧美日本一区二区在线观看| 99久久精品国产导航| 狠狠色狠狠色综合| 午夜欧美电影在线观看| 国产精品国模大尺度视频| 亚洲精品一区二区三区精华液| 欧美亚洲动漫精品| 91免费小视频| 国产成人av自拍| 激情小说欧美图片| 日韩精品久久理论片| 综合激情成人伊人| 国产精品福利一区| 国产精品萝li| 国产精品视频麻豆| 国产色产综合色产在线视频| 久久品道一品道久久精品| 欧美草草影院在线视频| 在线成人免费视频| 制服丝袜国产精品| 3atv在线一区二区三区| 欧美精品久久久久久久久老牛影院| 色狠狠综合天天综合综合| 91免费观看在线| 成人午夜av影视| 国产成人99久久亚洲综合精品| 麻豆免费精品视频| 麻豆成人久久精品二区三区小说| 日韩电影在线一区| 日本不卡123| 日本成人在线一区| 久久se精品一区精品二区| 激情综合色丁香一区二区| 国产一区二区三区久久悠悠色av| 国产综合久久久久久久久久久久| 国内一区二区在线| 国产成人亚洲精品青草天美| 韩国v欧美v日本v亚洲v| 国模少妇一区二区三区| 国产一区二区调教| 成人网男人的天堂| 9人人澡人人爽人人精品| 91网站最新网址| 91久久香蕉国产日韩欧美9色| 欧美在线短视频| 91在线视频免费91| 一本色道久久综合亚洲精品按摩| 色综合中文综合网| 日韩激情av在线| 秋霞影院一区二区| 国产精品夜夜嗨| 成人毛片在线观看| 99国产精品久久久久久久久久| 97久久超碰精品国产| 欧美性大战久久久| 欧美xxxx在线观看| 国产欧美一区二区在线观看| 中文字幕一区二| 日韩av电影天堂| 北条麻妃国产九九精品视频| 欧美视频中文一区二区三区在线观看| 在线观看欧美日本| 欧美精品自拍偷拍| 中国色在线观看另类| 天天av天天翘天天综合网色鬼国产 | 亚洲第一av色| 午夜精品一区二区三区电影天堂| 老司机免费视频一区二区| 成人福利视频在线看| 欧美色图天堂网| 国产无遮挡一区二区三区毛片日本| 亚洲精品视频在线| 韩国中文字幕2020精品| 在线观看成人免费视频| 国产网站一区二区三区| 亚洲五码中文字幕| 豆国产96在线|亚洲| 欧美一区二区精品久久911| 国产精品―色哟哟| 美女网站色91| 91极品美女在线| xfplay精品久久| 午夜日韩在线电影| 99这里都是精品| 337p日本欧洲亚洲大胆精品 | 在线观看日韩国产| 国产三级精品在线| 日本成人在线网站| 欧美日韩在线三区| 亚洲色图在线播放| 国产suv精品一区二区6|