近年來,微服務因其良好的靈活性和伸縮性等特點備受追捧,很多公司開始采用微服務架構或將已有的單體系統改造成微服務。IBM也于近日開源了輕量級Java微服務應用服務器Open Liberty。但是采用Java開發(fā)微服務真的是最好的選擇嗎?來自JPmorgan的高級工程師Elliot Forbes基于自身的經歷,從成本角度進行分析,并與其他語言的微服務做了對比,很好地回答了這個問題。
Elliot所在的團隊最初使用Java開發(fā)了一個單體系統。他們的生產環(huán)境總共有12臺服務器,每臺服務器上部署了20到30個實例,每個實例使用8G內存。這樣,總共耗費了1.5T到2.5T內存。后來,他們將單體拆解成5個微服務,并使用容器來部署微服務。每個容器運行一個微服務,因為是基于JVM的,所以至少需要1G內存。原先的一個單體實例使用8G內存,拆成微服務后總共只需要5G到6G內存,省下了至少2G內存。
但事情不會就這么簡單。他們當中的一個微服務負責對外提供REST API,是整個系統最為關鍵的部分。為了提高可用性,他們在歐洲、北美和亞洲分別部署了4個實例。這樣一來,這個微服務總共使用了12G內存,所以整體的內存使用反而增加了不少。
而如果使用Go語言替代Java開發(fā)微服務會怎樣呢?每個微服務的內存可以從1G降到64M,那么之前那個部署了12個實例的微服務總共只需要768M內存,這比之前的單個Java微服務實例用的內存還要少。
假設微服務是部署在谷歌云平臺上的,按照GCP的收費標準,1G內存每小時收費在1美分到2美分之間,一年大概需要87美元到175美元,那么12G內存一年至少要花費1000美元。5個微服務加起來一年至少需要5000美元。而如果使用Go語言,這個數字差不多在500美元左右,可以說是減少了一個數量級。
不過Elliot也解釋說,成本只是在采用微服務時需要考慮的眾多因素當中的一個。除了成本,還需要考慮開發(fā)語言適用性等方面的問題。不過對于大型企業(yè)來說,他們擁有大量的微服務,成本仍然是一個重要的考慮因素,畢竟一年下來,有可能為他們節(jié)省數百萬美元。