Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

गोलांग + रेडिस समवर्ती अनुसूचक प्रदर्शन मुद्दा

सतही स्तर पर केवल एक चीज जिसके बारे में मेरे पास प्रश्न हैं, वह है प्रतीक्षा समूह को बढ़ाने का आदेश देना और कार्य को संलग्न करना:

func (s *Scheduler) Enqueue(req interface{}) {
    select {
    case s.reqChan <- req:
        s.wg.Add(1)
    }
}

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

आगे क्या आप सुनिश्चित हैं कि process विधि थ्रेडसेफ है ?? मुझे लगता है कि रेडिस गो डॉक्यूमेंटेशन के आधार पर, go run -race . के साथ चल रहा है कोई आउटपुट है?

कुछ बिंदु पर यह पूरी तरह से उचित है और प्रदर्शन के बंद होने की उम्मीद है। मैं यह देखने के लिए प्रदर्शन परीक्षण शुरू करने की अनुशंसा करता हूं कि विलंबता और थ्रूपुट कहां से शुरू होते हैं:

शायद 10, 100, 500, 1000, 2500, 5000, 10000, या जो कुछ भी समझ में आता है उसका पूल। IMO ऐसा लगता है कि ट्यून करने के लिए 3 महत्वपूर्ण चर हैं:

  • कार्यकर्ता पूल आकार
  • कार्य कतार बफर आकार
  • रेडिस MaxActive

सबसे बड़ी बात यह है कि यह रेडिस जैसा दिखता है। पूल को असीमित संख्या में कनेक्शन की अनुमति देने के लिए कॉन्फ़िगर किया गया है:

 pool := &redis.Pool{
        MaxIdle:     50,
        IdleTimeout: 240 * time.Second,
        TestOnBorrow: func(c redis.Conn, t time.Time) error {
            _, err := c.Do("PING")
            return err
        },
        Dial: func() (redis.Conn, error) {
            return dial("tcp", address, password)
        },
    }
<ब्लॉकक्वॉट>

// एक निश्चित समय में पूल द्वारा आवंटित कनेक्शन की अधिकतम संख्या।// शून्य होने पर, पूल में कनेक्शन की संख्या की कोई सीमा नहीं होती है। MaxActive int

मैं व्यक्तिगत रूप से यह समझने की कोशिश करूंगा कि आपके वर्कर पूल के आकार के संबंध में प्रदर्शन कहां और कब कम होना शुरू होता है। इससे यह समझना आसान हो सकता है कि आपका कार्यक्रम किससे बाधित है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Django Celery कार्य के अंदर db पोस्टग्रेज को क्वेरी नहीं कर सकता है

  2. Express.js क्या है?

  3. रेडिस में पाइपलाइन का उपयोग करते समय 100,000 रिकॉर्ड के साथ इतना धीमा क्यों है?

  4. मेमकैच बनाम जावा मेमोरी

  5. रेडिस दृढ़ता के साथ मासट्रांसिट गाथा देता है मेथड एक्पेट में कार्यान्वयन अपवाद नहीं है