[MICROSERVICES] 訊息佇列和 REST – 採用 Go、NodeJS 和 Clean 架構的方法

WBOY
發布: 2024-08-20 06:54:41
原創
265 人瀏覽過

目錄

  • 1.簡要背景
  • 2.技術與總體架構
  • 2.1。微服務架構
  • 2.2。微服務之間的通信
  • 2.2.1。訊息隊列(非同步通訊)
  • 2.2.2。 REST API(同步通訊)
  • 2.3。乾淨的架構
  • 3.專案生態系統
  • 4.挑戰與最終考慮因素
  • 4.1。實施中的挑戰
  • 4.2。下一步
  • 4.3。結論
  • 5.參考
  • 6.免責聲明

1. 簡要背景

近年來,微服務架構已成為建立可擴展、靈活和可維護系統的熱門選擇。透過將應用程式劃分為更小的獨立服務,可以自主維護、測試和升級每個服務,從而促進可擴展性和新技術的融入。

在本文中,我們將探索使用 Go 和 NodeJS 這兩種廣泛使用的語言創建微服務架構,並且在這種情況下具有互補的特性。此外,我們將應用清潔架構的原則,這是一種旨在保持程式碼清潔、模組化且易於維護和測試的設計方法,確保業務邏輯與基礎設施問題和/或依賴項隔離。

這個計畫的目標是練習Go(我最近在學習的語言),並重新檢視微服務的基本概念。同時,我們將在服務開發中使用TypeScript,應用清潔架構的原則來強化良好的軟體設計實踐。

基於這些前提,我們將有機會探討這種方法的優點和挑戰。畢竟,並不是每個業務都需要如此複雜的結構,而實際的專案是了解其真正需求和影響的最佳方式。

2. 技術與總體架構

2.1 微服務架構

微服務架構將應用程式劃分為更小的、獨立的服務,每個服務負責功能的特定部分。這些服務透過定義明確的 API 進行通信,這有利於維護、可擴展性和新技術的採用。

好處:

模組化:方便各個服務的維護和獨立開發。
可擴展性:允許根據需求單獨擴展每個服務。
彈性:隔離故障並減少一項服務中的問題對其他服務的影響。
與整體式比較:

單體:整合到單一程式碼庫中的應用程式。雖然最初很簡單,但隨著時間的推移,它們可能會變得難以維護和擴展。

微服務:它們提供了更大的靈活性和可擴展性,但可能會增加服務之間的管理和通訊的複雜性。

2.2 微服務之間的通信

在微服務架構中,服務之間的通訊可以透過兩種主要方式完成:非同步通訊(例如使用訊息佇列)和同步通訊(透過 REST API)。值得強調的是,除了排隊和休息之外,還有其他形式的交流

2.2.1 訊息佇列(非同步通訊)

訊息佇列用於實現微服務之間的非同步通訊。它們允許服務發送和接收訊息而無需立即回應,這有助於提高系統的彈性和可擴展性。

訊息隊列的作用:

非同步通訊:促進服務之間的資訊交換,無需即時回應。
彈性:管理負載尖峰和臨時故障,確保訊息最終得到處理。

實作:

工具:RabbitMQ 和 Kafka 是管理訊息佇列的熱門選項。
整合:實作訊息佇列,用於 Go 和 NodeJS 編寫的服務之間的通信,確保高效且可擴展的資料交換。

2.2.2 REST API(同步通訊)

RESTful API 用於服務之間的同步通訊。它們基於 HTTP 原則,允許服務以標準化、高效的方式互動。

2.3 簡潔的架構

清潔架構是一種設計方法,旨在創建具有易於維護和/或測試的組織良好的程式碼庫的系統。它強調關注點分離和層獨立性。

清潔架構原則:

層分離:將程式碼劃分為不同的層(域、應用程式、基礎設施),以將業務邏輯與技術問題隔離。
獨立於框架和函式庫:確保業務邏輯不依賴特定的框架或技術。
微服務中的應用:

程式碼組織:依照清潔架構的原則建構每個微服務,以確保程式碼模組化、可測試且易於維護。
維護和演進:在不損害系統完整性的情況下促進新功能的添加和現有功能的修改。

3. 專案生態系統

在微服務生態系統中,HTTP 端點在編排文件工作流程中發揮著至關重要的作用,在這種情況下,它是一切的開始。此端點負責接收和處理建立新文件的請求。收到請求後,它將文件排隊到 Go 工作線程,後者將負責產生和處理文件。此外,端點透過訊息佇列向文件服務發出通知,通知有新資源(即文件)已進入佇列進行處理。這種方法確保了系統組件之間的高效集成,允許端點以協調和異步的方式管理文檔的創建和跟踪,而 Go 工作線程負責文檔的實際創建,並且文檔服務根據文檔中的新項目進行更新。排隊.

除了 HTTP 端點之外,系統還有兩個具有不同角色的工作人員。第一個是用 Go 實現的,負責產生文件。它使用訊息佇列中的任務,處理數據,並在處理完成後通知特定端點已完成。 Go 的效率確保了快速、穩健的處理。第二個工作進程是用 NodeJS 開發的,負責處理文件初始狀態的創建,將它們定義為「未處理」插入系統時。 NodeJS 的敏捷性允許從工作流程一開始就快速有效地管理文件狀態。

總之,所描述的系統展示了一個協調良好的文件管理流程。 HTTP 端點與 Go 和 NodeJS Workers 一起提供了一個整合且高效的解決方案,保證文件處理從創建到完成。工作人員和 REST 之間的交互反映在下面的架構圖中,該圖說明了該架構如何促進可擴展性和模組化,從而確保穩健且協調的工作流程。這種方法不僅提高了營運效率,還可以適應不同的使用場景,提供靈活性和未來的成長。

最終效果圖:

[MICROSERVICES] Message Queues e REST – Uma Abordagem com Go, NodeJS e Clean Architecture

專案儲存庫:https://github.com/williamMDsilva/microservice-poc

4. 挑戰和最終考慮因素

4.1 實施中的挑戰

使用清潔架構實現微服務架構可能會帶來一些挑戰。主要挑戰之一是對業務的深入理解,以創建真正可擴展並保持業務邏輯完整性的程式碼。乾淨的架構要求以明確分離關注點的方式建立程式碼,這需要對該領域的詳細了解才能有效地進行抽象和分離。

此外,了解 SOLID 原則也至關重要。這些原則有助於創建更具凝聚力、更少耦合的程式碼,並且對它們的深入理解可以節省大量的研究和故障排除時間。應用SOLID原則不僅可以提高程式碼質量,還可以促進系統維護和可擴充性。

就Go的具體情況而言,紮實的語言基礎可以提高程式碼的可讀性和可維護性。 Go 提供的工具和實踐有助於保持程式碼整潔和高效,更深入的知識可以在實現複雜服務時發揮作用。

Schließlich kann die Verwendung einer guten Boilerplate äußerst vorteilhaft sein. Gut gestaltete Boilerplates für saubere Architektur beschleunigen nicht nur den Entwicklungsstart, sondern stellen auch sicher, dass neue Funktionen innerhalb des ursprünglich vorgeschlagenen Standards hinzugefügt werden. Sie bieten einen Rahmen, der dabei hilft, die Codekonsistenz und -qualität während des gesamten Projekts aufrechtzuerhalten.

4.2 Nächste Schritte

