தமிழ்

டோக்கன் பக்கெட் வழிமுறையை மையமாகக் கொண்டு விகித வரம்பிடல் உத்திகளை ஆராயுங்கள். அதன் செயல்படுத்தல், நன்மைகள், தீமைகள் மற்றும் மீள்தன்மை மற்றும் அளவிடக்கூடிய பயன்பாடுகளை உருவாக்குவதற்கான நடைமுறை பயன்பாட்டு நிகழ்வுகளைப் பற்றி அறிக.

விகித வரம்பிடல்: டோக்கன் பக்கெட் செயல்படுத்தலின் ஒரு ஆழ்ந்த பார்வை

இன்றைய ஒன்றோடொன்று இணைக்கப்பட்ட டிஜிட்டல் உலகில், பயன்பாடுகள் மற்றும் APIகளின் நிலைத்தன்மையையும் கிடைக்கும் தன்மையையும் உறுதி செய்வது மிக முக்கியமானது. விகித வரம்பிடல் பயனர்கள் அல்லது வாடிக்கையாளர்கள் கோரிக்கைகளை அனுப்பக்கூடிய விகிதத்தைக் கட்டுப்படுத்துவதன் மூலம் இந்த இலக்கை அடைவதில் ஒரு முக்கிய பங்கைக் கொண்டுள்ளது. இந்த வலைப்பதிவு இடுகை, டோக்கன் பக்கெட் வழிமுறை, அதன் செயல்படுத்தல், நன்மைகள் மற்றும் தீமைகள் ஆகியவற்றில் குறிப்பிட்ட கவனம் செலுத்தி, விகித வரம்பிடல் உத்திகளைப் பற்றிய விரிவான ஆய்வை வழங்குகிறது.

விகித வரம்பிடல் என்றால் என்ன?

விகித வரம்பிடல் என்பது ஒரு குறிப்பிட்ட காலகட்டத்தில் ஒரு சேவையகம் அல்லது சேவைக்கு அனுப்பப்படும் போக்குவரத்தின் அளவைக் கட்டுப்படுத்தப் பயன்படுத்தப்படும் ஒரு நுட்பமாகும். இது அதிகப்படியான கோரிக்கைகளால் அமைப்புகள் பாதிக்கப்படுவதைத் தடுக்கிறது, சேவை மறுப்பு (DoS) தாக்குதல்கள், துஷ்பிரயோகம் மற்றும் எதிர்பாராத போக்குவரத்து அதிகரிப்புகளைத் தடுக்கிறது. கோரிக்கைகளின் எண்ணிக்கையில் வரம்புகளைச் செயல்படுத்துவதன் மூலம், விகித வரம்பிடல் நியாயமான பயன்பாட்டை உறுதிசெய்கிறது, ஒட்டுமொத்த கணினி செயல்திறனை மேம்படுத்துகிறது மற்றும் பாதுகாப்பை மேம்படுத்துகிறது.

ஒரு ஃபிளாஷ் விற்பனையின் போது ஒரு மின்வணிக தளத்தை கருத்தில் கொள்ளுங்கள். விகித வரம்பிடல் இல்லாமல், பயனர் கோரிக்கைகளின் திடீர் எழுச்சி சேவையகங்களை மூழ்கடித்து, மெதுவான மறுமொழி நேரங்கள் அல்லது சேவை செயலிழப்புக்கு வழிவகுக்கும். ஒரு குறிப்பிட்ட காலக்கெடுவுக்குள் ஒரு பயனர் (அல்லது IP முகவரி) செய்யக்கூடிய கோரிக்கைகளின் எண்ணிக்கையைக் கட்டுப்படுத்துவதன் மூலம் விகித வரம்பிடல் இதைத் தடுக்கலாம், இது அனைத்து பயனர்களுக்கும் ஒரு சீரான அனுபவத்தை உறுதி செய்கிறது.

விகித வரம்பிடல் ஏன் முக்கியமானது?

விகித வரம்பிடல் பல நன்மைகளை வழங்குகிறது, அவற்றுள்:

பொதுவான விகித வரம்பிடல் வழிமுறைகள்

விகித வரம்பிடலைச் செயல்படுத்த பல வழிமுறைகளைப் பயன்படுத்தலாம். சில பொதுவானவை பின்வருமாறு:

இந்த வலைப்பதிவு இடுகை டோக்கன் பக்கெட் வழிமுறையில் அதன் நெகிழ்வுத்தன்மை மற்றும் பரந்த பயன்பாட்டிற்காக கவனம் செலுத்தும்.

டோக்கன் பக்கெட் வழிமுறை: ஒரு விரிவான விளக்கம்

