當前位置: 華文頭條 > 推薦

有關雲可移植性的三個考量:二微服務架構

2024-03-20推薦

在這一系列文章中,我們將從架構、設計等不同方面來探討,在雲的可移植性方面,具體都需要考慮哪些細節問題,如何最大限度避免雲時代的技術釘選,充分發揮雲的靈活性優勢。

下文將簡要探討雲原生和容器技術。歡迎點選這裏回顧上篇內容,了解雲原生和容器技術在雲可移植性方面的註意事項。

微服務應該是可延伸的,並且是專註於單一職能的,由每個自包含的模組化單元負責處理一個更大規模系統中的一個特定功能,而大型應用程式往往就可以由這種模組化的元件或服務(如容器或無伺服器計算)構建而成。

我們可以將微服務看作由不同部門、預算和要求組成的業務。每年,這些要求都會根據公司需求的變化而變。隨著時間推移,我們的應用程式也會面對不斷變化的要求,其中的某些方面可能會產生更多需求,有些方面則需要我們投入更多關註。此外,應用程式中的不同方面可能還需要進行不同程度的擴充套件或縮放。微服務可以幫助我們在不影響其他方面的情況下,以獨立的方式對應用程式中的某些方面進行縮放或擴充套件。

相信大家都還記得編程領域所謂的「單一職責原則」(Single responsibility principle)。微服務在這方面也是一樣的。微服務應該只負責做一件事,並且做好這件事。當然,透過使用微服務,我們還能在彈性和容錯能力方面獲得一些固有的好處。微服務架構旨在透過將故障約束到單個服務來防止出現影響整個系統的故障。如果出現特定故障,我們將知道故障位於哪裏,並能在不影響其他東西的情況下解決這種故障。

另外還要註意可發現(Discoverable)問題。透過使用諸如HashiCorp的Consul這種服務網路解決方案,我們將能知道新服務何時上線,並能使用一個集中的系統充當服務目錄,從而定義這些服務的用途以及服務之間的通訊方式。

為何使用微服務

  • 更快的上市時間: 微服務可以並列開發和部署多個元件,從而加速整體開發流程,縮短交付新功能所需的時間。
  • 提高可延伸性: 微服務可以獨立擴充套件,從而讓企業更高效地分配資源,同時更高效地處理不同工作負載或流量模式。
  • 增強彈性: 微服務去中心化的本質特性降低了系統範圍內故障的風險,保證了持續的服務可用性以及更高的系統整體可靠性。
  • 靈活性和適應力: 微服務可以讓企業為不同元件使用不同技術和框架,從而更容易適應不斷變化的需求或融入新技術。
  • 簡化維護和更新: 微服務的模組化設計簡化了系統的維護和更新,因為每個元件都可以在不影響整體系統的前提下單獨升級或替換。
  • 微服務最佳實踐

    保持微服務規模小巧、專註於負責單一業務能力,這一點至關重要。這樣我們才能輕松添加額外的功能並避免蔓延。然而,每個微服務的理想規模是多少,這並沒有什麽明確標準,這需要我們根據具體套用及實際需求來決定。

    我們還需要針對失敗進行相關設計。雖然多個服務和微服務執行過程中,按照設計本身就具備與生俱來的容錯能力,但額外的設計可以增加額外的彈性,例如重試機制、斷路器以及隔板。想象一下船舶為什麽會安裝隔板。這些隔板可以保證船舶的結構完整性,而如果船艙漏水,隔板關閉,也可以保證船不會沈沒。很多基於事件驅動的架構使用了一種所謂的死信佇列(Dead letter queue),如果某條訊息無法傳遞,就會被放入一個特殊的佇列,接下來就可以檢查該佇列中的訊息來確定失敗原因。

    微服務應該圍繞領域驅動(Domain-driven)的設計原則來設計,這意味著要基於業務能力對服務建模,並使用通用語言來保障服務符合業務需求。領域驅動的設計側重於圍繞對業務的深入理解來打造軟體系統,其原則有助於指導設計過程,確保軟體與領域保持一致且能為業務提供價值。這些原則共同促進了對業務領域的深入理解,有助於確保開發工作能與業務需求和不斷變化的要求緊密契合。

    采取以API為先的方法進行設計並實作API閘道器,借此即可提供中央連線點,從而促進微服務和第三方子系統之間的通訊。API閘道器負責處理大部份路由工作,以及身份驗證、認證、速率限制等工作。API的設計模式對於微服務的模組化和可復用能力至關重要。

    此外對於微服務,還有下列這些最佳實踐:

  • 自動化測試和部署: 使用持續整合和持續部署(CI/CD)管道等自動化工具測試和部署微服務,從而降低錯誤風險,確保以快速、一致的方式部署服務。
  • 使用容器: 容器提供了一種輕量級、可移植的方式來打包和部署微服務。使用容器有助於簡化部署流程,改善應用程式的可延伸性和可移植性。
  • 監視和觀察: 微服務需要不斷監視和記錄,以確保按照預期執行,並及時發現存在的問題或錯誤。日誌聚合器和應用程式效能監視(APM)工具可以幫助我們做到這一切。透過跟蹤,我們還可以進一步了解分布式系統中的數據流。這三大能力有助於針對效能獲得端到端的可見性。
  • 保護服務: 應透過身份驗證、認證授權、加密等最佳實踐措施保護微服務的安全,當然,容器本身的安全性也不容忽略!為減小整體攻擊面,我們應該透過強制執行的策略來定義微服務能與其他服務通訊的內容。安全性應該成為所有設計工作的一部份,並且需要在開發過程的每個階段進行徹底的檢查,這樣才能獲得更安全的應用程式,並妥善保護敏感數據。
  • 歡迎關註Akamai知乎機構號 ,第一時間了解高可用的MySQL/MariaDB參考架構,以及豐富的應用程式範例。