從零開(kāi)始搭建微服務(wù): 阿里云不完全攻略(1)

本文是新系列“從零開(kāi)始搭建微服務(wù)”的開(kāi)篇,該系列將圍繞微服務(wù)展開(kāi),重點(diǎn)在于動(dòng)手搭建

一個(gè)典型的微服務(wù)架構(gòu)(轉(zhuǎn)自 [Introduction to Microservices](https://www.nginx.com/blog/introduction-to-microservices/))

微服務(wù)是個(gè)很大的話題,關(guān)于微服務(wù)單體服務(wù)的優(yōu)缺點(diǎn)眾說(shuō)紛紜。但不可否認(rèn)的是:微服務(wù)對(duì)產(chǎn)品的快速迭代,小步快跑有著巨大的作用。移動(dòng)互聯(lián)的時(shí)代,更要擁抱變化。因此,從我司的實(shí)際出發(fā),如何基于有限的研發(fā)人手,落地微服務(wù),這是從創(chuàng)業(yè)之初,就擺在我們面前的問(wèn)題。
工欲善其事 必先利其器要搭建服務(wù),首先要有服務(wù)器,最好還有各類開(kāi)箱即用的基礎(chǔ)服務(wù)。有限的人手,讓我們沒(méi)有多做猶豫就確定了“一切都放到云上”的決策。
《Netty 內(nèi)存管理探險(xiǎn): PoolArena 分配之謎》中曾經(jīng)提到過(guò),我司重度使用阿里云。是的,最終我們選擇的云供應(yīng)商是阿里云。阿里云中各種五花八門的產(chǎn)品和其購(gòu)買選項(xiàng)會(huì)讓很多初識(shí)者眼花繚亂,無(wú)從下手。本文就來(lái)談?wù)勥@方面的一點(diǎn)心得。

一. 阿里云的正確打開(kāi)方式

打開(kāi)鏈接 www.aliyun.com,首先我們得注冊(cè)一個(gè)阿里云賬號(hào)。對(duì)企業(yè)用戶來(lái)說(shuō),應(yīng)盡快申報(bào)企業(yè)實(shí)名認(rèn)證。只有企業(yè)實(shí)名認(rèn)證賬號(hào)才能進(jìn)行對(duì)公賬號(hào)轉(zhuǎn)賬充值,開(kāi)具增值稅發(fā)票等企業(yè)專用功能。實(shí)名認(rèn)證入口位于“賬號(hào)管理”中:

阿里云企業(yè)實(shí)名認(rèn)證

接下來(lái),得根據(jù)產(chǎn)品的目標(biāo)人群選定一個(gè)主要的產(chǎn)品地域。幾乎所有的阿里云產(chǎn)品都會(huì)要求用戶選擇所在地域,這也很好理解,云產(chǎn)品也實(shí)際落地在阿里云維護(hù)的某個(gè)物理機(jī)房中,就會(huì)有地域?qū)傩?。同一個(gè)地域內(nèi)的阿里云產(chǎn)品的互通可以近似理解為內(nèi)網(wǎng)訪問(wèn),而跨地域的阿里云產(chǎn)品互通就得通過(guò)互聯(lián)網(wǎng)進(jìn)行公網(wǎng)通信,其可靠性和實(shí)時(shí)性都會(huì)受到影響。另外,通過(guò)公網(wǎng)互通,一般來(lái)說(shuō),除產(chǎn)品本身的費(fèi)用外,阿里云還會(huì)收取相應(yīng)的公網(wǎng)出站流量費(fèi)用。
由于阿里云目前尚不支持在產(chǎn)品購(gòu)買后,遷移地域,因此,除非目的明確(例如異地互備),建議從屬于同一系統(tǒng)的阿里云產(chǎn)品都購(gòu)買在相同地域中。目前,阿里云地域有:
阿里云的產(chǎn)品地域

如果面向目標(biāo)人群主要為國(guó)內(nèi)用戶,可選擇的地域包括:華北1/2、華東1/2和華南1。根據(jù)筆者實(shí)測(cè),這五個(gè)區(qū)域的國(guó)內(nèi)南北互通和運(yùn)營(yíng)商互通沒(méi)有太大差異。而華東1的物理位置就在阿里云的大本營(yíng): 杭州,不少阿里云的新產(chǎn)品也會(huì)第一時(shí)間在華東1試運(yùn)營(yíng),因此,建議優(yōu)先選擇。

二. 云服務(wù)器: ECS

一般來(lái)說(shuō),首先需要采購(gòu)的是云服務(wù)器(ECS)。在阿里云的ECS購(gòu)買界面中,用戶可根據(jù)CPU類型,CPU核數(shù)和內(nèi)存的配比,公網(wǎng)帶寬,ECS綁定的云盤大小靈活組合,但這樣的靈活性也帶來(lái)了令人眼花繚亂的定價(jià)。我們來(lái)一一分析:

2.1 CPU 類型及內(nèi)存配比

