Sobes.tech
Senior

Design a multi-tenant LLM service with rate limits and subscription quotas.

sobes.tech AI

Answer from AI

To design a multi-tenant LLM service with rate limits and subscription quotas, several key aspects need to be considered:

  1. Multi-tenancy:

    • Each client (tenant) is assigned a unique identifier.
    • Data and models are isolated or logically separated to ensure security and privacy.
  2. Authentication and Authorization:

    • Use API keys or OAuth for client identification.
    • Check access rights and subscription status with each request.
  3. Rate limiting:

    • Limit the number of requests per unit of time for each client.
    • Algorithms like token bucket or leaky bucket can be used.
    • Store the state of limits in a fast storage (e.g., Redis).
  4. Subscription quotas:

    • Define usage limits (e.g., number of tokens or requests per month) based on the tariff.
    • Track consumption and block or notify when exceeded.
  5. Architecture:

    • API Gateway for routing and access control.
    • Microservices for processing LLM requests.
    • Storage for logs and metrics.
  6. Monitoring and logging:

    • Track usage, errors, and performance.

Example of a simplified rate limiting scheme in Node.js with Redis:

const rateLimit = require('express-rate-limit');
const RedisStore = require('rate-limit-redis');
const redisClient = require('./redisClient');

const limiter = rateLimit({
  store: new RedisStore({ client: redisClient }),
  windowMs: 60 * 1000, // 1 minute
  max: (req) => {
    // Get the subscription limit of the user
    return req.user.subscriptionLimit || 100;
  },
  keyGenerator: (req) => req.user.id,
  handler: (req, res) => {
    res.status(429).json({ error: 'Request limit exceeded' });
  }
});

app.use('/api/llm', authenticateUser, limiter, llmHandler);

Thus, the service ensures client isolation, controls load, and enforces subscription restrictions.