டோக்கன் பக்கெட் வழிமுறை என்பது எளிமை மற்றும் செயல்திறனுக்கு இடையில் ஒரு சமநிலையை வழங்கும் பரவலாகப் பயன்படுத்தப்படும் விகித வரம்பிடல் நுட்பமாகும். இது டோக்கன்களை வைத்திருக்கும் ஒரு "பக்கெட்டை" கருத்தியல் ரீதியாக பராமரிப்பதன் மூலம் செயல்படுகிறது. உள்வரும் ஒவ்வொரு கோரிக்கையும் பக்கெட்டிலிருந்து ஒரு டோக்கனைப் பயன்படுத்துகிறது. பக்கெட்டில் போதுமான டோக்கன்கள் இருந்தால், கோரிக்கை அனுமதிக்கப்படுகிறது; இல்லையெனில், கோரிக்கை நிராகரிக்கப்படுகிறது (அல்லது செயல்படுத்தலைப் பொறுத்து வரிசைப்படுத்தப்படுகிறது). ஒரு வரையறுக்கப்பட்ட விகிதத்தில் பக்கெட்டில் டோக்கன்கள் சேர்க்கப்பட்டு, கிடைக்கும் திறனை மீண்டும் நிரப்புகின்றன.

முக்கிய கருத்துக்கள்

இது எப்படி வேலை செய்கிறது

  1. ஒரு கோரிக்கை வரும்போது, வழிமுறை பக்கெட்டில் போதுமான டோக்கன்கள் உள்ளதா எனச் சரிபார்க்கும்.
  2. போதுமான டோக்கன்கள் இருந்தால், கோரிக்கை அனுமதிக்கப்பட்டு, அதற்கான டோக்கன்களின் எண்ணிக்கை பக்கெட்டிலிருந்து அகற்றப்படும்.
  3. போதுமான டோக்கன்கள் இல்லை என்றால், கோரிக்கை நிராகரிக்கப்படும் ("Too Many Requests" பிழை, பொதுவாக HTTP 429) அல்லது பின்னர் செயலாக்கத்திற்காக வரிசைப்படுத்தப்படும்.
  4. கோரிக்கை வருகையைப் பொருட்படுத்தாமல், பக்கெட்டின் கொள்ளளவு வரை, வரையறுக்கப்பட்ட மீள்நிரப்பு விகிதத்தில் அவ்வப்போது டோக்கன்கள் பக்கெட்டில் சேர்க்கப்படுகின்றன.

உதாரணம்

10 டோக்கன்கள் கொள்ளளவு மற்றும் வினாடிக்கு 2 டோக்கன்கள் மீள்நிரப்பு விகிதம் கொண்ட ஒரு டோக்கன் பக்கெட்டை கற்பனை செய்து பாருங்கள். ஆரம்பத்தில், பக்கெட் நிரம்பியுள்ளது (10 டோக்கன்கள்). வழிமுறை எவ்வாறு செயல்படலாம் என்பது இங்கே:

டோக்கன் பக்கெட் வழிமுறையைச் செயல்படுத்துதல்

டோக்கன் பக்கெட் வழிமுறையை பல்வேறு நிரலாக்க மொழிகளில் செயல்படுத்தலாம். கோலாங், பைத்தான் மற்றும் ஜாவாவில் எடுத்துக்காட்டுகள் இங்கே:

கோலாங்

```go package main import ( "fmt" "sync" "time" ) // TokenBucket ஒரு டோக்கன் பக்கெட் விகித வரம்பைக் குறிக்கிறது. type TokenBucket struct { capacity int tokens int rate time.Duration lastRefill time.Time mu sync.Mutex } // NewTokenBucket ஒரு புதிய TokenBucket-ஐ உருவாக்குகிறது. func NewTokenBucket(capacity int, rate time.Duration) *TokenBucket { return &TokenBucket{ capacity: capacity, tokens: capacity, rate: rate, lastRefill: time.Now(), } } // Allow டோக்கன் கிடைப்பதன் அடிப்படையில் ஒரு கோரிக்கை அனுமதிக்கப்பட்டுள்ளதா என சரிபார்க்கிறது. func (tb *TokenBucket) Allow() bool { tb.mu.Lock() defer tb.mu.Unlock() now := time.Now() tb.refill(now) if tb.tokens > 0 { tb.tokens-- return true } return false } // refill கடந்த நேரத்தின் அடிப்படையில் பக்கெட்டில் டோக்கன்களை சேர்க்கிறது. func (tb *TokenBucket) refill(now time.Time) { elapsed := now.Sub(tb.lastRefill) newTokens := int(elapsed.Seconds() * float64(tb.capacity) / tb.rate.Seconds()) if newTokens > 0 { tb.tokens += newTokens if tb.tokens > tb.capacity { tb.tokens = tb.capacity } tb.lastRefill = now } } func main() { bucket := NewTokenBucket(10, time.Second) for i := 0; i < 15; i++ { if bucket.Allow() { fmt.Printf("கோரிக்கை %d அனுமதிக்கப்பட்டது\n", i+1) } else { fmt.Printf("கோரிக்கை %d விகித வரம்புக்குட்பட்டது\n", i+1) } time.Sleep(100 * time.Millisecond) } } ```