目前阿里云 ECS 的實(shí)例類型分為:系列I、系列II和系列III三大類,這三個(gè)系列的差異主要表現(xiàn)在CPU類型(支持指令集等)、對(duì)應(yīng)采用的內(nèi)存型號(hào)和是否I/O優(yōu)化,用戶可根據(jù)實(shí)際運(yùn)行應(yīng)用的特性(IO密集型計(jì)算密集型)來(lái)選擇。從筆者的實(shí)踐來(lái)看,即便是采用最低配置的系列I,也足以在 CentOS 6.5 / 7 上,基于 JDK8,運(yùn)行常規(guī)的IO密集型 JVM 應(yīng)用服務(wù)。在采用了微服務(wù)架構(gòu),單個(gè)服務(wù)的業(yè)務(wù)邏輯在基于異步IO異步接口模式充分優(yōu)化后,由復(fù)雜度的不同,單組后端服務(wù)能輕松支撐 1K~ 5K 甚至更高的并發(fā)。摘錄說(shuō)明如下:

  • 系列 II 較系列 I 進(jìn)行了硬件升級(jí),采用 Haswell CPU、DDR4 內(nèi)存,并默認(rèn)為 I/O 優(yōu)化實(shí)例,同時(shí)增加了一些新的指令集,使整數(shù)和浮點(diǎn)運(yùn)算的性能翻倍,整體計(jì)算能力更強(qiáng)。
  • 系列 III 相對(duì)系列 I 和系列 II 進(jìn)行了硬件升級(jí),采用 Intel Broadwell CPU、DDR4 內(nèi)存,并默認(rèn)為 I/O 優(yōu)化實(shí)例,高主頻和中主頻兩種 CPU 配合多種內(nèi)存配比,可以提供給用戶更好的性能以及更多的選擇。

而是否I/O優(yōu)化的差異主要和掛載的云盤IOPS相關(guān),具體為:

  • 支持 I/O 優(yōu)化的實(shí)例
    掛載 SSD云盤或高效云盤時(shí)能夠獲得云盤的全部存儲(chǔ)性能,因?yàn)?I/O 優(yōu)化為實(shí)例與云盤之間提供更好的網(wǎng)絡(luò)能力,可保證云盤存儲(chǔ)性能的發(fā)揮。
  • 不支持 I/O 優(yōu)化的實(shí)例
    掛載 SSD云盤時(shí),通常最高可獲得 1000 左右的 IOPS 性能;掛載高效云盤時(shí),通常最高可獲得數(shù)百的 IOPS 性能

在實(shí)例的選擇界面,根據(jù)不同系列,CPU核數(shù)和內(nèi)存大小有若干固定搭配提供。CPU核數(shù)和內(nèi)存的配比有四種:1:1(1核配1G內(nèi)存)、1:2(1核配2G內(nèi)存)和1:4(1核配4G內(nèi)存)和1:8(1核配8G內(nèi)存)。在上述的三個(gè)系列中,最低配置都有1核1G,而目前最高配置,竟然能選擇到56核224G【注1】。如對(duì)實(shí)例有特殊需求(需要更多CPU核數(shù)或是更大的內(nèi)存),則可如下截圖所示填寫工單,提交阿里云后臺(tái),由人工進(jìn)行處理。

購(gòu)買非標(biāo)準(zhǔn)實(shí)例 需要提交工單申請(qǐng)

申請(qǐng)非標(biāo)準(zhǔn)實(shí)例的工單樣例

如前文所述,后端服務(wù)大多數(shù)是IO密集型的,特別地,對(duì)于 JVM 應(yīng)用而言,出現(xiàn) OutOfMemory 異常的場(chǎng)景比起CPU居高不下要多得多(大多數(shù)系統(tǒng)負(fù)載異常升高也都直接或間接由于 OutOfMemory 引起的)。因此,我們?cè)趯?shí)踐中以選擇 2核16G 的內(nèi)存型實(shí)例為主,下面以該配置為例,并固定幾個(gè)因素來(lái)比較三個(gè)系列實(shí)例的采購(gòu)成本:

  • 計(jì)費(fèi)方式均為“按量付費(fèi)”
  • 帶寬計(jì)費(fèi)模式為“固定帶寬”,并設(shè)置為0Mps;此時(shí)ECS只有內(nèi)網(wǎng)IP,沒(méi)有公網(wǎng)IP,后文會(huì)提到此類內(nèi)網(wǎng)ECS的優(yōu)缺點(diǎn)和使用場(chǎng)景
  • 只有一塊默認(rèn)的40G系統(tǒng)盤,沒(méi)有額外的數(shù)據(jù)盤,且都采用該區(qū)域允許的最低配類型云盤

如下表列出了在2核16G配置下,不同系列,不同區(qū)域?qū)嵗拿啃r(shí)費(fèi)用:

實(shí)例類型 華東1 華東2 華北1 華北2 華南1
系列I(2核16G) ¥1.707/時(shí) ¥1.71/時(shí) N/A ¥1.71/時(shí) ¥1.71/時(shí)
系列II(2核16G) ¥1.75/時(shí) ¥1.75/時(shí) ¥1.75/時(shí) ¥1.75/時(shí) ¥1.75/時(shí)
系列III(2核16G) ¥1.83/時(shí) ¥1.83/時(shí) ¥1.83/時(shí) ¥1.83/時(shí) ¥1.83/時(shí)

