日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

网易智慧企业 Node.js 实践(3)| 灰度环境和应用监控

發布時間:2025/3/8 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网易智慧企业 Node.js 实践(3)| 灰度环境和应用监控 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

灰度環境

?

首先說下為什么需要灰度環境。隨著業務的復雜度以及技術復雜度的上升,導致在測試環境可能有些問題無法全面復現,以及復雜度上升可能帶來的某些配置的不同步等等原因,會導致測試環境看起來是沒有問題的需求,到了線上反而出現了的問題,為了盡早發現這些問題,以及降低這些問題帶來的影響,就需要一個和線上環境幾乎一樣的環境來做最后的質量把控。

?

為什么不是預發環境?其實我之前的項目中很多都是使用預發環境的,而且業界使用預發環境的企業也不在少數,那我們為什么使用實現難度更大的灰度環境呢?肯定是有好處的啊!第一,從開發的角度,使用預發環境要么使用預發域名,要么使用預發機器 IP 綁定,操作起來比較麻煩,對非開發同學不友好。第二,灰度環境可以讓真正的用戶進行使用,也可以作為A/B Test 使用??偨Y下就是預發環境能做的灰度環境基本都能做,預發環境不能做的灰度環境也能做。所以我們使用灰度環境。

?

既然要用灰度環境,首先要確定的是通過什么方式來區分用戶進入灰度或正式環境。網易互客作為一個 toB 的產品,當然希望是同一個公司的所有員工能夠得到同樣的使用體驗和功能。所以我們通過企業 ID 來控制用戶進入灰度或正式環境。

?

?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 【示意圖】

?

確定方案之后就是技術實現了,我們之前的網關只能通過請求的 path 來區分請求,來控制流量轉發到 Java 或 Node 應用?,F在我們需要網關能夠區分請求中的企業 ID,所以需要對網關進行升級,于是我們使用新的技術方案 Eureka(Netflix開發的服務發現框架),這里不對 Eureka 做過多介紹,主要說下 Node 端要實現的 **Eureka Client**,用來完成服務注冊及維持。

?

npm 中已經有了 eureka-node-client 來實現 Node 端的服務注冊功能,但是要結合 Egg.js,以及平滑發布的理念,還是需要進一步的開發,以實現一個更完善的工具,所以我們實現了 `pp-eureka` 這個 Egg.js 插件。

?

考慮到 Egg.js 的多進程模型,為了防止一臺機器多次注冊,我們通過擴展 agent 來實現這個插件的功能。主要代碼如下:

?

```javascript

const Eureka = require('eureka-node-client');

?

module.exports = agent => {

? const eureka_client = new Eureka(agent.config.eureka);

?

? eureka_client.start(function (error) {

??? agent.logger.info(error || '啟動成功!');

? });

}

```

?

如果僅僅是這樣倒也能實現灰度的需求,但是損失了上文提到的平滑發布,所以又增加了一個 middleware 來監聽發布系統的上下線請求,然后通過 `app.messenger.sendToAgent(OFFLINE, '');` 來通知 agent ,agent 代碼升級后如下:

?

```javascript

const Eureka = require('eureka-node-client');

?

module.exports = agent => {

? const eureka_client = new Eureka(agent.config.eureka);

?

? eureka_client.start(function (error) {

??? agent.logger.info(error || '啟動成功!');

? });

?

? agent.messenger.on(OFFLINE, data => {

??? eureka_client.stop();

? });

}

```

?

Agent 收到下線通知后會讓 Eureka 停止注冊服務的心跳,這樣 Eureka 注冊中心就會把這臺 Node 機器踢掉,流量就不會轉發進來,以免在發布過程中導致請求失敗。插件開發好之后怎么用呢?首先是在 config 目錄下增加 config.gray.js 灰度環境配置文件,里面添加 pp-eureka 的配置,如下:

?

```json

eureka: {

??? eureka: {

????? serviceUrls: {

??????? default: [

????????? 'url'

??????? ]

????? }

??? },

??? instance: {

????? app: 'huke',

????? port: { '$': 7001, '@enabled': true },

????? metadata: {

??????? ysf_app: 'huke',

??????? ysf_env: 'gray'

????? }

??? }

}

```

?

同時線上環境也增加對應的配置,只是 `eureka.instance.metadata.ysf_env = 'prod'` ,通過這個配置來區分是灰度環境還是線上環境。這樣就完成灰度環境工程相關的部分,剩下就是把所有的請求都默認帶上當前企業的 ID 就完成了。

?

自此應用發布相關的問題都已基本解決,剩下的就是要隨時了解自己的應用的運行狀態了。

?

應用監控

?

應用上線之后,為了了解應用的運行狀態、服務是否穩定、有沒有潛在問題,我們需要應用監控,有了應用監控以后能幫我們解決以下問題:

?

  • 能夠讓業務流轉調用鏈可追蹤,能夠知道一個請求在哪里出了問題,方便解決
  • 能夠了解應用的系統指標,比如:Load、CPU、內存、磁盤、網絡、TCP 等
  • 能夠在應用狀態異常的時候及時發送通知給開發者,把影響降到最小
  • ?

    關于網易內部的工具我就不多介紹了,主要介紹下可以使用的第三方平臺或工具。

    ?

    首先說下 Sentry,它是一個實時事件日志記錄和聚合平臺。我們之前使用它來做前端代碼的錯誤監控以及關鍵數據的統計。因為它也能支持 Node 端,所以我們就順便接入進來了,同時實現了 `pp-sentry` Egg.js 插件。使用的時候只需要在 config 中配置 sentry project 的 dsn 即可捕獲 Node 中代碼錯誤。

    ?

    還有阿里開源的Pandora.js,是一個 Node.js 應用監控管理器。它集成了多種類型的能力諸如:監控、鏈路追蹤、調試、進程管理等等。

    ?

    另外就是阿里云的 Node.js 性能平臺,如果使用 Egg.js 框架的話,接入非常方便,使用官方提供的 egg-alinode,參考 [Egg 集成部署_部署 runtime 與 agenthub_用戶指南_Node.js 性能平臺-阿里云](https://help.aliyun.com/document_detail/60907.html?spm=a2c4g.11186623.6.555.41d676bfwLNpaH) 這個文檔即可,功能全面,關鍵是免費。如果還有對日志更高的要求,可以使用阿里云的日志服務。

    ?

    利用好上面的工具能對解決應用中出現的問題提供很大的幫助,另外在代碼需要的地方打上日志也是非常必要的,Egg.js 提供了非常完善的日志功能,使用好它對了解應用的運行狀態以及排查問題都有很好的幫助。

    ?

    總結

    ?

    至此我要分享的關于智慧企業 Node.js 接入實踐已經結束,但是要開發好 Node 應用要考慮的還有很多。首先在開發思路上要和寫前端代碼有個區分,要具備服務端開發的思考能力,對性能、穩定、健壯等的考慮要更多。另外要養成良好的打日志習慣,這個非常重要。還有單元測試也是非常重要的,寫單元測試是服務端開發的基本要求。Node 端開發對運維能力也有一定的要求,不像前端代碼,發上 CDN 之后基本就不需要關注了,但是做 Node 開發,代碼上線之后也要時刻關注應用的狀態,以及會不會有報錯等,要具備快速定位、解決問題的能力,將可能出現的問題導致的損失降到最小。Node的接入整體上對開發效率的提升還是很顯著的,而且通過 Node 前端可以做的更多,讓前端發揮更大

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的网易智慧企业 Node.js 实践(3)| 灰度环境和应用监控的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。