模塊化的由小的組件或服務組成的應用程序,即所謂的微服務,正在取代傳統的單一應用程序。盡管微服務的做法非常適合云,但微服務所擁有的優缺點是所有企業都應該考慮的問題。
基于微服務應用的一個最大的優點是,它們往往比傳統的應用程序更有效地利用計算資源。這是因為它們通過擴展組件來處理功能瓶頸問題。這樣一來,開發人員只需要為額外的組件部署計算資源,而不需要部署一個完整的應用程序的全新迭代。最終的結果是有更多的資源可以提供給其它任務。
微服務應用程序的另一個好處是,它們更快且更容易更新。當開發者對一個傳統的單體應用程序進行變更時,他們必須做詳細的QA測試,以確保變更不會影響其他特性或功能。但有了微服務,開發者可以更新應用程序的單個組件,而不會影響其他的部分。測試微服務應用程序仍然是必需的,但它更容易識別和隔離問題,從而加快開發速度并支持DevOps和持續應用程序開發。
第三個好處是,微服務架構有助于新興的云服務,如事件驅動計算。類似AWS Lambda這樣的功能讓開發人員能夠編寫代碼處于休眠狀態,直到應用程序事件觸發。事件處理時才需要使用計算資源,而企業只需要為每次事件,而不是固定數目的計算實例支付。
使用微服務的缺點
盡管有種種優點,微服務架構也受到了一些批評。
雖然微服務架構將應用分解成開發人員可以更輕松地管理和擴展的組件,但它們并不會讓整個應用程序變得更容易構建。微服務應用程序仍然需要提供相同的功能,并執行與整體相當的功能。
更重要的是,在一個應用中的各個微服務組件使用API來交換數據。API的改變可能引入差錯,例如API版本之間消息格式的差異。此外,由于更多的組件試圖交換信息,可能會發生網絡擁塞。
其次,測試和部署微服務的應用程序也可能更復雜。推出微服務的應用程序不只是運行一個.exe文件的問題。相反,一個微服務部署通常要求一個詳細的腳本進行提供,加載,邏輯連接,然后啟動必要的虛擬化實例組件。這是一個復雜的過程,而要移植這樣的部署則更具挑戰性。
最后,許多微服務的應用程序使用的補充服務,如負載均衡,自動擴展和事件驅動計算,這使得開發者依賴于云提供商提供的可用性和性能。這種對外部服務和API的相互依賴也可導致可靠性和版本的問題。
微服務為軟件開發人員提供了一個新的模式,使他們能夠將復雜的企業應用開發成一系列的相關功能組件。雖然這些組件對于云部署來說很理想,但開發人員必須在部署之前仔細權衡微服務的優點和缺點。