2015-10-19 65 views
16

我們有我們的舊網站建立在用戶認證的LAMP棧上。現在我們已經爲具有實時聊天功能,視頻和論壇等的用戶構建了一個新的社交平臺,並且我們已經爲此使用了node.js。是memcache適合從Apache傳遞用戶詳細信息到Node.js

當用戶登錄其賬戶在舊網站 - 可以說,他可以點擊一個鏈接

 
www.xyz.com/social 

將帶他到這個新的Node.js的平臺上。

所以我不知道如何將用戶信息從apache傳遞到node.js - 我需要的只是用戶id,然後在node.js中 - 我可以查詢mysql表並加載用戶詳細信息。

簡單的解決方案

簡單的解決辦法就是散列的用戶ID和電子郵件和存儲哈希在內存緩存服務器密鑰,並通過用戶的細節值

 
$hash = md5($user_id+$email); 
$memcache = new Memcache; 
$memcache->connect("localhost",11211) or die ("could not connect"); 
$data = json_encode(array("id"=>$user_id,"name"=>"aaa")); 
$memcache->set("key-".$hash,$data); 

然後在鏈接傳遞散列值作爲參數,如

 
www.xyz.com/social/$$hash-value$$ 

並在節點js中 - 根據散列鍵從memcache中檢索用戶詳細信息。

1)這是馬上要處理這個問題。

2)將MEMCACHE這麼多用戶的支持,存儲數據(大約在給定時間500個用戶)從舊網站到新node.js的網站在網站內移動。

在此先感謝您的意見。

+2

如果您在php中使用cookie,並且您位於同一個域中,那麼您在nodejs應用程序中也有它們。那麼你可以從節點解碼你自己的cookie,或者用用戶的cookie對php進行http調用,讓php告訴你用戶是誰。 –

回答

7

1)這是馬上就要接近這一點。

是的,它是這樣做。但可以有更好的方法來解決這個問題:

  • as @ alex-rokabilis建議。即「cookies」,只需使用cookie分享以上 memcache密鑰。
  • 您需要在會話存儲中通過Apache和node.js共享商店詳情。

正確選擇無效條件。

2)將MEMCACHE這麼多的用戶

是的,它會支持存儲數據。
它取決於你的memcache部署,你提供了多少RAM?
計算或得到一個粗略的信徒需要多少內存來存儲500個用戶的詳細信息。一旦memcache進入交換,那麼提供這些很多請求將是memcache的痛苦。


不過,按照我對你更好的方法是堅持MySQL只

  • 用戶與LAMP堆棧驗證
  • 提供它會將Cookie md5(user-id . timestamp. KEY),並保存在數據庫中該條目。
  • 獲取的Node.js應用程序和查找MySQL表餅乾
  • 檢索數據相應
  • 在MySQL的這些查找調用的頂部添加緩存層。 (所以你可以在memcache中保留選擇性的kep-pair,也就是活動用戶的超時時間爲10秒?)
  • 當用戶註銷時,只需從MySQL表中刪除條目,並從memcache中刪除鍵。

原因

  • 如何確定超時,因爲用戶可以保持無限(或按超時)登錄到LAMP。但是,他會根據超時從node.js註銷。
  • 如果完全依賴memcache,持久性將永遠是個問題。如果您沒有在某處(MySQL)複製,您將如何在每次重新啓動內存緩存後重建密鑰對?
3

Memcache旨在成爲數據緩存服務,而不是數據傳輸服務。不能保證存儲在緩存中的值將可用於其他組件。

你試圖做的事情大部分都會工作,但是當你開始在系統上加載一些負載時,可能會出現奇怪的問題。您可能希望使用像RabbitMQ或Kafka這樣的消息隊列系統,或者將memcached與數據庫配合使用。

0

正如前面的答案所暗示的,這是一個正確的方式,存在一個瓶頸問題(負載或流量高達RAM),這可能是一個真正的問題。

我想推薦一種新方法。 您實際上不需要重現「PHP的用戶級別會話數據」。您可以立即使用它從nodejs。要達到此目的,您需要更改舊燈代碼的會話處理程序。以json格式將會話存儲在memcache中。然後直接從nodejs訪問它。因爲你沒有複製任何數據;您將節省大量RAM和I/O操作(如果將會話存儲在文件或數據庫中),您還可以節省計算能力。所有這些節省將帶給你表演。

這裏是一個示例代碼,將會話數據作爲json存儲在memcache中。

https://github.com/lboynton/memcached-json-session-save-handler/blob/master/library/Lboy/Session/SaveHandler/Memcached.php

我沒有嘗試的代碼。但我認爲你可以輕鬆應對。