ECS不同系列成本對(duì)比

表中數(shù)據(jù)均為本文成文時(shí)(2017.2)的數(shù)據(jù),僅供參考

從上表可以看到,如我們所預(yù)期的,在內(nèi)核個(gè)數(shù)和內(nèi)存大小相同的前提下,系列III的成本最高,系列I的成本最低,而相同系列幾乎不存在地域差異。唯一的異常是在華東1中,系列I的每小時(shí)費(fèi)用相比其它三個(gè)地域便宜0.003元,這是由于在華東1地域,系列I的存儲(chǔ)只能選擇普通云盤,而其它區(qū)域的系列I只能選擇高效云盤或性能更高也更貴的SSD云盤。

注1:

  • 按量計(jì)費(fèi)方式下的實(shí)例最高配置目前為:4核16G
  • 包年包月計(jì)費(fèi)方式下的實(shí)例最高配置目前可達(dá)驚人的:56核224G;當(dāng)然費(fèi)用也驚人的貴!
2.2 計(jì)費(fèi)方式:按量付費(fèi) vs 包年包月

阿里云所有產(chǎn)品都支持的計(jì)費(fèi)方式是:按量付費(fèi),這也是云服務(wù)相比于傳統(tǒng)IDC的根本優(yōu)勢(shì)之一。所謂打開(kāi)水龍頭就用,那當(dāng)然是用了多少資源付多少錢,這一計(jì)費(fèi)方式對(duì)用戶來(lái)說(shuō)最容易理解。另一方面,對(duì)于包括ECS在內(nèi)的幾個(gè)核心產(chǎn)品,阿里云還提供了包年包月的計(jì)費(fèi)方式來(lái)鎖定長(zhǎng)期用戶。具體來(lái)說(shuō),用戶可以一次性為今后一段時(shí)間的資源使用預(yù)先付費(fèi)。相比于每小時(shí)結(jié)算一次的按量計(jì)費(fèi),如果使用時(shí)長(zhǎng)相同,這筆預(yù)付費(fèi)用會(huì)便宜不少。讓我們來(lái)具體算算有多劃算。以系列I的2核16G的配置為例,地域?yàn)槿A東2,都按照使用時(shí)長(zhǎng)為1年,不同計(jì)費(fèi)方式下的1年成本對(duì)比如下:

系列I(2核16G) 按量 包月 包1年 包2年 包3年
計(jì)費(fèi)單價(jià) ¥1.71/時(shí) ¥500.00/月 ¥5100/年 ¥8400/2年 ¥9000/3年
計(jì)費(fèi)周期數(shù) × 24 × 365 × 12 × 1 ÷ 2 ÷ 3
總費(fèi)用(元) 14979.60 6000 5100 4200 3000

一比嚇一跳??!包月使用1年的費(fèi)用僅僅是按量使用1年的40%。更不用提,目前阿里云在大力做促銷的包2年、包3年的打折力度了。當(dāng)然,包年包月的優(yōu)惠付出的代價(jià)是鎖定了使用期限。
需要注意,包年包月ECS有5天內(nèi)無(wú)理由退款的選項(xiàng):在購(gòu)買包年包月ECS后,發(fā)現(xiàn)配置有誤,或是地域選擇錯(cuò)誤,或者任何其它原因,如距離購(gòu)買生效時(shí)還未超過(guò)5天的,可以進(jìn)行退款。但請(qǐng)注意,截止目前為止,該規(guī)定細(xì)則仍然是:每個(gè)用戶累積只有1次ECS 5天內(nèi)無(wú)理由退款的機(jī)會(huì),也就是只要該阿里云賬號(hào)已經(jīng)進(jìn)行過(guò)一次成功的ECS退款操作,就不能再次退款了。因此,下單要慎重啊!

阿里云 [5天無(wú)理由退款規(guī)則](https://www.aliyun.com/support/jpfw?spm=5176.7740684.2.1.bZeFbu)

綜上,我們對(duì)選擇何種計(jì)費(fèi)方式,可以歸納如下:

  • 試用、臨時(shí)使用為目的的ECS購(gòu)買,無(wú)論是測(cè)試配置,測(cè)試地域,最好采用按量付費(fèi)方式,最少只需要掏1小時(shí)的費(fèi)用,只要記得試用完成后,立刻通過(guò)控制臺(tái)釋放實(shí)例即可(不足一小時(shí)按照一小時(shí)計(jì)費(fèi))
  • 長(zhǎng)期使用為目的,在ECS的配置和地域都已經(jīng)完全明確的前提下,能包多長(zhǎng)時(shí)間包多長(zhǎng)時(shí)間,享受超值的打折優(yōu)惠
2.3 網(wǎng)絡(luò)和安全組

在購(gòu)買ECS時(shí),我們可以選擇使用何種網(wǎng)絡(luò)類型,阿里云提供了“經(jīng)典網(wǎng)絡(luò)”和“專用網(wǎng)絡(luò)”兩種:

  • 經(jīng)典網(wǎng)絡(luò):內(nèi)網(wǎng)IP地址由阿里云統(tǒng)一分配,且不可更改,可方便的與用戶購(gòu)買的其它實(shí)例或阿里云產(chǎn)品進(jìn)行同地域的內(nèi)網(wǎng)互訪,適合對(duì)網(wǎng)絡(luò)自定義及自主性管理要求適中的用戶
  • 專用網(wǎng)絡(luò):是指邏輯隔離的私有網(wǎng)絡(luò),用戶可以自定義網(wǎng)絡(luò)拓?fù)浜?IP 地址,支持通過(guò)專線連接,網(wǎng)絡(luò)可擴(kuò)展性強(qiáng)。適合于對(duì)網(wǎng)絡(luò)有個(gè)性化定制及高級(jí)定制需求的客戶

