2015-02-08 7 views
11

के साथ भार संतुलन मैं चैट की एक विकास परियोजना में शामिल हूं जहां हम node.js, socket.io (कमरे) और mongodb का उपयोग कर रहे हैं। हम प्रदर्शन परीक्षण के चरण में हैं और यदि सिस्टम को लोड संतुलन की आवश्यकता है तो हम बहुत चिंतित हैं।चैट प्रोजेक्ट - socket.io

अगर हमारी परियोजना को इसकी आवश्यकता है तो हम कैसे विकसित कर सकते हैं? Nginx पर शोध किया J'a अच्छा लग रहा है, लेकिन हम संदेह है कि क्या के रूप में कैसे प्रणाली एक चैट हो जाएगा हमारे समस्या का हल है, हम डर सर्वर ~ सही ढंग से एक दूसरे के साथ बात कर ~ नहीं हैं ...

हम कहाँ करना अगर हमें लोड संतुलन की आवश्यकता है तो जाओ?

उत्तर

9

यह सुनिश्चित करने के लिए कि हम एकाधिक नोड्स को स्केल कर सकते हैं लेकिन विभिन्न ग्राहकों और विभिन्न सर्वरों के बीच इंटरकनेक्टिविटी बनाए रख सकते हैं, मैं रेडिस का उपयोग करता हूं। यह वास्तव में उपयोग और स्थापित करने के लिए बहुत आसान है।

यह आपके सर्वर के बीच एक पब/उप प्रणाली बनाता है ताकि आपके विभिन्न सॉकेट क्लाइंट का ट्रैक रखा जा सके।

var io = require('socket.io')(3000), 
    redis = require('redis'), 
    redisAdapter = require('socket.io-redis'), 
    port = 6379, 
    host = '127.0.0.1', 
    pub = redis.createClient(port, host), 
    sub = redis.createClient(port, host, {detect_buffers: true}), 
    server = http(), 
    socketServer = io(server, {adapter: redisAdapter({pubClient: pub, subClient: sub})}); 

अधिक यहाँ पढ़ें: socket.io-redis

जहां तक ​​अलग नोड सर्वर से निपटने के रूप में, वहाँ अलग अलग दृष्टिकोण हैं।

  • एडब्ल्यूएस ईएलबी (लोचदार लोड संतुलन)
  • Nginx
  • अपाचे
  • HAProxy

दूसरों के बीच में ...

+0

मैं एडब्ल्यूएस ईएलबी का उपयोग कैसे कर सकते हैं? – Ren4n

+0

रेडिस सर्वर को कॉन्फ़िगर करने के लिए मुझे क्या करना है? AWS ELB का उपयोग करने के लिए – Ren4n

+0

, आपको एक एडब्ल्यूएस खाता चाहिए जहां आप अपने सर्वर होस्ट कर रहे हैं। आप अपने बंदरगाहों को ईएलबी के माध्यम से विभिन्न सर्वरों पर अग्रेषित कर सकते हैं। यह बहुत अच्छा है। जहां तक ​​रेडिस कॉन्फ़िगरेशन जाता है, यह सेट करना इतना आसान है। यह बहुत ज्यादा प्लग और प्ले है। इसे एक केंद्रीय सर्वर पर रखें जो आपके अन्य सर्वरों के साथ फ़ायरवॉल किया गया है। –

3

एनपीएम पैकेज mong.socket.io देखें। इसमें socket.io डेटा को mongoDB को नीचे की तरह सहेजने की क्षमता है;

{ 
    "_id" : ObjectId("54b901332e2f73f5594c6267"), 
    "event" : "join", 
    "message" : { 
      "name" : "join", 
      "nodeId" : 426506139219, 
      "args" : "[\"URAiA6mO6VbCwquWKH0U\",\"/54b6821asdf66asdasd2f0f9cd2997413780273376\"]" 
    }} 

या आप वहां वर्णित रेडिस एडाप्टर का उपयोग कर सकते हैं;

Socket.IO Using multiple nodes

तो बस nginx रिवर्स प्रॉक्सी का उपयोग और नोड प्रक्रियाओं के सभी एक दूसरे के साथ Socket.IO घटनाओं साझा करना चाहिए।