Giter VIP home page Giter VIP logo

yd9506 / aperture Goto Github PK

View Code? Open in Web Editor NEW

This project forked from fluxninja/aperture

0.0 0.0 0.0 207.27 MB

Rate limiting, caching, and request prioritization for modern workloads

Home Page: https://docs.fluxninja.com

License: Apache License 2.0

Shell 0.87% JavaScript 3.29% Python 2.47% Java 4.24% Lua 0.17% Go 50.98% C# 6.69% TypeScript 2.26% CSS 0.38% Makefile 0.25% HTML 20.96% Smarty 0.51% Dockerfile 0.23% Jsonnet 5.68% Starlark 1.00%

aperture's Introduction

FluxNinja Aperture
Documentation Reference Slack Community Build Status Go Report Card Godoc Reference

๐Ÿฅท FluxNinja Aperture

Aperture is a distributed load management platform designed for rate limiting, caching, and prioritizing requests in cloud applications. Built upon a foundation of distributed counters, observability, and a global control plane, it provides a comprehensive suite of load management capabilities. These capabilities enhance the reliability and performance of cloud applications, while also optimizing cost and resource utilization.

Unified Load Management Unified Load Management

Integrating Aperture in your application through SDKs is a simple 3-step process:

  • Define labels: Define labels to identify users, entities, or features within your application. For example, you can define labels to identify individual users, features, or API endpoints.
Example
// Tailor policies to get deeper insights into your workload with labels that
// capture business context.
const labels = {
  // You can rate limit each user individually.
  user: "jack",
  // And have different rate limits for different tiers of users.
  tier: "premium",
  // You can also provide the tokens for each request.
  // Tokens are flexible: LLM AI tokens in a prompt, complexity of a request,
  // number of sub-actions, etc.
  tokens: "200",
  // When peak load exceeds external quotas or infrastructure capacity,
  // requests can be throttled and prioritized.
  priority: HIGH,
  // Get deep insights into your workload. You can slice and dice performance
  // metrics by any label.
  workload: "/chat",
};
  • Wrap your workload: Wrap your workload with startFlow and endFlow calls to establish control points around specific features or code sections inside your application. For example, you can wrap your API endpoints with Aperture SDKs to limit the number of requests per user or feature.
Example
// Wrap your workload with startFlow and endFlow calls, passing in the
// labels you defined earlier.
const flow = await apertureClient.startFlow("your_workload", {
  labels: labels,
  // Lookup result cache key to retrieve a cached result.
  resultCacheKey: queryParams,
});

// If rate or quota limit is not exceeded, the workload is executed.
if (flow.shouldRun()) {
  // Return a cached result or execute the workload.
  const cachedResult = flow.resultCache();
  const result = await yourWorkload(cachedResult);
  flow.setResultCache({
    value: result,
    ttl: { seconds: 86400, nanos: 0 },
  });
}
//
  • Configure & monitor policies: Configure policies to control the rate, concurrency, and priority of requests.
Policy YAML
blueprint: rate-limiting/base
uri: github.com/fluxninja/aperture/blueprints@latest
policy:
  policy_name: rate_limit
  rate_limiter:
    bucket_capacity: 60
    fill_amount: 60
    parameters:
      interval: 3600s
      limit_by_label_key: user
    selectors:
      - control_point: your_workload
        label_matcher:
          match_list:
            - key: tier
              operator: In
              values:
                - premium

Rate Limiter Blueprint Rate Limiter Blueprint Rate Limiter Dashboard Rate Limiter Dashboard

In addition to language SDKs, Aperture also integrates with existing control points such as API gateways, service meshes, and application middlewares.

โš™๏ธ Load management capabilities

  • โฑ๏ธ Global Rate and Concurrency Limiting: Safeguard APIs and features against excessive usage with Aperture's high-performance, distributed rate limiter. Identify individual users or entities by fine-grained labels. Create precise rate limiters controlling burst-capacity and fill-rate tailored to business-specific labels. Limit per user or global concurrency of in-flight requests. Refer to the Rate Limiting and Concurrency Limiting guides for more details.
  • ๐Ÿ“Š API Quota Management: Maintain compliance with external API quotas with a global token bucket and smart request queuing. This feature regulates requests aimed at external services, ensuring that the usage remains within prescribed rate limits and avoids penalties or additional costs. Refer to the API Quota Management guide for more details.
  • ๐Ÿšฆ Concurrency Control and Prioritization: Safeguard against abrupt service overloads by limiting the number of concurrent in-flight requests. Any requests beyond this limit are queued and let in based on their priority as capacity becomes available. Refer to the Concurrency Control and Prioritization guide for more details.
  • ๐ŸŽฏ Workload Prioritization: Safeguard crucial user experience pathways and ensure prioritized access to external APIs by strategically prioritizing workloads. With weighted fair queuing, Aperture aligns resource distribution with business value and urgency of requests. Workload prioritization applies to API Quota Management and Concurrency Control and Prioritization use cases.
  • ๐Ÿ’พ Caching: Boost application performance and reduce costs by caching costly operations, preventing duplicate requests to pay-per-use services, and easing the load on constrained services. Refer to the Caching guide for more details.

๐Ÿ Getting Started

โ˜๏ธ Aperture Cloud

Note

FluxNinja has been acquired by CodeRabbit. New sign-ups are temporarily disabled. Existing users can continue to use Aperture Cloud by signing in to their accounts.

The easiest way to try Aperture is to sign up for a free Aperture Cloud account. Aperture Cloud is a fully managed service by FluxNinja. With Aperture Cloud, there's no need to manage any infrastructure, and you can integrate your application with Aperture using SDKs. For more information, refer to the get started guide.

Quota Management Dashboard Quota Management Dashboard Prioritization Metrics for gpt-4 Flow Analytics Flow Analytics Performance Metrics for OpenAI Models

๐ŸŽฎ Local Kubernetes Playground

To try Aperture in a local Kubernetes environment, refer to Playground docs.

๐Ÿ“– Learn More

๐ŸŽฅ Videos

๐Ÿ‘ท Contributing

Reporting bugs helps us improve Aperture to be more reliable and user-friendly. Include all the required information to reproduce and understand the bug you are reporting. Follow helper questions in the bug report template to make it easier. If you see a way to improve Aperture, use the feature request template to create an issue.

To contribute code, read the Contribution guide.

aperture's People

Contributors

harjotgill avatar hdkshingala avatar hasit avatar tanveergill avatar krdln avatar kwapik avatar iridiumoxide avatar sudhanshu456 avatar dariakunoichi avatar karansohi avatar slayer321 avatar jmichalak-fluxninja avatar kklimonda-fn avatar dependabot[bot] avatar seunghyupoh3517 avatar github-actions[bot] avatar fluxninjaops avatar imgbot[bot] avatar sbienkow-ninja avatar jaidesai-fn avatar sahil-lakhwani avatar ninjacharu avatar spikatrix avatar gitcommitshow avatar chiukapoor avatar gurinder39 avatar code-shreyas avatar sadovnikov avatar fossabot avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.