簡(jiǎn)言之,“專用網(wǎng)絡(luò)”給了有能力且有需求使用“虛擬交換機(jī)/路由器”來(lái)規(guī)劃定義私有網(wǎng)絡(luò)用戶這樣一種可能性:在阿里云的基礎(chǔ)網(wǎng)絡(luò)內(nèi)建立一個(gè)可以自定義的專有隔離網(wǎng)絡(luò),自定義這個(gè)專有網(wǎng)絡(luò)的網(wǎng)絡(luò)拓?fù)?/strong>和 IP 地址。兩種網(wǎng)絡(luò)類型的功能對(duì)比如下表:

功能點(diǎn) 經(jīng)典網(wǎng)絡(luò) 專有網(wǎng)絡(luò)
二層邏輯隔離 不支持 支持
自定義私網(wǎng)網(wǎng)段 不支持用戶自定義 用戶自定義
私網(wǎng) IP 規(guī)劃 經(jīng)典網(wǎng)絡(luò)內(nèi)唯一 專有網(wǎng)絡(luò)內(nèi)唯一,專有網(wǎng)絡(luò)間可重復(fù)
自建 VPN 不支持 支持
私網(wǎng)互通 賬號(hào)內(nèi)相同地域內(nèi)互通 專有網(wǎng)絡(luò)內(nèi)互通,專有網(wǎng)絡(luò)間隔離
自建 NAT 網(wǎng)關(guān) 不支持 支持

經(jīng)典網(wǎng)絡(luò) vs 專有網(wǎng)絡(luò)

“專用網(wǎng)絡(luò)”的一種應(yīng)用場(chǎng)景是搭配高速通道組建混合云,如下圖所示:

混合云示意圖

使用“專用網(wǎng)絡(luò)”(VPC)、ECS和其它云產(chǎn)品搭建云上業(yè)務(wù)系統(tǒng),而出于數(shù)據(jù)保密性考慮,核心數(shù)據(jù)放置在云下用戶的自建數(shù)據(jù)中心(IDC),使用高速通道專線接入,實(shí)現(xiàn)云上云下數(shù)據(jù)互通,形成混合云使用環(huán)境。

專用網(wǎng)絡(luò)還有其它使用場(chǎng)景,參見(jiàn)文后所附參考資料(阿里云:VPC專用網(wǎng)絡(luò)常用應(yīng)用場(chǎng)景),這里不再贅述。
對(duì)于大多數(shù)用戶而言,“經(jīng)典網(wǎng)絡(luò)”已經(jīng)足夠使用。而使用“安全組”防火墻可做到三層網(wǎng)絡(luò)訪問(wèn)控制,所以,如果要在經(jīng)典網(wǎng)絡(luò)中,進(jìn)行簡(jiǎn)單的訪問(wèn)隔離,可使用創(chuàng)建多個(gè)“安全組”來(lái)實(shí)現(xiàn),具體說(shuō)明參見(jiàn)文后所附參考資料安全組使用FAQ。在小規(guī)模使用中,"偷懶"一點(diǎn),全局使用一個(gè)默認(rèn)安全組,通常也足夠了。

2.4 ECS綁定的存儲(chǔ)

無(wú)論選擇何種實(shí)例類型,小到1核1G,大到56核224G,ECS默認(rèn)的系統(tǒng)盤大小均為40G,用戶可以調(diào)整系統(tǒng)盤最大到500G,或是購(gòu)買額外的數(shù)據(jù)盤。增大系統(tǒng)盤或另購(gòu)數(shù)據(jù)盤都會(huì)增加ECS的采購(gòu)成本。從筆者的實(shí)踐來(lái)看,如果只是安裝后端服務(wù),以及臨時(shí)保存運(yùn)行日志,默認(rèn)的40G系統(tǒng)盤在安裝完系統(tǒng)后的剩余空間已完全足夠。

  • 問(wèn)題1:要用云盤長(zhǎng)期保存文件(用戶上傳的圖片、音視頻)怎么辦,而且文件的數(shù)量估計(jì)還挺多?
    如業(yè)務(wù)中需要長(zhǎng)期保存文件,則建議單獨(dú)采購(gòu)阿里云的OSS產(chǎn)品,使用其SDK二次開(kāi)發(fā)來(lái)完成功能。從安全性、數(shù)據(jù)完整性以及結(jié)合使用阿里云CDN的方便性看,OSS都提供了遠(yuǎn)超云盤文件系統(tǒng)的能力。本系列后續(xù)文章中會(huì)再做詳細(xì)介紹。
  • 問(wèn)題2:系統(tǒng)產(chǎn)生的運(yùn)行日志中有很多有用信息,想長(zhǎng)期保存,以后估計(jì)還得做個(gè)分析,40G空間不夠咋辦?
    后端服務(wù)運(yùn)行產(chǎn)生的日志類文件,如需要長(zhǎng)期保存,建議結(jié)合使用阿里云日志服務(wù)OSS表格存儲(chǔ)、MaxCompute等存儲(chǔ)類服務(wù),并配合 E-MapReduce、MaxCompute 進(jìn)行離線日志分析。

