2011-05-11 34 views
3

一個簡單的場景。用戶通過由一些高級框架烘焙的表單登錄(讓我們假設)並開始聊天。聊天是erlang編寫的,只有經過身份驗證的用戶纔可以參與。這意味着,每個從客戶端發送的請求(包含某個會話ID)都需要在erlang代碼中進行驗證(已驗證)。顯然erlang對登錄用戶一無所知,並且需要向框架詢問這些信息。erlang和外部認證

問題是如何設計erlang和框架之間的通信以避免造成額外的瓶頸?

我在考慮在erlang中存儲會話id。但與同步(新用戶登錄時)以及會話超時導致的頭痛有關。

回答

1

在這種情況下沒有免費的午餐。如果你將保持erlang以外的身份驗證權限,你將不得不處理所有這些頭痛的問題。您可以在erlang中提供一些緩存來提高速度,但這會成爲瓶頸,並且您還必須處理所有緩存一致性問題。恕我直言,最好的解決方案是使erlang身份驗證權威,併爲高層框架提供身份驗證。

+0

我剛剛意識到維護這種緩存的唯一問題實際上是會話超時。諸如添加新緩存條目(當用戶登錄時),刪除現有條目(當用戶註銷時)等操作很簡單,但檢測用戶會話何時到期並清除緩存似乎是一個真正的挑戰。 – Michal 2011-05-12 08:39:29

1

如果我們在談論Rails,我相信可以從Erlang連接到同一個數據庫並從會話表中檢索會話數據(假設您使用db作爲會話存儲)。你甚至可以通過這種方式將數據傳遞給Rails。

+0

這將是一個很好的解決方案(特別是在使用沙發數據庫時),但它也意味着每次請求進入時都會查詢數據庫。這是我想避免的瓶頸。 – Michal 2011-05-12 08:21:30