微服務與Node.js為什么會廣受喜愛?
大多數項目開始時都是為了解決某一問題,比較簡單,后來逐漸發展,就變得越來越大,形成一個很大的單體結構,所有的新功能都會向這個單體中添加,就像滾雪球,越來越大
單體結構發展到一定程度之后,就會帶來一些問題,例如:
1. 擴展難,并且會造成資源浪費,因為當某個局部承不住壓力時,需要對整體進行擴展
2. 部署難,每次發布新功能,都需要重新部署整個項目,即使是一個很小的改動
3. 管理難,項目大,開發團隊多,互相有牽絆,影響效率
微服務
為了解決單體結構帶來的種種問題,很多公司開始嘗試新的架構方式,就是 微服務
在微服務架構中,以前的單體被打散成多個小塊兒,這些小塊兒一起對外提供服務,每個小塊兒可以使用不同的開發語言,開發者不再被限定在某個特定技術,可以自由的嘗試
如果塊兒的粒度設置得合適,一個小團隊用非常短的時間就可以寫完一個微服務,如果某個微服務的質量或者性能不夠好,也可以很快的使用其他技術重寫,降低了開發風險
各個微服務都單獨部署,哪個需要性能提升,就擴展哪個的資源,不再需要全體擴展,自然降低了企業的成本
Node.js 與 微服務是好搭檔
在擁抱微服務的團隊中,不管是大企業,還是新興的小公司,Node.js 都被廣泛使用
主要有3個因素:
1. 高效
Node.js 的包管理器 npm 擁有數量驚人的模塊,可以立即使用,節省大量的開發工作
Node.js 基于 JS,所以前端開發人員也很容易上手,整棧都使用同一個語言,前后端使用同樣的模塊,便節省了大量時間
2. 性能好
在創建高性能的實時應用時,Node.js 是非常好的方案,因為他的非阻塞,事件驅動I/O模型
GoDaddy公司是采用 Node.js 開發微服務的典型案例,他們給出了自己的性能數據:
使用 Node.js 結合微服務后,在和之前同樣的負載情況下,硬件資源只需要之前的10%
3. 開發者喜愛
Node.js 的用戶增長速度驚人,每年都翻一倍,npm 的流行度和成長速度都遠超其他語言的包管理器
值得注意的是,新一代的開發者尤其喜愛 Node.js,他們不喜歡使用靜態類型語言,例如 java,c#
在2015年,Node.js 得到了Linux基金會的長期支持
案例
-
PayPal
2013之前,PayPal是java技術棧的單體結構,2013初開始向 Node.js 微服務架構遷移
開始時從一個小點開始改造,沒有問題之后,再改更加重要的部分,同時還準備了一套java版本的應用作為回退方案,如果 Node.js 開發的應用出現問題,可以馬上進行切換,而結果非常成功,便放心進行大面積遷移了
遷移之后的效果:
build的速度快了2倍
代碼量降低33%
可以處理的QPS提高1倍
響應時間提升35%
頁面快了200ms
采用JS全棧開發后,效率提升顯著,對產品的從新思考、重新啟動、設計等等非常有幫助
-
Netflix
Netflix 也是2013開始的 Node.js 微服務改造,之前是一個巨大的單體,啟動一次需要40分鐘,完全無法高效快速的發展
后來網站改為單頁結構,采用了 Node.js,Node.js 有一個非常好的理念:一次編碼、到處運行,以前混合使用 java 和 js 時,好多東西得寫兩次,現在就簡單了
使用微服務后,每一塊兒都非常好管理,可以放到容器中,這樣,開發者在本機也可以運行,使本機和產品環境一致,非常有助于開發效率和質量
-
GoDaddy
GoDaddy 以前主要是使用 .net 開發,整體結構也是單體
經過多年的發展,發現 .net 并不適合,因為其沒有像 Node.js 那樣活躍的模塊社區,極大的依賴微軟發布的東西,完全不適合一個敏捷型公司
后來選擇 Node.js 是因為他的 build、單元測試、集成測試、應用部署 都非常容易
改造后的效果也非常好,例如當時有一個廣告帶來了1億的訪問量,很好的承受住了,每秒可處理1萬個請求,零宕機,他們的 Node.js 集群包含12臺服務器
通過微服務,實現了分布式無共享架構,結合持續集成,GoDaddy 可以在1分鐘之內完成產品發布
來自:http://mp.weixin.qq.com/s?__biz=MzA4Nzc4MjI4MQ==&mid=2652402202&idx=1&sn=d73910a225a419f474f63a4ced3ccfde&scene=0#wechat_redirect