另外,如確需購(gòu)買額外云盤,也建議采購(gòu)獨(dú)立型云盤。其購(gòu)買入口位于“云服務(wù)器ECS”-"磁盤"下,如截圖所示:

獨(dú)立云盤購(gòu)買入口

獨(dú)立型云盤可以在不同的時(shí)間,掛載到相同地域的不同ECS實(shí)例上,這種云盤的使用方式更為靈活和經(jīng)濟(jì)。

2.5 帶寬方式

ECS在帶寬計(jì)費(fèi)方式上也提供了兩種選擇 —— “按固定帶寬” 和 “按使用流量”:

  • 按固定帶寬的方式:
    需指定公網(wǎng)出站的帶寬的大小,如 10Mbps,適用于業(yè)務(wù)場(chǎng)景對(duì)于網(wǎng)絡(luò)帶寬要求比較穩(wěn)定的客戶,費(fèi)用較低
  • 按使用流量的方式:
    是按公網(wǎng)出站的實(shí)際發(fā)生的網(wǎng)絡(luò)流量進(jìn)行收費(fèi),適用于業(yè)務(wù)場(chǎng)景對(duì)網(wǎng)絡(luò)帶寬需求變化較大的場(chǎng)景,如平時(shí)帶寬使用較低但間歇性的出現(xiàn)網(wǎng)絡(luò)訪問(wèn)高峰的場(chǎng)景;為了防止突然爆發(fā)的流量產(chǎn)生較高的費(fèi)用,可以指定容許的最大網(wǎng)絡(luò)帶寬進(jìn)行限制

對(duì)于如何選定帶寬方式,我們可以從接入架構(gòu)考慮。從我司的實(shí)踐來(lái)看,一個(gè)相對(duì)合理的生產(chǎn)系統(tǒng)接入架構(gòu)是:將阿里云負(fù)載均衡(SLB)前置于業(yè)務(wù)系統(tǒng)前。此時(shí),由前端APP或WEB與后端服務(wù)交互產(chǎn)生的入站和出站公網(wǎng)流量,均在SLB上計(jì)費(fèi)。一般情況下,SLB和后端ECS屬于同一地域,因此兩者通信走的是內(nèi)網(wǎng)流量,不產(chǎn)生費(fèi)用。

SLB 前置示意圖

該方式的優(yōu)勢(shì)是巨大的,顯而易見(jiàn),如果SLB后端對(duì)接多個(gè)運(yùn)行相同功能服務(wù)的ECS,可滿足高可用和吞吐量水平擴(kuò)容的要求。同時(shí),由于ECS不直接暴露在公網(wǎng),可避免一系列由ECS操作系統(tǒng)漏洞帶來(lái)的安全性問(wèn)題。此時(shí),作為后端服務(wù)的ECS甚至無(wú)需公網(wǎng)IP,也就可以配置為前文提及的“內(nèi)網(wǎng)ECS”模式——將固定帶寬直接配置為 0Mbps。關(guān)于 SLB 的使用方式,在本系列的下一篇文章,還會(huì)詳細(xì)介紹。

是否可將所有ECS都配置為無(wú)公網(wǎng)IP的內(nèi)網(wǎng)ECS呢?

從實(shí)際操作情況看,往往做不到,有如下幾個(gè)原因:

  • 除使用阿里云提供的ECS控制臺(tái)外,一般還需要登錄到ECS上,通過(guò)圖形界面或命令行進(jìn)行操作。即便是在全Linux組成的系統(tǒng)中,還是至少需要一臺(tái)能通過(guò)公網(wǎng)訪問(wèn)的服務(wù)器,來(lái)作為登錄跳板機(jī),使用 ssh 或類似方式,手動(dòng)登錄到組內(nèi)的任何一臺(tái)ECS上
  • 公網(wǎng)帶寬為0Mbps的ECS,除了公網(wǎng)不能直接到達(dá)外(不能直接入站),它本身也不能直接訪問(wèn)公網(wǎng)(不能直接出站)。這一限制,通常不會(huì)帶來(lái)問(wèn)題,因?yàn)樗械陌⒗镌飘a(chǎn)品,包括 RDS、OSS、云數(shù)據(jù)庫(kù) Redis,消息隊(duì)列等在內(nèi),都有內(nèi)網(wǎng)地址,均能通過(guò)內(nèi)網(wǎng)訪問(wèn)或僅支持內(nèi)網(wǎng)訪問(wèn)。但如ECS上運(yùn)行的后端服務(wù)需要訪問(wèn)非阿里云產(chǎn)品的公網(wǎng)服務(wù),例如:第三方短信平臺(tái)、百度系開(kāi)放平臺(tái)、騰訊系開(kāi)放平臺(tái),則ECS必須能夠有公網(wǎng)的訪問(wèn)能力。