பைத்தான்

```python import time import threading class TokenBucket: def __init__(self, capacity, refill_rate): self.capacity = capacity self.tokens = capacity self.refill_rate = refill_rate self.last_refill = time.time() self.lock = threading.Lock() def allow(self): with self.lock: self._refill() if self.tokens > 0: self.tokens -= 1 return True return False def _refill(self): now = time.time() elapsed = now - self.last_refill new_tokens = elapsed * self.refill_rate self.tokens = min(self.capacity, self.tokens + new_tokens) self.last_refill = now if __name__ == '__main__': bucket = TokenBucket(capacity=10, refill_rate=2) # 10 டோக்கன்கள், வினாடிக்கு 2 மீள்நிரம்பும் for i in range(15): if bucket.allow(): print(f"கோரிக்கை {i+1} அனுமதிக்கப்பட்டது") else: print(f"கோரிக்கை {i+1} விகித வரம்புக்குட்பட்டது") time.sleep(0.1) ```

ஜாவா

```java import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.TimeUnit; public class TokenBucket { private final int capacity; private double tokens; private final double refillRate; private long lastRefillTimestamp; private final ReentrantLock lock = new ReentrantLock(); public TokenBucket(int capacity, double refillRate) { this.capacity = capacity; this.tokens = capacity; this.refillRate = refillRate; this.lastRefillTimestamp = System.nanoTime(); } public boolean allow() { try { lock.lock(); refill(); if (tokens >= 1) { tokens -= 1; return true; } else { return false; } } finally { lock.unlock(); } } private void refill() { long now = System.nanoTime(); double elapsedTimeInSeconds = (double) (now - lastRefillTimestamp) / TimeUnit.NANOSECONDS.toNanos(1); double newTokens = elapsedTimeInSeconds * refillRate; tokens = Math.min(capacity, tokens + newTokens); lastRefillTimestamp = now; } public static void main(String[] args) throws InterruptedException { TokenBucket bucket = new TokenBucket(10, 2); // 10 டோக்கன்கள், வினாடிக்கு 2 மீள்நிரம்பும் for (int i = 0; i < 15; i++) { if (bucket.allow()) { System.out.println("கோரிக்கை " + (i + 1) + " அனுமதிக்கப்பட்டது"); } else { System.out.println("கோரிக்கை " + (i + 1) + " விகித வரம்புக்குட்பட்டது"); } TimeUnit.MILLISECONDS.sleep(100); } } } ```

டோக்கன் பக்கெட் வழிமுறையின் நன்மைகள்

டோக்கன் பக்கெட் வழிமுறையின் தீமைகள்

டோக்கன் பக்கெட் வழிமுறையின் பயன்பாட்டு நிகழ்வுகள்

டோக்கன் பக்கெட் வழிமுறை பரந்த அளவிலான விகித வரம்பிடல் பயன்பாட்டு நிகழ்வுகளுக்கு ஏற்றது, அவற்றுள்:

விநியோகிக்கப்பட்ட அமைப்புகளில் டோக்கன் பக்கெட்டை செயல்படுத்துதல்

ஒரு விநியோகிக்கப்பட்ட அமைப்பில் டோக்கன் பக்கெட் வழிமுறையைச் செயல்படுத்துவதற்கு நிலைத்தன்மையை உறுதி செய்வதற்கும் ரேஸ் நிலைமைகளைத் தவிர்ப்பதற்கும் சிறப்புப் பரிசீலனைகள் தேவை. சில பொதுவான அணுகுமுறைகள் இங்கே:

ரெடிஸைப் பயன்படுத்தி உதாரணம் (கருத்தியல்)

