有關云可移植性的三個考量:二微服務架構?
在這一系列文章中,我們將從架構、設計等不同方面來探討,在云的可移植性方面,具體都需要考慮哪些細節問題,如何最大限度避免云時代的技術鎖定,充分發揮云的靈活性優勢。
延伸閱讀,了解 Akamai cloud-computing
出海云服務,選擇Akamai cloud-computing!
下文將簡要探討云原生和容器技術。歡迎點擊這里回顧上篇內容,了解云原生和容器技術在云可移植性方面的注意事項。
微服務應該是可擴展的,并且是專注于單一職能的,由每個自包含的模塊化單元負責處理一個更大規模系統中的一個特定功能,而大型應用程序往往就可以由這種模塊化的組件或服務(如容器或無服務器計算)構建而成。
我們可以將微服務看作由不同部門、預算和要求組成的業務。每年,這些要求都會根據公司需求的變化而變。隨著時間推移,我們的應用程序也會面對不斷變化的要求,其中的某些方面可能會產生更多需求,有些方面則需要我們投入更多關注。此外,應用程序中的不同方面可能還需要進行不同程度的擴展或縮放。微服務可以幫助我們在不影響其他方面的情況下,以獨立的方式對應用程序中的某些方面進行縮放或擴展。
相信大家都還記得編程領域所謂的“單一職責原則”(Single responsibility principle)。微服務在這方面也是一樣的。微服務應該只負責做一件事,并且做好這件事。當然,通過使用微服務,我們還能在彈性和容錯能力方面獲得一些固有的好處。微服務架構旨在通過將故障約束到單個服務來防止出現影響整個系統的故障。如果出現特定故障,我們將知道故障位于哪里,并能在不影響其他東西的情況下解決這種故障。
另外還要注意可發現(Discoverable)問題。通過使用諸如HashiCorp的Consul這種服務網絡解決方案,我們將能知道新服務何時上線,并能使用一個集中的系統充當服務目錄,從而定義這些服務的用途以及服務之間的通信方式。
為何使用微服務
- 更快的上市時間:微服務可以并行開發和部署多個組件,從而加速整體開發流程,縮短交付新功能所需的時間。
- 提高可擴展性:微服務可以獨立擴展,從而讓企業更高效地分配資源,同時更高效地處理不同工作負載或流量模式。
- 增強彈性:微服務去中心化的本質特性降低了系統范圍內故障的風險,保證了持續的服務可用性以及更高的系統整體可靠性。
- 靈活性和適應性:微服務可以讓企業為不同組件使用不同技術和框架,從而更容易適應不斷變化的需求或融入新技術。
- 簡化維護和更新:微服務的模塊化設計簡化了系統的維護和更新,因為每個組件都可以在不影響整體系統的前提下單獨升級或替換。
微服務最佳實踐
保持微服務規模小巧、專注于負責單一業務能力,這一點至關重要。這樣我們才能輕松添加額外的功能并避免蔓延。然而,每個微服務的理想規模是多少,這并沒有什么明確標準,這需要我們根據具體應用及實際需求來決定。
我們還需要針對失敗進行相關設計。雖然多個服務和微服務運行過程中,按照設計本身就具備與生俱來的容錯能力,但額外的設計可以增加額外的彈性,例如重試機制、斷路器以及隔板。想象一下船舶為什么會安裝隔板。這些隔板可以保證船舶的結構完整性,而如果船艙漏水,隔板關閉,也可以保證船不會沉沒。很多基于事件驅動的架構使用了一種所謂的死信隊列(Dead letter queue),如果某條消息無法傳遞,就會被放入一個特殊的隊列,接下來就可以檢查該隊列中的消息來確定失敗原因。
微服務應該圍繞領域驅動(Domain-driven)的設計原則來設計,這意味著要基于業務能力對服務建模,并使用通用語言來保障服務符合業務需求。領域驅動的設計側重于圍繞對業務的深入理解來打造軟件系統,其原則有助于指導設計過程,確保軟件與領域保持一致且能為業務提供價值。這些原則共同促進了對業務領域的深入理解,有助于確保開發工作能與業務需求和不斷變化的要求緊密契合。
采取以API為先的方法進行設計并實現API網關,借此即可提供中央連接點,從而促進微服務和第三方子系統之間的通信。API網關負責處理大部分路由工作,以及身份驗證、認證、速率限制等工作。API的設計模式對于微服務的模塊化和可復用能力至關重要。
此外對于微服務,還有下列這些最佳實踐:
- 自動化測試和部署:使用持續集成和持續部署(CI/CD)管道等自動化工具測試和部署微服務,從而降低錯誤風險,確保以快速、一致的方式部署服務。
- 使用容器:容器提供了一種輕量級、可移植的方式來打包和部署微服務。使用容器有助于簡化部署流程,改善應用程序的可擴展性和可移植性。
- 監視和觀察:微服務需要不斷監視和記錄,以確保按照預期運行,并及時發現存在的問題或錯誤。日志聚合器和應用程序性能監視(APM)工具可以幫助我們做到這一切。通過跟蹤,我們還可以進一步了解分布式系統中的數據流。這三大能力有助于針對性能獲得端到端的可見性。
- 保護服務:應通過身份驗證、認證授權、加密等最佳實踐措施保護微服務的安全,當然,容器本身的安全性也不容忽略!為減小整體攻擊面,我們應該通過強制執行的策略來定義微服務能與其他服務通信的內容。安全性應該成為所有設計工作的一部分,并且需要在開發過程的每個階段進行徹底的檢查,這樣才能獲得更安全的應用程序,并妥善保護敏感數據。
這篇文章的內容感覺還行吧?有沒有想要立即在 Linode 平臺上親自嘗試一下?別忘了,現在注冊可以免費獲得價值 100 美元的使用額度,快點自己動手體驗本文介紹的功能和服務吧↓↓↓
歡迎關注Akamai ,第一時間了解高可用的MySQL/MariaDB參考架構,以及豐富的應用程序示例