綜上,如ECS僅作為運(yùn)維跳板機(jī)使用,可確定帶寬計(jì)費(fèi)方式必然是選擇“按使用流量”劃算,大致估算運(yùn)維操作中,可能的最大下載(對(duì)ECS來(lái)說(shuō)是出站帶寬)需求,即可確定最大網(wǎng)絡(luò)帶寬的數(shù)值。若是后端服務(wù)需要對(duì)公網(wǎng)進(jìn)行訪問(wèn)的,如果訪問(wèn)操作較為均勻,建議采用“固定帶寬”方式;若訪問(wèn)操作時(shí)機(jī)及所需帶寬隨機(jī)性較大,則還是采用“按使用流量”計(jì)費(fèi)為妥。
另外,如需搭建內(nèi)容下載型業(yè)務(wù),從帶寬成本和體驗(yàn)考慮,應(yīng)優(yōu)先考慮使用阿里云CDN,而非直接通過(guò)ECS或SLB提供下載服務(wù)。

2.6 延伸問(wèn)題:?jiǎn)闻_(tái)ECS運(yùn)行多少服務(wù)實(shí)例合適

在微服務(wù)架構(gòu)中,一個(gè)基本的事實(shí)是:相比于大單體,會(huì)存在多得多的獨(dú)立服務(wù)進(jìn)程,或稱之為“服務(wù)實(shí)例”。那么,到底該如何將這些服務(wù)實(shí)例分配到服務(wù)器中去:是盡量在低配ECS上運(yùn)行單實(shí)例,還是將更多的實(shí)例納入到CPU核數(shù)和內(nèi)存都更多的高配ECS中去運(yùn)行?為后面行文方便,我們將這一概念稱為:ECS/實(shí)例 配比策略,前者定義為:1:1配比,后者定義為:1:N配比。
讓我們來(lái)簡(jiǎn)單測(cè)算下分別采用兩種不同的ECS/實(shí)例 配比策略的成本開(kāi)銷。由于目前阿里云中ECS的最低配實(shí)例就是1核1G內(nèi)存的,我們假定單服務(wù)實(shí)例使用1G內(nèi)存,一共有12個(gè)這樣的服務(wù)實(shí)例需要運(yùn)行,在該假設(shè)情況下,成本對(duì)比為:

ECS/實(shí)例 配比策略 低配ECS運(yùn)行單實(shí)例(1:1) 高配ECS運(yùn)行多實(shí)例(1:N)
單實(shí)例內(nèi)存資源消耗 1G 1G
整系統(tǒng)所需實(shí)例數(shù) 12 12
單臺(tái)ECS配置 1核1G 2核16G
所需ECS數(shù)量 12 1
單ECS成本【注2】 ¥459.00/年 ¥5079.60/年
購(gòu)買ECS總成本(元) ¥5508 ¥5079.60

ECS/實(shí)例配比策略比較(1)

從上表看,1:1配比相對(duì)于1:N配比策略,每年就要多花費(fèi)428.4元。更進(jìn)一步,由于微服務(wù)架構(gòu)更鼓勵(lì)單服務(wù)實(shí)例專注于實(shí)現(xiàn)單個(gè)業(yè)務(wù)功能,因此,將單服務(wù)實(shí)例基于異步IO和異步接口模式充分優(yōu)化后,內(nèi)存消耗能降到更低。在 《Netty 內(nèi)存管理探險(xiǎn): PoolArena 分配之謎》 一文中,就引用了我司在生產(chǎn)系統(tǒng)中的實(shí)際案例:xharbor (API 網(wǎng)關(guān))可配置為 128M堆內(nèi)存(Heap)加上 96M堆外直接內(nèi)存(Direct)總計(jì) 使用 224M系統(tǒng)內(nèi)存來(lái)運(yùn)行。
目前,我司生產(chǎn)系統(tǒng)的不同類型服務(wù)實(shí)體已經(jīng)多達(dá)30+,按照30種服務(wù)類型算,為確保高可用性,每種服務(wù)實(shí)體都至少運(yùn)行兩個(gè)實(shí)例,因此總計(jì)有60個(gè)同時(shí)運(yùn)行的實(shí)例,按照單個(gè)實(shí)例消耗 250M 內(nèi)存來(lái)再次測(cè)算整個(gè)后端系統(tǒng)運(yùn)行1年時(shí)間的所需的ECS成本,兩種配比策略對(duì)比如下:

ECS/實(shí)例 配比策略 低配ECS運(yùn)行單實(shí)例(1:1) 高配ECS運(yùn)行多實(shí)例(1:N)
單實(shí)例內(nèi)存資源消耗 250M 250M
整系統(tǒng)所需實(shí)例數(shù) 60 60
單臺(tái)ECS配置 1核1G 2核16G
所需ECS數(shù)量 60 2【注3】
單ECS成本【注2】 ¥459.00/年 ¥5079.60/年
購(gòu)買ECS總成本(元) ¥27540 ¥10159.2

