如何利用Kubernetes編排實現Node.js程序的微服務化
前言
本文著重介紹了微服務架構的某些細節,微服務其實也適用於Node.js應用程序。本文還介紹了如何利用容器和編排來實現Node.js的微服務化。
如今,大家都在談論調度,微服務,Docker,以及Kubernetes如何改變編排領域。那麼,在生產中部署Node.js應用程序意味著什麼?有哪些是值得關注的?
Node.js微服務化
為了理解為什麼每個人都想談論微服務,我們需要了解應用程序開發的前身——The Monolith。
單體應用
如果你的應用程序是單體應用形式的,那麼係統的所有代碼都在一個代碼庫中運行,並生成一個入口。一個簡單的npm start就可以啟動應用程序,Monolith的核心是保持一切在一起運行。
它仍然是應用程序敏捷開發的好選擇,但這樣做的缺點是當你想要經常發布時,你將不得不重新部署整體,而無法通過僅更換組件來完成部署的更新。
微服務
開發應用程序的另一種方法是將你的代碼庫分解成較小的塊。每個塊都是一個服務。所有這些服務將一起為最終用戶提供與單塊相同的功能。
啟動應用程序不僅僅是簡單的npm start,你需要獨立啟動每個服務。當你將你的整體拆分成更小的塊或你的應用程序是由不同的服務組成,這就是微服務架構。
至於上行方式,微服務器允許你經常發布,並僅重新部署係統的更改部分。但還存在一個問題,就是如何編排。有效的編排可以使整個流程變得完整而高效。
非單體應用的編排問題
如果你的Node.js應用程序正在使用非單體方法,將多個服務組合到單個應用程序中,則需要一種編排方式。Docker的優勢就在這裏凸顯了!使用容器,你可以隔離每個進程(= service = npm start)並給每個進程自己的事件循環。
Node上的事件循環
所有的Magic 節點都發生在Node的事件循環中。Node正在使用事件驅動的範例來執行事件循環中的所有Magic節點。
在計算機編程中,事件驅動編程是一種編程範例,程序的流程由諸如用戶動作,傳感器輸出或來自其他程序/線程的消息等事件決定。事件驅動的編程是用於圖形用戶界麵和其他應用程序中的主要範例,其中以執行響應輸入的某些動作為中心。
一旦檢測到事件,就有一個中心機製來偵聽事件並調用一個回調函數。這是Node的事件循環的基本原理。
Node的事件循環是單線程事件循環。這可能會導致性能問題。例如,當你處於負載狀態或負載大量CPU工作時,如何使我們的Node應用程序更具性能?這時候就需要微服務和容器來進行搶救了!
集中化每個服務
在生產中運行微服務的第一步是集中化每個服務。以此Express.JS為例:
要在一個孤立的過程中運行它,我們需要一個Dockerfile來容納程序:
這時容器最大的好處是你可以通過啟動更多容器並在集群周圍進行調度來擴展服務和Node的事件循環的方式。例如,如果你的API部分負載較重,則可以擴展該部分並更有效地利用資源。如果壓力正常,你可以縮小。
解決方案
正如我們之前所說的那樣,將整體拆分成麵向服務的體係結構的好處是,每個服務都可以有一個隔離的事件循環。因為每個Node進程都在容器中運行隔離!
當你希望在IT架構的改造中成功使用Node.js,以下四個階段可以為你提供思路:
編碼你的服務並提交更改;
建立並測試你的服務;
配置你的基礎架構;
在生產中部署,運行和維護你的服務。
原文鏈接:
https://dzone.com/articles/kubernetes-orchestrate-your-nodejs-microservices
推薦閱讀:
如何拆分你的微服務架構?
你不得不知的推進DevOps實踐的四大趨勢
為什麼微軟應該通過收購Docker來與Kubernetes競爭
關於Ghostcloud
Ghostcloud(中文名:精靈雲)坐落於成都天府軟件園,是成都高新區重點扶持企業,國內首批從事容器虛擬化研發的企業,是西南地區唯一一家基於Docker的雲計算服務商,為企業級行業客戶提供針對互聯網化、私有雲管理平台、大數據業務基礎架構的平台服務。
Ghostcloud因容器技術而生,以最新容器技術Docker為基礎,為適應不同行業客戶需求,全自主研發了一套調度引擎框架Newben,且全方位適配Kubernetes主流開源調度引擎,也是國內率先實現雙調度引擎的企業,是一流的企業級容器雲服務專家。Ghostcloud推出了企業級容器雲PaaS/CaaS平台,命名為EcOS(EnterpriseContainer Operation System)。Ghostcloud將EcOS平台與微服務/DevOps相融合,運用至企業IT係統的全生命周期的開發、測試、運維及發布流程中,**致力於為多個領域企業向“互聯網+”轉型提供針對互聯網化、私有雲管理平台、大數據業務基礎架構的平台服務,幫助企業級客戶降低成本、提升效率、簡化運維及產品部署,並提升係統的可靠性和安全性。**
最後更新:2017-08-17 17:02:23