ஒரு விநியோகிக்கப்பட்ட டோக்கன் பக்கெட்டுக்கு ரெடிஸைப் பயன்படுத்துவது டோக்கன் எண்ணிக்கையை நிர்வகிக்க அதன் அணு செயல்பாடுகளை (`INCRBY`, `DECR`, `TTL`, `EXPIRE`) பயன்படுத்துவதை உள்ளடக்குகிறது. அடிப்படை ஓட்டம் பின்வருமாறு இருக்கும்:

  1. இருக்கும் பக்கெட்டை சரிபார்க்கவும்: பயனர்/API இறுதிப்புள்ளிக்கான ஒரு கீ ரெடிஸில் உள்ளதா என்று பார்க்கவும்.
  2. தேவைப்பட்டால் உருவாக்கவும்: இல்லையெனில், கீயை உருவாக்கி, டோக்கன் எண்ணிக்கையை கொள்ளளவுக்கு துவக்கி, மீள்நிரப்பு காலத்திற்குப் பொருந்தும் வகையில் ஒரு காலாவதியை (TTL) அமைக்கவும்.
  3. டோக்கனை நுகர முயற்சிக்கவும்: அணுமுறையில் டோக்கன் எண்ணிக்கையைக் குறைக்கவும். முடிவு >= 0 ஆக இருந்தால், கோரிக்கை அனுமதிக்கப்படுகிறது.
  4. டோக்கன் தீர்வைக் கையாளவும்: முடிவு < 0 ஆக இருந்தால், குறைப்பினைத் திரும்பப் பெறவும் (அணுமுறையில் மீண்டும் அதிகரிக்கவும்) மற்றும் கோரிக்கையை நிராகரிக்கவும்.
  5. மீள்நிரப்பு தர்க்கம்: ஒரு பின்னணி செயல்முறை அல்லது குறிப்பிட்ட கால இடைவெளியில் செயல்படும் பணி பக்கெட்டுகளை மீள்நிரப்பலாம், கொள்ளளவு வரை டோக்கன்களை சேர்க்கலாம்.

விநியோகிக்கப்பட்ட செயலாக்கங்களுக்கான முக்கிய பரிசீலனைகள்:

டோக்கன் பக்கெட்டிற்கான மாற்று வழிகள்

டோக்கன் பக்கெட் வழிமுறை ஒரு பிரபலமான தேர்வாக இருந்தாலும், குறிப்பிட்ட தேவைகளைப் பொறுத்து மற்ற விகித வரம்பிடல் நுட்பங்கள் மிகவும் பொருத்தமானதாக இருக்கலாம். சில மாற்று வழிகளுடன் ஒரு ஒப்பீடு இங்கே:

சரியான வழிமுறையைத் தேர்ந்தெடுப்பது:

சிறந்த விகித வரம்பிடல் வழிமுறையின் தேர்வு போன்ற காரணிகளைப் பொறுத்தது:

விகித வரம்பிடலுக்கான சிறந்த நடைமுறைகள்

விகித வரம்பிடலை திறம்படச் செயல்படுத்த கவனமான திட்டமிடல் மற்றும் பரிசீலனை தேவை. பின்பற்ற வேண்டிய சில சிறந்த நடைமுறைகள் இங்கே:

முடிவுரை

மீள்தன்மை மற்றும் அளவிடக்கூடிய பயன்பாடுகளை உருவாக்குவதற்கு விகித வரம்பிடல் ஒரு இன்றியமையாத நுட்பமாகும். டோக்கன் பக்கெட் வழிமுறை பயனர்கள் அல்லது வாடிக்கையாளர்கள் கோரிக்கைகளை அனுப்பக்கூடிய விகிதத்தைக் கட்டுப்படுத்த ஒரு நெகிழ்வான மற்றும் பயனுள்ள வழியை வழங்குகிறது, அமைப்புகளை துஷ்பிரயோகத்திலிருந்து பாதுகாக்கிறது, நியாயமான பயன்பாட்டை உறுதி செய்கிறது மற்றும் ஒட்டுமொத்த செயல்திறனை மேம்படுத்துகிறது. டோக்கன் பக்கெட் வழிமுறையின் கொள்கைகளைப் புரிந்துகொண்டு, செயல்படுத்தலுக்கான சிறந்த நடைமுறைகளைப் பின்பற்றுவதன் மூலம், டெவலப்பர்கள் மிகவும் கோரப்படும் போக்குவரத்து சுமைகளைக் கூட கையாளக்கூடிய வலுவான மற்றும் நம்பகமான அமைப்புகளை உருவாக்க முடியும்.

இந்த வலைப்பதிவு இடுகை டோக்கன் பக்கெட் வழிமுறை, அதன் செயல்படுத்தல், நன்மைகள், தீமைகள் மற்றும் பயன்பாட்டு நிகழ்வுகள் பற்றிய விரிவான கண்ணோட்டத்தை வழங்கியுள்ளது. இந்த அறிவைப் பயன்படுத்துவதன் மூலம், உங்கள் சொந்தப் பயன்பாடுகளில் விகித வரம்பிடலைத் திறம்படச் செயல்படுத்தலாம் மற்றும் உலகெங்கிலும் உள்ள பயனர்களுக்கு உங்கள் சேவைகளின் நிலைத்தன்மையையும் கிடைக்கும் தன்மையையும் உறுதிசெய்யலாம்.