जब धेरै कामदारहरूले Redis मार्फत एउटै पूल साझा गर्छन्, क्रमबद्ध सेटले सरल नीति लागू गर्न सक्छ: सबैभन्दा कम अभिलेखित बाँडफाँट भएको योग्य प्रोक्सी छान्नु। प्रोक्सी पहिचानलाई सदस्य र यसको बाँडफाँट गणनालाई स्कोरका रूपमा भण्डारण गर्नुहोस्।

अनुमति प्राप्त सार्वजनिक अनुरोध सेवा गर्ने पूलका लागि, निःशुल्क प्रोक्सी सूची ले त्यस पूलका योग्यता नियमअनुसार मूल्याङ्कन गर्न एन्डपोइन्ट उम्मेदवार दिन सक्छ। योग्य सदस्यहरूलाई सहमत सुरुवाती गणनाबाट सुरु गर्नुहोस्। त्यसपछि छनोट र वृद्धिलाई एकै सर्भर-पक्ष कार्य बनाउनुहोस्:

local chosen = redis.call('ZRANGE', KEYS[1], 0, 0)[1]
if not chosen then
    return nil
end

redis.call('ZINCRBY', KEYS[1], 1, chosen)
return chosen

क्रमबद्ध सेटको कुञ्जीलाई स्क्रिप्टको एकमात्र कुञ्जी तर्कका रूपमा तपाईंको Redis क्लाइन्टको EVAL इन्टरफेसबाट पठाउनुहोस्। खाली पूलले null नतिजा दिन्छ जसलाई अनुप्रयोगले अनुरोध नगरी सम्हाल्नुपर्छ।

दुई आदेश किन मिलाउने?

छुट्टाछुट्टै पढाइ र वृद्धिले दुई कामदारलाई कसैले अद्यावधिक गर्नुअघि एउटै न्यूनतम देख्न दिन्छ। Redis ले Lua स्क्रिप्ट अणुगत रूपमा चलाउँछ, त्यसैले अर्को कामदारले यो स्क्रिप्टको पढाइ र वृद्धिबीच छनोट घुसाउन सक्दैन। स्क्रिप्ट छोटो राख्नुहोस् किनकि यसको कार्यान्वयनले अन्य Redis काम अवरुद्ध गर्छ।

ZRANGE ले सबैभन्दा कम स्कोर पहिले फर्काउँछ; समान स्कोर सदस्य क्रमले टुंग्याइन्छ, अनियमित रूपमा होइन। ZINCRBY ले अर्को बाँडफाँटका लागि छानिएको सदस्यको स्कोर एकले बढाउँछ।

स्कोरको अर्थ परिभाषित गर्नुहोस्

यसले बाँडफाँट गणना गर्छ, जसमा पछि सञ्जाल अनुरोध असफल हुने बाँडफाँट पनि पर्छ। यसले विलम्ब, सफल अनुरोध वा हाल भइरहेको काम नाप्दैन। एकमात्र योग्य सदस्य बारम्बार छान्न अझै सम्भव छ; स्क्रिप्टले यसलाई विशेष रूपमा आरक्षित गर्दैन।

पूलको स्वास्थ्य र नीति नियमद्वारा योग्यता कायम राख्नुहोस्। यदि कुनै सदस्य हटाएर पछि पुनःस्थापित गर्नुभयो भने, यसको ऐतिहासिक गणना राख्नुपर्ने हो कि होइन निर्णय गर्नुहोस्। पुनःस्थापित प्रोक्सीलाई शून्यबाट सुरु गर्दा यो भेट्दै गर्दा बाँडफाँट यसमा केन्द्रित हुन सक्छ।

न्यूनतम-समवर्ती नीतिलाई फरक जीवनचक्र चाहिन्छ, जसमा पूर्णता र परित्यक्त कामको व्यवस्थापन समावेश छ। यो संचित गणकलाई त्यो जीवनचक्र नठान्नुहोस्।

सम्बन्धित लेखहरू