2014-10-28 67 views
1

我使用Puma和Nginx運行我的Rubinius應用程序。按照url路徑分開的線程

我想分開我的網址請求。

第一個用於api請求,第二個用於其他請求。

我認爲Puma已經開通了線程,但我想確保web請求不會阻止某個線程在我的api請求期間導致停止。我想如果一個線程忙,Puma會創建另一個線程,但我想確保一個線程始終可用於api請求。

我的主要目的是爲網址請求「保存」一個線程,這是我的用戶最需要的。

謝謝你的光。

回答

0

由於彪馬考慮分離線程中的每個請求,這裏唯一的瓶頸就是這些線程訪問數據庫。除此之外,你不能保證某些線程比其他線程「更好」。

這裏值得注意的一個可能的解決方案是使用nginx來處理它。假設您的應用正在提供內容http://some_host.comAPI可在http://some_host.com/api內提供。您可以配置nginx分別處理http://some_host.comhttp://some_host.com/api的請求。在這種情況下,您需要兩個不同的Puma服務器實例。一個用於基本應用程序,另一個用於api請求。我的意思是當請求來到http://some_host.com時,它由Puma Ahttp://some_host.com/api/...處理,由Puma B處理。只要記住一件事,你可以通過分離的實例處理請求,但你仍然只有一個數據庫,除非你正在緩存內容。還有另外一個問題。你緩存你的內容嗎?如果不是,首先從緩存開始不是更好的辦法嗎?

+0

謝謝你的快速回答!在切換到Puma之前,我使用了2個Passenger(就像你爲Puma描述的那樣),但是在我看來,這不是最好的方法。我認爲這有點髒。我對你所說的'some_host.com'和'some_host.com/api'完全一樣。 API請求正在進行流式傳輸,我無法緩存這些數據,因爲它始終是一個新內容。我想確保一個Web請求不會阻止流式傳輸(例如在上傳一個大文件時)。 – BriceB 2014-10-28 16:57:51

+0

我看,有趣的情況。你流什麼? – blelump 2014-10-28 17:06:14

+0

音樂,視頻和很多新的內容。 – BriceB 2014-10-28 19:54:40

0

爲什麼不拆分主應用程序和API?這很容易成爲兩個不同的應用程序與Nginx的:

location/{ 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 
    proxy_pass  http://puma1; 
    } 


    location /api/ { 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 
    proxy_pass  http://puma2/; 
    } 

請支付的關注斜槓第二位點proxy_pass,它有助於改寫請求和忽略「/ API」前綴。