@startuml
interface RuleConfigSource {
RuleConfig load();
}
interface RuleConfigParser {
RuleConfig parse(String configText);
RuleConfig parse(InputStream in);
}
class YamlRuleConfigParser {
RuleConfig parse(String configText);
RuleConfig parse(InputStream in);
}
class JsonRuleConfigParser{
RuleConfig parse(String configText);
RuleConfig parse(InputStream in);
}
RuleConfigParser <|-- YamlRuleConfigParser
RuleConfigParser <|-- JsonRuleConfigParser
class FileRuleConfigSource {
}
interface RateLimiterAlg{
}
class RateLimitRule{
ApiLimit getLimitRule(String appId, String api)
void addLimitRule(RuleConfig ruleConfig)
}
interface RateLimiterAlg {
boolean tryAcquire() throws InternalErrorException;
}
class FixedTimeWindowRateLimiter {
boolean tryAcquire() throws InternalErrorException;
}
class DistributedFixedTimeWindowRateLimiter{
boolean tryAcquire() throws InternalErrorException;
}
RateLimiterAlg <|-- FixedTimeWindowRateLimiter
RateLimiterAlg <|-- DistributedFixedTimeWindowRateLimiter
interface UrlRateLimiter{
void limit(String appId, String url)
}
class MemoryUrlRateLimiter {
void limit(String appId, String url)
}
class DistributedUrlRateLimiter{
void limit(String appId, String url)
}
abstract AbstractUrlRateLimiter{
- RateLimitRule rateLimitRule
- RuleConfigSource ruleConfigSource
void addLimitRule(RuleConfig ruleConfig)
}
UrlRateLimiter <|-- AbstractUrlRateLimiter
AbstractUrlRateLimiter <|-- MemoryUrlRateLimiter
AbstractUrlRateLimiter <|-- DistributedUrlRateLimiter
AbstractUrlRateLimiter --> RateLimitRule : getLimiter
AbstractUrlRateLimiter --> RateLimiterAlg : createRateLimiterAlg
AbstractUrlRateLimiter --> RuleConfigSource
RateLimitRule --> RuleConfigSource
RuleConfigSource <|-- FileRuleConfigSource
FileRuleConfigSource --> RuleConfigParser
@enduml
资料 §
Site Unreachable