Teknologian jakaminen

Muistiinpanojen oppiminen - Redisin Token Bucket -algoritmin käyttäminen hajautetun virran rajoituksen toteuttamiseen

2024-07-12

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

Ennen kuin esittelemme token bucket -algoritmin, esitellään ensin vuotava kauha-algoritmi (Leaky Bucket)

Leaky Bucket -algoritmi

Vuotava kauha-algoritmi on kiinteän kapasiteetin konttimalli, joka rajoittaa tiedonsiirtonopeutta säätämällä tiedon sisään- ja ulosvirtauksen nopeutta. Vuotavan kauhan algoritmin tärkeimmät ominaisuudet ovat:

  • kiinteä kapasiteetti: Vuotavan säiliön kapasiteetti on korjattu Kun ämpäri on täynnä, ylimääräiset tiedot hylätään tai hylätään.
  • Jatkuvat vuodot: "Vesi" (data) ämpärissä jatkaa virtaamista ulos kiinteällä nopeudella.
  • Purskeen käsittely: Pystyy käsittelemään nopeasti purskevaa liikennettä, kun ämpäri ei ole täynnä, mutta kun ämpäri on täynnä, liikennettä rajoitetaan.

Redisson itsessään ei tarjoa suoraan leaky bucket -algoritmin toteutusta.

  1. Käytä lajiteltua joukkoa rahakkeiden tallentamiseen: Käytä lajiteltua joukkoa rahakkeiden tallentamiseen Redisiin. Jokaisella tunnuksella on aikaleima pistemääränä.

  2. lisää tunnus : Lisää tunnuksia lajiteltuun joukkoon kiintein väliajoin, ja kunkin merkin pistemäärä on lisätty aikaleima. (Voidaan lisätä käyttämällä ajoitettuja tehtäviä)

  3. Hanki tunnus: Kun pyyntö on lähetettävä, poista (tai ponnahtaa) merkki lajitellusta joukosta ja tarkista, onko nykyinen aika suurempi kuin tunnuksen aikaleima plus suurin sallittu viive.

  4. hylkää tunnus: Jos nykyinen aika ylittää tunnuksen aikaleiman plus enimmäisviiveen, merkki hylätään "vesivuodon" simuloimiseksi.

  5. Virtaa rajoittava logiikka: Jos lajiteltuun joukkoon ei ole saatavilla tunnuksia, hylkää pyyntö tai aseta se odotusjonoon.

Token Bucket -algoritmi

Token bucket -algoritmi on joustavampi vuonohjausalgoritmi, joka mahdollistaa datan lähettämisen tietyllä nopeudella generoimalla tokeneita. Token bucket -algoritmin tärkeimmät ominaisuudet ovat:

  • Tokenin sukupolvi: Luo tokeneja ämpäriin kiinteällä korolla.
  • Tokenin käyttö: Säilössä olevat tokenit on käytettävä dataa lähetettäessä. Jos merkkejä ei ole tarpeeksi, tiedon lähetys viivästyy tai hylätään.
  • äkillinen kyky: Suurempaa liikennettä voidaan lähettää, kun tokeneita riittää, minkä jälkeen liikennettä rajoitetaan tunnuksen generointinopeuden perusteella.

Redisson-kehys tarjoaa virtaa rajoittavan toiminnon, joka perustuu token bucket -algoritmiin, joka voi olla RRateLimiter Käyttöliittymän toteutus. Seuraavassa on yksinkertainen esimerkki Token bucket -algoritmin käytöstä Redissonissa:

  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();