簡體   English   中英

如何實現可復制的子API網關?

[英]How can I implement a sub-api gateway that can be replicated?

前言

我目前正在嘗試學習微服務如何工作以及如何實現容器復制和API網關。 不過,我遇到了障礙。

我的應用程序

我為應用程序提供了三個主要服務。

  1. API網關
  2. 履帶經理
  3. 用戶

對於這個問題,我將重點介紹API GatewayCrawler Manager服務。

API網關

這是一個運行Go服務器的Docker容器。 通訊全部通過GraphQL完成。

我之所以使用API​​網關,是因為我希望應用程序中具有不同的服務,每個服務都有自己的專用API。 這是為了統一一切。

它所做的只是代理請求到其適當的服務,然后將響應返回給客戶端。

履帶經理

這是另一個運行Go服務器的docker容器。 通信是通過GraphQL完成的。

或多或少,它的行為類似於另一個API網關。 讓我解釋。

該服務希望客戶端發送如下請求:

{
   # In production 'url' will be encoded in base64
   example(url: "https://apple.example/") {
      test
   }
}

url只能鏈接到以下三個站點之一:

嚴格禁止其他任何網站。

Crawler Manager服務接收到請求並且鏈接是這三個鏈接之一后,它將決定要滿足該請求的其他服務。 因此,以這種方式,它的行為很像另一個API網關,但是很特殊。

每個URL域都有自己的專用服務來處理它。 為什么? 因為每個站點的標記相差很大,並且每個站點都需要進行爬網以獲取信息。 由於它們的標記是多種多樣的,因此我希望為它們每個提供服務,以防萬一網站被更新,整個Crawler Manager服務不會崩潰。

就查詢而言,每個站點將返回與其他站點格式相同的響應。

視覺輪廓

架構圖

問題

現在,我們對我的應用程序的工作方式有了一些了解,我想在這里討論我的實際問題。

  1. 是否具有某種輔助API網關標准和良好實踐? 有沒有更好的辦法?
  2. 如何復制該系統並具有多個Crawler Manager 服務系列實例?

我對如何實際創建此設置感到非常困惑。 我看了看Docker Swarm / Kubernetes中的集群,但是用我設置的方式看來,我需要創建集群。 這使我總體上質疑我的設計。 也許我不必考慮讓它們保持結構化?

在非常普通的級別上,如果服務A調用具有多個副本B1,B2,B3 ...的服務B,則它需要知道如何調用它們。 這兩個基本選項是擁有某種服務注冊表,該服務注冊表可以返回所有副本,然后選擇一個副本,或者將負載均衡器放在第二個服務的前面,然后直接到達該副本。 通常,設置負載平衡器要容易一些:服務調用可以是純HTTP(GraphQL)調用,在開發環境中,您可以省略負載平衡器,而直接讓一個服務調用另一個。

                                 /-> service-1-a
Crawler Manager --> Service 1 LB --> service-1-b
                                 \-> service-1-c

如果您願意使用Kubernetes,它實際上具有對這種模式的內置支持。 部署是相同Pod(容器)的一些副本,因此它將在我的圖中管理service-1-a-b-c 服務提供負載平衡器(其默認ClusterIP類型提供了只能在群集內訪問的負載平衡器)以及DNS名稱。 您可能會使用環境變量SERVICE_1_URL=http://service-1.default.svc.cluster.local/graphql配置您的搜尋器管理器窗格,以將所有內容連接在一起。

(在您的原始圖中,具有某個服務的多個副本的每個“框”將是一個Deployment,而框頂部接收到入站連接的點將是一個Service。)

在普通Docker中,您需要做更多的工作來復制它,包括手動啟動副本和負載平衡器。


在架構上,您所顯示的內容似乎還不錯。 對我而言,最大的“如果”是,您已對其進行了設計,以使您要爬網的每個站點都可能獲得多個獨立的爬網容器和不同的代碼庫。 如果這在您的情況下確實合理,則以這種方式拆分服務是有意義的,並且擁有“第二路由服務”並不是真正的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM