2016-08-17 96 views
0

我們在多個節點上部署了RESTful服務,我們希望限制每個客戶端每分鐘爲每個客戶端配置不同配額的來自我們服務的呼叫數。我們的堆棧:Jboss應用服務器,Java/Spring RESTful服務。限制REST服務的呼叫數

什麼雲是可能的技術來實現呢?

回答

0

如果訪問您的API的唯一方法是通過您管理的UI客戶端,那麼您可以在客戶端代碼上添加一個檢查(javascript用於web應用程序)以僅在未超過限制時撥打電話由該用戶。否則就沒辦法了,因爲用戶總是可以訪問你的API,並且在服務器級別唯一可以做的事情就是檢查是否發送錯誤或有效結果作爲API響應的一部分。

-1

要限制堆棧,這意味着您需要保持狀態,至少基於某些特定的客戶端標識。這可能要求你保持一箇中央櫃檯,例如db(cassandra),它可以讓你查看每分鐘的當前請求計數,然後在java過濾器中,可以根據需要限制請求計數。

或者如果您可以跟蹤客戶端的會話,那麼您可以跟蹤並使用粘性會話,強制客戶端在客戶端會話期間使用特定節點,因此您可以簡單地在java過濾器中跟蹤數字的客戶請求,併發送503代碼或更相關的東西。

+0

這個解決方案真的很糟糕。您需要爲每個請求另外調用兩次數據庫,一次是讀取計數器,另一次是更新計數器。此外,您將應用程序和數據庫的工作量增加了很多,而且很快就會讓整個系統癱瘓。 – Matt

+0

@Matt如果你想根據DoS所要求的條件來限制請求,那麼這是一個解決方案,但是我讀到的問題是基於這樣一個事實:問題是針對配額控制,基於某種動態分配給每個客戶端定價等信息不能與ELB綁定,所以是的,我的答案在這個限制內仍然有效 – maress

5

有時候我讀了a good article where the same theme was highlighted。 的想法是這樣的邏輯轉移到負載均衡的代理,在這裏一些很好的理由這樣做:

  1. 消除技術債務 - 如果你有限速邏輯,耦合與應用程序的邏輯,你有技術債務你不需要。您可以解除並轉移債務

  2. 效率增益 - 您正在將邏輯上游卸載,這意味着您的所有計算資源都專門用於計算。您可以更好地預測

  3. 安全性 - 很明顯應用層(請求 - 響應)攻擊正在增加,包括拒絕服務。通過利用具有更高連接容量的上游代理,您可以阻止這些攻擊,因爲它們永遠不會靠近實際的服務器。

+1

這是要走的路。 @Radi,不要在你的應用程序或應用程序服務器中解決這個問題。 – Matt