隨著多云采用的增長,開發人員需要更加小心謹慎,不要為了使用提供者本地服務而犧牲應用程序的可遷移性。
云平臺之間的應用程序可遷移性是多云策略的主要目標之一。雖然當企業只是使用IaaS提供商的基本計算功能時,這是非常簡單的,但是當企業在該部署的更高一層提供更多本地服務時,這變得更加困難。
為了保持競爭優勢,所有主要的公共云提供商都通過其他方式擴展其基本IaaS產品的功能,例如用于數據分析、事件處理和關系數據庫的一系列Web服務。開發人員可以將這些附加服務編寫到他們的云計算應用程序中,以實現各種任務,包括減少開發時間和成本,以及提供更多專業功能的能力。
雖然這些Web服務有益,但也會帶來風險。云計算提供商具有這些服務的獨特實現,即使它們在提供商之間是相似的,企業也很難采用使用Web服務的一個實現并將其插入另一個實現的應用程序組件。Web服務本身不能跨不同的云平臺遷移,這意味著企業可能會丟失信息,并創建具有不兼容性的數據。
在每個組件的基礎上,企業必須假設如果使用此類服務??,其應用程序將無法遷移。這種限制不僅適用于多云戰略中的提供商,還適用于云平臺和企業自己的數據中心。例如,企業無法通過主機邊界進行故障轉移或擴展。
克服不兼容的挑戰
Web服務不兼容有兩種:第一個也是問題最少的是提供商提供基本相同的服務,但使用不同的API。這很不方便,但其解決方案并不困難,因為它不會影響企業的整體應用程序架構。
第二種也是風險更大的Web服務不兼容性是云計算提供商以不同方式構建其實際服務的地方。然后,這不僅僅是對API調用進行更改的問題,但可能需要企業更改整個應用程序設計。
多云的應用程序設計的注意事項
在部署之前,考慮開發人員如何設計混合云和多云應用程序非常重要。這些應用程序中的大多數都有前端(如GUI)和后端,后端由特定于業務流程的元素組成。在某些情況下,特別是那些涉及微服務的情況,創建邊界(例如消息總線或消息隊列)是有用的,它可以作為前端和后端組件之間的處理點。開發人員通常會將公共云服務用于其前端,并可能在云端和數據中心之間對這些邊界元素進行一些有限的故障轉移和擴展。使用此模型作為重新考慮多云部署的基礎。
那么,如何解決這個不兼容問題呢?有三種可能的解決方案:
(1)用于云爆發和故障轉移的單獨的應用程序組件
企業希望將云爆發或故障轉移的任何應用程序組件分離到多個云平臺,并且不要將Web服務與這些特定組件集成。這可能會有問題,因為將Web服務用于應用程序的前端組件是很常見的。但是,企業不能在多云端部署中使應用程序依賴于這些Web服務的可移植或可擴展的任何部分。
(2)避免采用提供商特定的Web服務
第二種選擇是完全放棄云計算提供商的Web服務,支持可以在任何地方運行的通用行業中間件。對于幾乎每個公共云Web服務,都有一個類似的第三方或開源產品,用戶可以在多個平臺上托管。但問題是,這些產品并不總是與企業使用的云計算基礎設施緊密集成,因此可能必須為可擴展的Web前端和可擴展數據庫等開發自己的架構模型。
如果企業選擇這條路徑,請仔細研究開源云和容器技術,以查看是否可以使用OpenStack、Kubernetes或Mesos/Marathon的打包實現來構建其開放式Web服務工具包。即使軟件包不包含企業需要的所有內容,它仍然可以作為多云策略的通用托管框架。
(3)使用適配器
最后一個選項是圍繞企業使用的Web服務開發適配器,使每個服務與其應用程序兼容。如果企業使用許多提供類似Web服務的公共云提供程序,但通過不同的API,企業可以使用適配器設計模式將各種API轉換為其應用程序隨后可以使用的單個通用API。
如果提供商的Web服務的唯一區別在于API和數據模型,那么這相當容易。但是,如果Web服務存在體系結構差異,則可能必須將它們的抽象提升到使用通用適配器API完全表示的程度。在開始設計之前,請務必研究與給定功能相關的所有Web服務API的詳細信息。
這三種策略在多云策略中最小化不兼容性問題都有自己的優點。在某些情況下,企業可能希望采用所有這三種方式。但從長遠來看,可能第三種方式是企業可以采用的最好的方法。如今,云計算提供商之間的競爭日益激烈,并且這些提供商對未來的看法存在差異,這將擴大其Web服務之間的差距。而彌補這一差距的最好方法將在市場上占據上風。