ECS/實(shí)例配比策略比較(2)

此時(shí),1:N配比策略的成本僅為 1:1 配比成本的37%。很明顯,這是由于在1:1配比策略下,大量的系統(tǒng)內(nèi)存資源被浪費(fèi)了。在上面的兩次測(cè)算中,細(xì)心的讀者應(yīng)該已經(jīng)注意到,我們忽略了CPU資源的占用差異,在第二次測(cè)算的1:N配比策略下,每個(gè)服務(wù)實(shí)例只能分?jǐn)偟?1/15 核的CPU資源。但大多數(shù)情況下,后端服務(wù)由于是IO密集型服務(wù),所占用的CPU資源較低,一般不會(huì)成為系統(tǒng)瓶頸。另一方面,阿里云及其合作伙伴提供了相當(dāng)多的標(biāo)準(zhǔn)計(jì)算密集型服務(wù),包括:圖像裁剪、識(shí)別,語(yǔ)音識(shí)別,視頻轉(zhuǎn)換,大數(shù)據(jù)分析等,其投入/產(chǎn)出成本相比于自行搭建更為低廉。如業(yè)務(wù)中用到上述功能,建議優(yōu)先考慮花錢購(gòu)買標(biāo)準(zhǔn)服務(wù)來(lái)解決問(wèn)題。
相對(duì)于顯性的采購(gòu)成本,隱性的ECS運(yùn)維成本,往往更容易被決策者所忽略。更多的ECS數(shù)量意味著更多的運(yùn)維行為和更多的系統(tǒng)級(jí)監(jiān)控,也就意味著更多的人力成本投入。運(yùn)維系統(tǒng)的自動(dòng)化程度越高,運(yùn)維上的人力成本投入會(huì)越低,但這也同時(shí)帶來(lái)了較多的基礎(chǔ)研發(fā)投入。哪怕是有著阿里云強(qiáng)大的產(chǎn)品控制臺(tái)和OpenAPI作為基礎(chǔ),從我司的實(shí)踐來(lái)看,這里也是一個(gè)需要精兵強(qiáng)將投入的“艱巨戰(zhàn)場(chǎng)”。

當(dāng)然1:N配比策略也有需要謹(jǐn)慎處理的不足之處

  • 由于計(jì)算資源沒(méi)有被隔離,存在由單個(gè)服務(wù)實(shí)例負(fù)載異常造成整臺(tái)ECS緩慢的問(wèn)題,這就需要更為實(shí)時(shí)和靈敏的業(yè)務(wù)監(jiān)控系統(tǒng)來(lái)及時(shí)發(fā)現(xiàn)此類問(wèn)題,給短期的手工解決贏得時(shí)間,給長(zhǎng)期的自動(dòng)化處理找到線索;
  • 由于網(wǎng)絡(luò)資源沒(méi)有隔離,多個(gè)服務(wù)實(shí)例的接入端口必須分離,最好是由操作系統(tǒng)自動(dòng)分配(對(duì)于Socket編程來(lái)說(shuō),就是將綁定的端口值設(shè)置為0)。因此,即便是物理位置相同的服務(wù)實(shí)例,它的每次運(yùn)行,服務(wù)端口都會(huì)不同,這也是微服務(wù)架構(gòu)中需要解決的核心問(wèn)題之一:服務(wù)發(fā)現(xiàn)。
  • 同樣由于系統(tǒng)/網(wǎng)絡(luò)資源沒(méi)有隔離,單個(gè)服務(wù)實(shí)例的網(wǎng)絡(luò)入站或出站流量過(guò)大,也會(huì)影響同ECS上的其它實(shí)例正常提供服務(wù),還有諸如TCP連接數(shù)占用過(guò)多,系統(tǒng)文件句柄占用過(guò)多等問(wèn)題。這就需要在微服務(wù)的統(tǒng)一開(kāi)發(fā)框架中提前埋入相關(guān)監(jiān)控點(diǎn),并配合業(yè)務(wù)指標(biāo)監(jiān)控系統(tǒng)及時(shí)排查、準(zhǔn)確定位發(fā)生異常的業(yè)務(wù)模塊。

綜上,借用《人月神話》中的一句名言:“No Silver Bullet 沒(méi)有銀彈”。在實(shí)踐中,我們往往根據(jù)微服務(wù)中不同功能實(shí)例的特性,混合使用1:1和1:N這兩種配比策略:對(duì)于業(yè)務(wù)負(fù)載較小的服務(wù)實(shí)例,在確保高可用性的前提下(相同功能服務(wù)的多個(gè)實(shí)例部署在不同ECS上),盡量合用單臺(tái)高配ECS;而對(duì)于業(yè)務(wù)負(fù)載繁重或是業(yè)務(wù)負(fù)載變化較大的服務(wù)實(shí)例,可以部署在單臺(tái)匹配負(fù)載需求的ECS上,確保其承載能力,同時(shí)也隔離其負(fù)載的劇烈變化。
說(shuō)句題外話,讓技術(shù)人員能根據(jù)系統(tǒng)的“個(gè)性特點(diǎn)”來(lái)調(diào)整部署方式,用較小的投入,獲得最大的產(chǎn)出,這不正是研發(fā)團(tuán)隊(duì)?wèi)?yīng)該追求的技術(shù)成就感嗎?

注2:ECS采用系列I,非I/O優(yōu)化實(shí)例,且?guī)捙渲脼?0Mbps
注3:同類型服務(wù)的兩個(gè)實(shí)例各自運(yùn)行在不同的ECS上,互為熱備,來(lái)確保高可用性;此時(shí),每個(gè)高配ECS運(yùn)行30個(gè)實(shí)例,共計(jì)需要 0.25G × 30 = 7.5G 內(nèi)存,除保留給操作系統(tǒng)2G的運(yùn)行內(nèi)存外,實(shí)際還有6.5G的內(nèi)存資源可運(yùn)行更多的服務(wù)實(shí)例

2.7 最后一個(gè)問(wèn)題:ECS購(gòu)買后的配置變更

給各位耐心讀到此處的讀者吃個(gè)定心丸。ECS購(gòu)買后,還可以有限的變更配置。參照阿里云相關(guān)文檔總結(jié)如下:

  1. 按量付費(fèi)ECS不支持變更配置。這個(gè)能理解,如果配置不合適,直接釋放,重新購(gòu)買即可;
  1. 包年包月支持有限度的配置變更,具體如下:
    • 獨(dú)享型實(shí)例外,對(duì)實(shí)例規(guī)格可隨時(shí)進(jìn)行升級(jí),包括 CPU、內(nèi)存、基礎(chǔ)帶寬進(jìn)行升級(jí)。升級(jí)實(shí)例規(guī)格后需要在控制臺(tái)重啟實(shí)例;
    • 不能隨時(shí)降配,但可以續(xù)費(fèi)降配。降配后的新配置會(huì)在新的續(xù)費(fèi)周期內(nèi)生效。當(dāng)前剩余服務(wù)期限內(nèi)配置不會(huì)發(fā)生改變;
    • 提交續(xù)費(fèi)降配操作后,當(dāng)前剩余服務(wù)期限內(nèi)將不再支持升級(jí)和降配功能;
    • 升降配的時(shí)候,實(shí)例規(guī)格族不能互換,只能選擇同一規(guī)格族中的相關(guān)規(guī)格;
    • 升降配前后,公網(wǎng)和內(nèi)網(wǎng)的 IP 地址不會(huì)改變。
好吧,最后還有一個(gè)小問(wèn)題

操作系統(tǒng)鏡像:我們理所當(dāng)然 強(qiáng)烈推薦 Unix Like 系的:CentOS、CoreOS、FreeBSD ... 啥都行,只要你熟悉。


總結(jié)
在本文中,我們結(jié)合架構(gòu)(主要是微服務(wù)架構(gòu)),重點(diǎn)探討分析了阿里云ECS的選型和購(gòu)買的細(xì)節(jié),但也挖了不少坑,包括 SLB、OSS、CDN 等相關(guān)產(chǎn)品。下一篇文章,將會(huì)一并填坑。(TO BE CONTINUED... I WILL BE BACK)

不多解釋了 :)

參考資料:
阿里云產(chǎn)品文檔:安全組使用FAQ
阿里云產(chǎn)品文檔:VPC專用網(wǎng)絡(luò)常用應(yīng)用場(chǎng)景
阿里云產(chǎn)品文檔:負(fù)載均衡
阿里云產(chǎn)品文檔:對(duì)象存儲(chǔ) OSS
阿里云產(chǎn)品文檔:內(nèi)容分發(fā)網(wǎng)絡(luò) CDN

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 引言 此文集主要用來(lái)記錄我的“天眼查”爬蟲生涯,給這個(gè)時(shí)刻2018/7/20賦上歷史的Flag。 代碼部分還沒(méi)上,...
    OzanShareing閱讀 3,392評(píng)論 2 7
  • 文丨譽(yù)安 Day104@365日更營(yíng) 生活到底是一篇命題作文還是非命題作文? 如果是前者,那么按照傳統(tǒng)人設(shè)和順序自...
    革譽(yù)安閱讀 596評(píng)論 0 1
  • ?記得大潤(rùn)發(fā)被馬云收購(gòu)時(shí),創(chuàng)始人揮淚離場(chǎng)說(shuō)了一句:我們贏了所有的對(duì)手,卻輸給了時(shí)代! 大潤(rùn)發(fā)扛過(guò)了家樂(lè)福、沃爾瑪?shù)?..
    金諾卓遠(yuǎn)閱讀 647評(píng)論 0 0
  • 棟棟曉閱讀 1,284評(píng)論 0 0
  • 給定一個(gè)整數(shù)數(shù)組 nums ,找到一個(gè)具有最大和的連續(xù)子數(shù)組(子數(shù)組最少包含一個(gè)元素),返回其最大和。 示例: 輸...
    one_zheng閱讀 312評(píng)論 0 0

友情鏈接更多精彩內(nèi)容