Um die beschriebene Architektur voranzutreiben und zu verbessern, werden einige nächste Schritte empfohlen:

  1. Beziehen Sie Überwachungs- und Beobachtbarkeitsressourcen ein: Die Implementierung von Überwachungs- und Beobachtbarkeitstools ist für die Gewährleistung der Systemgesundheit und -leistung von entscheidender Bedeutung. Die Einbeziehung von Metriken, Protokollen und Ablaufverfolgung hilft, Probleme zu identifizieren und das Systemverhalten in der Produktion zu analysieren.

  2. Behandlungen für Nichtverfügbarkeit hinzufügen: Es ist von entscheidender Bedeutung, Mechanismen zum Umgang mit Ausfällen und Nichtverfügbarkeit einzubeziehen, wie z. B. Wiederholungsversuche, Leistungsschalter und Fallback-Strategien, um die Belastbarkeit des Systems zu erhöhen und die Kontinuität der Dienste sicherzustellen.

  3. Einheiten- und Integrationstests durchführen: Tests sind unerlässlich, um die Qualität des Codes und die korrekte Integration von Komponenten sicherzustellen. Unit-Tests überprüfen die Funktion isolierter Teile des Codes, während Integrationstests sicherstellen, dass die verschiedenen Komponenten des Systems korrekt zusammenarbeiten.

  4. Refactor-Dienste und -Module: Die Überprüfung und Umgestaltung vorhandener Dienste und Module, um sicherzustellen, dass der Code sauber, lesbar und an den Clean Architecture-Prinzipien ausgerichtet bleibt, ist eine fortlaufende Aufgabe, die die Wartbarkeit und Skalierbarkeit des Systems verbessert.

  5. Proof of Concept mit Kafka: Die Erwägung eines Proof of Concept zum Ersetzen von RabbitMQ durch Kafka kann Einblicke in die Auswirkungen verschiedener Tools auf das Projekt geben. Die Analyse der Auswirkungen auf das Servicedesign und die Gesamtarchitektur kann wertvolle Erkenntnisse für zukünftige Technologieentscheidungen liefern.

4.3 Fazit

Dieses Projekt demonstrierte die Wirksamkeit gut geplanter Architektur und die Bedeutung der sorgfältigen Umsetzung der Clean Architecture-Prinzipien. Die Verwendung von Go und NodeJS in Kombination mit Praktiken wie SOLID und der Verwendung von Nachrichtenwarteschlangen und REST-APIs trug zu einem robusten und skalierbaren System bei. Die Entwicklung und Wartung einer Microservices-Architektur stellt jedoch Herausforderungen dar, die fundierte Kenntnisse des Geschäfts und der Technologie erfordern. Die Bewältigung dieser Herausforderungen durch angemessene Planung und die Einführung bewährter Verfahren trägt dazu bei, den Aufbau effizienter und nachhaltiger Systeme sicherzustellen. Der Weg nach vorne beinhaltet die Integration kontinuierlicher Verbesserungen, wie z. B. fortschrittlicher Überwachung und neuer Konzeptnachweise, um die Architektur an die Geschäftsanforderungen und -entwicklung anzupassen.

5. Referenzen

Martin, R. C. (2008). Clean Code: Praktische agile Softwarefähigkeiten. Alta Books.

Martin, R. C. (2017). Saubere Architektur: Frameworks und Prinzipien für Software-Design. Alta Books.

RabbitMQ. (o.J.). Tutorial Zwei – JavaScript. Abgerufen von https://www.rabbitmq.com/tutorials/tutorial-two-javascript

RabbitMQ. (o.J.). Tutorial Zwei – Los. Abgerufen von https://www.rabbitmq.com/tutorials/tutorial-two-go

Haftungsausschluss

Aufgrund des akademischen Charakters und des Proof-of-Concept-Charakters dieses Projekts wurden einige Funktionen nicht implementiert und verbleiben als technische Schulden für zukünftige Studien. Bereiche wie automatisierte Tests, Fehlerbehandlung, Ressourcen-Streaming, Service-Authentifizierung und Beobachtbarkeit sind Themen, die noch erforscht werden müssen. Jede konstruktive Kritik ist willkommen und erwünscht, da sie zur kontinuierlichen Verbesserung und Vertiefung des Wissens in diesen wichtigen Bereichen beiträgt.

以上是[MICROSERVICES] 訊息佇列和 REST – 採用 Go、NodeJS 和 Clean 架構的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!