微服務(wù)能夠?yàn)榛旌显苹蚨嘣撇渴饚泶罅康暮锰帲撬鼈円材軌驇砼c網(wǎng)絡(luò)、安全性等相關(guān)的新挑戰(zhàn)。
大多數(shù)IT企業(yè)已經(jīng)開始認(rèn)識到在開發(fā)和部署中實(shí)施軟件組件化的好處。在云中,組件化帶來了重要的優(yōu)勢,例如增加彈性和支持橫向擴(kuò)展。
微服務(wù)(即通常在應(yīng)用程序中共享的小型功能組件)能夠顯著地放大這些優(yōu)勢。但是,首先用戶必須正確地規(guī)劃、開發(fā)和部署微服務(wù)。
了解如何讓微服務(wù)起作用
如需開始規(guī)劃微服務(wù),IT團(tuán)隊(duì)需要了解微服務(wù)與以服務(wù)為導(dǎo)向架構(gòu)中應(yīng)用程序組件或元素的不同之處。微服務(wù)不是完整的應(yīng)用組件;它們是在應(yīng)用中作為服務(wù)專為共享而設(shè)計(jì)的——這意味著多個(gè)應(yīng)用能夠在同一時(shí)間內(nèi)調(diào)用微服務(wù)的單個(gè)實(shí)例。微服務(wù)也是專為使用類似于網(wǎng)絡(luò)RESTful接口而設(shè)計(jì)的。
如果微服務(wù)不符合上述定義,那么它們可能不會提供很多好處的。當(dāng)微服務(wù)能夠符合上述特點(diǎn)時(shí),用戶需要在混合云或多個(gè)云部署中維護(hù)每一個(gè)微服務(wù)。
微服務(wù)對多云網(wǎng)絡(luò)的影響
因?yàn)槲⒎?wù)是小塊的功能組件,它們可以將應(yīng)用程序分解成為對外部服務(wù)的很多個(gè)連續(xù)請求。這個(gè)用于訪問服務(wù)的網(wǎng)絡(luò)有可能引入傳輸延遲和其他網(wǎng)絡(luò)性能問題。至關(guān)重要的是,鏈接微服務(wù)和使用它們提供服務(wù)質(zhì)量(QoS)的應(yīng)用的網(wǎng)絡(luò)連接需要支持用戶體驗(yàn)。在用戶部署微服務(wù)之前,應(yīng)跨用戶的混合云或多云環(huán)境測試所有負(fù)載變化下的微服務(wù)運(yùn)行性能。如果用戶的服務(wù)質(zhì)量低于可接受水平,那么可變更網(wǎng)絡(luò)連接以矯正之。另外,用戶可以設(shè)計(jì)自己的應(yīng)用部署過程以便于服務(wù)不會移動到用戶網(wǎng)絡(luò)中的盲點(diǎn)。
混合云和多云應(yīng)用中的網(wǎng)絡(luò)性能問題通常都與數(shù)據(jù)流量流經(jīng)多云、或云和數(shù)據(jù)中心以及邊界點(diǎn)的方式相關(guān)。可以與用戶的云供應(yīng)商進(jìn)行溝通,讓用戶的VPN供應(yīng)商和數(shù)據(jù)中心團(tuán)隊(duì)協(xié)力優(yōu)化網(wǎng)絡(luò)連接性。應(yīng)特別謹(jǐn)慎處理多云應(yīng)用,因?yàn)楹芏喙苍乒?yīng)商并不與其他供應(yīng)商直接相連;他們會希望連接通過用戶的VPN或數(shù)據(jù)中心網(wǎng)絡(luò)。如果在一個(gè)云中的一個(gè)應(yīng)用使用了另一個(gè)云中的一個(gè)微服務(wù),那么就存在著一個(gè)長傳輸延遲的潛在可能。如果用戶不能降低延遲時(shí)間,那么就應(yīng)盡量避免跨云供應(yīng)商網(wǎng)絡(luò)的微服務(wù)訪問。用戶可能需要在每一個(gè)云環(huán)境中都部署一個(gè)服務(wù)副本,從而避免這樣的網(wǎng)絡(luò)性能問題。
多個(gè)應(yīng)用程序訪問微服務(wù)還需要專門的優(yōu)化網(wǎng)絡(luò)。訪問微服務(wù)的最簡單方法就是假定擁有一個(gè)連接用戶所有云和數(shù)據(jù)中心的專用網(wǎng)絡(luò)。通過使用這種方法,用戶可以在任何位置部署微服務(wù),而應(yīng)用可以使用標(biāo)準(zhǔn)IP機(jī)制——URL和域名服務(wù)(DNS)或其他服務(wù)目錄方法,來讓應(yīng)用程序訪問它們。
當(dāng)微服務(wù)在不同云供應(yīng)商之間或在云供應(yīng)商與數(shù)據(jù)中心之間遷移時(shí),還會帶來另一個(gè)挑戰(zhàn)。通常情況下,這種遷移需要改變IP地址,這意味著微服務(wù)遷移后必須將服務(wù)邏輯名稱關(guān)聯(lián)不同地址。應(yīng)確保用戶有用于更換故障組件的工具和措施,從而對DNS或服務(wù)目錄項(xiàng)做出必要的修改,以便用戶的應(yīng)用程序能夠在微服務(wù)的新地址找到新服務(wù)。
安全地部署微服務(wù)
多個(gè)應(yīng)用經(jīng)常共享一個(gè)單一的微服務(wù),這一事實(shí)帶來了混合云和多云環(huán)境中的另兩個(gè)挑戰(zhàn):安全性和合規(guī)性,以及狀態(tài)和無狀態(tài)行為。
由于應(yīng)用在任何時(shí)候都在共享功能,所以具有嚴(yán)格合規(guī)性需求的應(yīng)用程序就存在著違規(guī)風(fēng)險(xiǎn)。這是因?yàn)楣蚕矸?wù)可能會為外人留下一個(gè)進(jìn)入的窗口。由于遷移微服務(wù)或在負(fù)載下復(fù)制微服務(wù)需要相當(dāng)開放的尋址方法,所以用戶需要確保每一個(gè)微服務(wù)及其訪問的安全性。避免微服務(wù)混合要求安全性和合規(guī)性監(jiān)控的功能與其他開放給更大社區(qū)的功能——讓它們成為兩個(gè)不同的微服務(wù)。
探索狀態(tài)和無狀態(tài)問題
狀態(tài)與無狀態(tài)問題是很復(fù)雜的,即便對于軟件架構(gòu)師和開發(fā)人員來說亦是如此。應(yīng)用程序通常支持包括多個(gè)步驟或狀態(tài)的交易型活動。例如,假設(shè)我們有一個(gè)被稱為“兩個(gè)數(shù)相加”的服務(wù)。如果我們在一個(gè)請求中提出第一個(gè)數(shù),在另一個(gè)請求中提出第二個(gè)數(shù),而其他用戶可能會無意中在我們的兩個(gè)數(shù)之間引入他們自己的數(shù)字,那么我們就會得到錯(cuò)誤的答案。
如果微服務(wù)無法在向它發(fā)出的請求之間保存數(shù)據(jù),那么如有需要可令請求無狀態(tài)或者確保他們能夠以某種方式傳輸狀態(tài)。在我們的例子中,提供兩個(gè)待相加的數(shù)字就可省去多次請求以及消除狀態(tài)行為風(fēng)險(xiǎn)。此外,還可以讓請求包含一個(gè)微服務(wù)能夠通過后端數(shù)據(jù)庫與狀態(tài)關(guān)聯(lián)的用戶ID。當(dāng)提出我們的第一個(gè)數(shù)時(shí),微服務(wù)將在數(shù)據(jù)庫中記錄下這個(gè)數(shù)。然后,當(dāng)提出第二個(gè)數(shù)時(shí),微服務(wù)就能夠?qū)蓚€(gè)數(shù)相加并返回結(jié)果。
對于多功能性、敏捷性和靈活性總是有一個(gè)物有所值的價(jià)格的,而在混合云和多云中使用微服務(wù)則代表著我們研究領(lǐng)先優(yōu)勢的這三項(xiàng)特點(diǎn)。仔細(xì)規(guī)劃、盡量降低價(jià)格并部署可輕松擴(kuò)展至復(fù)雜云未來的微服務(wù)。