2017-07-15 136 views
-1

我的公司使用Go來構建一些HTTP API服務。我們希望這些服務共享一個HTTP端口。如何使用golang微服務?

所以現在的解決方案是我們創建了一個名爲路由器一些模塊項目,以及路由器進口,每個請求通過路由器自己的模塊。
但問題是,如果其中一個模塊進程崩潰,路由器就會崩潰。

有沒有解決方法?

要求:

  1. 一個HTTP端口。
  2. 每項服務都是獨立的。

我知道go-kit和go micro,我也試過了,但還是不太明白。

+1

微軟通常比他們的價值更麻煩。作爲一般規則,當_teams_之間的維護開銷妨礙軟件開發時,您應該只使用微服務。然後,你應該爲每個團隊寫一個微服務。 如果您只關心模塊崩潰,只需使用「recover」來捕捉恐慌。 – Flimzy

回答

0

Go-kitgo-micro是寫微服務,它不會解決你的問題。

你應該在你的應用程序的前端使用反向代理,比如Nginx的:https://www.nginx.com/resources/admin-guide/reverse-proxy/

這裏是你想要做什麼nginx的配置文件的例子:

server { 
    listen 80 default_server; 
    server_name your-domain; 

    location /app1 { 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_pass http://localhost:3000; 
    } 

    location /app2 { 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_pass http://localhost:4000; 
    } 
} 

這樣,你仍然部署在不同的端口的應用程序,但他們將只通過該端口80

+0

很棒的回答。這個問題尖叫反向代理。 – Zahymaka

0

暴露你所尋找的是一個API網關。 API網關也是反向代理的一種形式。我已經研究過像Tyk,Traefik和Zuul這樣的完整解決方案,它們都是很好的解決方案。當然,你可以使用Nginx,但是你可能需要使用Lua腳本來進行整合,例如OpenID-Connect/OAuth客戶端進行授權等。需要考慮的另一件事是安全性,日誌記錄,指標,速率限制,(動態路由)等等。我真的不會將我的API網關基於Nginx。 Nginx-Plus包含一個API網關,但需要付款。

我目前工作的一個非常大的項目,並發現它需要的插件上面提到的解決方案的形式大量的定製工作。事實上,我從頭開始編寫我的API網關(使用Golang和庫)會容易得多。

既然你提到你已經嘗試去-kit和微觀,我建議你嘗試Traefik因爲它是非常簡單的設置,幷包括方便的Web UI。

0

,我用來舉辦圍棋微服務在Windows中,只需運行go install <main-package-file>其生成的exe文件爲Windows的一種方法。然後我簡單地使用SC創建一個Windows服務。然後,將其作爲正常的Windows服務運行。這種方式,我不需要Nginx或任何這樣的引擎..