प्रौद्योगिकी साझेदारी

शिक्षणटिप्पणयः-वितरितवर्तमानसीमाकरणं कार्यान्वितुं Redis’ Token Bucket Algorithm इत्यस्य उपयोगः

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

टोकन बकेट एल्गोरिदम् इत्यस्य परिचयात् पूर्वं प्रथमं लीकी बकेट एल्गोरिदम् (Leaky Bucket) इत्यस्य परिचयं कुर्मः ।

लीकी बाल्टी एल्गोरिदम

लीकी बाल्टी एल्गोरिदम् एकं नियत-क्षमतायुक्तं पात्र-प्रतिरूपं भवति यत् आँकडा-प्रवाहस्य बहिर्वाहस्य च गतिं नियन्त्र्य आँकडा-स्थानांतरण-दरं सीमितं करोति । लीकी बाल्टी एल्गोरिदम् इत्यस्य मुख्यविशेषताः सन्ति : १.

  • नियतक्षमता: लीकयुक्तस्य बाल्टीयाः क्षमता नियतं भवति एकदा बाल्टी पूर्णा जातः चेत् अतिरिक्तदत्तांशः परित्यक्तः अथवा अस्वीकृतः भविष्यति।
  • निरन्तर लीक: लोटे स्थितं "जलं" (दत्तांशः) नियतवेगेन बहिः प्रवहति एव ।
  • विस्फोट निबन्धनम्: यदा लोटा पूर्णा न भवति तदा शीघ्रं विस्फोटकयानं सम्भालितुं शक्नोति, परन्तु एकदा लोटा पूर्णा भवति चेत् यातायातस्य सीमा सीमितं भविष्यति।

Redisson स्वयं प्रत्यक्षतया leaky bucket algorithm इत्यस्य कार्यान्वयनम् न प्रदाति यदि भवान् Redisson इत्यस्मिन् leaky bucket algorithm इत्यस्य कार्यान्वयनस्य आवश्यकता अस्ति तर्हि भवान् निम्नलिखितपदार्थानाम् विषये विचारं कर्तुं शक्नोति ।

  1. टोकन संग्रहणार्थं क्रमबद्धसेट् इत्यस्य उपयोगं कुर्वन्तु: रेडिस् मध्ये टोकन्स् संग्रहीतुं क्रमबद्धसेट् इत्यस्य उपयोगं कुर्वन्तु, प्रत्येकं टोकनस्य स्कोररूपेण समयमुद्रिका भवति ।

  2. टोकन योजयतु : नियतान्तरेषु क्रमबद्धसेट् मध्ये टोकन योजयन्तु, तथा च प्रत्येकस्य टोकनस्य स्कोरः योजितसमये समयमुद्रिका भवति । (निर्धारितकार्यस्य उपयोगेन योजयितुं शक्यते)

  3. टोकन प्राप्त करें: यदा अनुरोधं प्रेषयितुं आवश्यकं भवति तदा क्रमबद्धसमूहात् टोकनं निष्कासयन्तु (अथवा पॉप्) कुर्वन्तु तथा च पश्यन्तु यत् वर्तमानसमयः टोकनस्य समयमुद्रायाः प्लस् अधिकतमं अनुमतविलम्बात् अधिकः अस्ति वा इति।

  4. टोकन परित्यजतु: यदि वर्तमानसमयः टोकनस्य समयमुद्रिकां प्लस् अधिकतमविलम्बं अतिक्रमति तर्हि "जलस्य लीकेज" अनुकरणार्थं टोकनं परित्यज्यते ।

  5. वर्तमान सीमित तर्क: यदि क्रमबद्धसमूहे टोकन उपलब्धं नास्ति तर्हि अनुरोधं अङ्गीकुरुत अथवा प्रतीक्षमाणपङ्क्तौ स्थापयन्तु ।

टोकन बाल्टी एल्गोरिदम

टोकन बकेट एल्गोरिदम् अधिकं लचीलं प्रवाहनियन्त्रण एल्गोरिदम् अस्ति यत् टोकन जनयित्वा निश्चिते दरेन दत्तांशं प्रेषयितुं शक्नोति । टोकन बाल्टी एल्गोरिदम् इत्यस्य मुख्यविशेषताः सन्ति : १.

  • टोकन जननम्: नियतदरेण बाल्टीयां टोकनं जनयन्तु।
  • टोकनप्रयोगः: दत्तांशप्रेषणकाले बाल्टीस्थानां टोकनानाम् उपभोगः करणीयः यदि पर्याप्ताः टोकनाः न सन्ति तर्हि दत्तांशप्रेषणं विलम्बितं वा परित्यक्तं वा भविष्यति ।
  • अकस्मात् सामर्थ्यम्: यदा टोकन पर्याप्तं भवति तदा बृहत्तरं यातायातं प्रेषयितुं शक्यते, तदनन्तरं टोकनजननदरस्य आधारेण यातायातस्य गला रोधः भविष्यति ।

रेडिसन-रूपरेखा टोकन-बाल्टी-एल्गोरिदम्-आधारितं वर्तमान-सीमित-कार्यं प्रदाति, यत् भवितुम् अर्हति RRateLimiter अन्तरफलक कार्यान्वयन। Redisson इत्यस्मिन् token bucket algorithm इत्यस्य उपयोगस्य सरलं उदाहरणं निम्नलिखितम् अस्ति ।

  1. import org.redisson.api.RRateLimiter;
  2. import org.redisson.api.RedissonClient;
  3. // 假设redissonClient已经创建并配置好连接
  4. RRateLimiter rateLimiter = redissonClient.getRateLimiter("myRateLimiter");
  5. // 配置令牌桶参数
  6. rateLimiter.trySetRate(20, RateType.OVERALL); // 总共可以处理20个请求
  7. rateLimiter.trySetRate(1, RateIntervalUnit.SECONDS); // 每秒生成1个令牌
  8. // 尝试获取一个令牌,如果成功,返回true,否则返回false
  9. boolean acquired = rateLimiter.tryAcquire();
  10. // 使用令牌执行操作
  11. if (acquired) {
  12. // 执行受限操作
  13. } else {
  14. // 处理限流逻辑,例如重试或等待
  15. }
  16. // 关闭Redisson客户端
  17. redissonClient.shutdown();