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