aperture

module
v2.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 18, 2023 License: Apache-2.0

README ยถ

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

๐Ÿฅท FluxNinja Aperture

Aperture is an intelligent load management platform for modern cloud applications.

โš™๏ธ Features

  • Adaptive service protection: Guard cloud applications against sudden overloads and cascading failures by scheduling incoming requests based on live service health metrics such as latency or error-rates. Without such a critical capability, it's impossible to ensure uptime and reliable operations of services and API endpoints.
  • Workload prioritization: Optimize user experience and resource utilization by prioritizing workloads based on business value and urgency. Workload requests (for example, API calls) are labeled and prioritized using declarative policies and scheduled using weighted fair queuing. This ensures graceful degradation by preserving key user experience pathways even in the face of application failures.
  • Distributed rate-limiting: Protect downstream services from overload by enforcing rate limits at the edge. Aperture's distributed rate limiter enforces limits based on fine-grained labels and is higher performance than alternatives based on centralized Redis deployments.
  • Load-based auto-scaling: Aperture's policies are expressed as circuit graphs that continuously track deviations from service-level objectives and calculate recovery or escalation actions. Escalations such as auto-scaling can be easily configured to trigger based on load throttling, eliminating the need for costly over-provisioning.
  • Automated load ramping: Safely and gradually ramp up load to a new feature or an API endpoint while monitoring for performance issues. Automatically ramp down the load when errors or latency spikes are detected.

Observe. Analyze. Actuate.

๐Ÿ—๏ธ Architecture

Aperture Architecture Overview

  • ๐Ÿšฆ Aperture Agents are typically deployed next to the services and provide high-performance flow-control capabilities. They are responsible for scheduling and rate-limiting incoming requests based on the policies defined in the Aperture Controller. In addition, they also collect service health and flow metrics.

  • ๐Ÿค– Aperture Controller executes observability-driven control policies and configures Aperture Agents. The control policies are expressed as circuit graphs consisting of interconnected signal processing blocks. The Aperture policies provide a programmable way to tailor sophisticated control policies to match any application's needs.

๐Ÿ Getting Started

๐ŸŽฎ Playground

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

Latency Gradient Policy Dashboard

๐ŸŽ๏ธ Installation

To install the Aperture system, please follow the Installation guide.

๐Ÿ“– Tutorials

To learn how to write Aperture policies, please read the Tutorials.

๐ŸŽฅ Videos

๐Ÿ‘ท Contributing

Reporting bugs helps us improve Aperture to be more reliable and user-friendly. Please make sure to 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, please read the Contribution guide.

Directories ยถ

Path Synopsis
api
gen/proto/go/aperture/autoscale/kubernetes/controlpoints/v1
Package controlpointsv1 is a reverse proxy.
Package controlpointsv1 is a reverse proxy.
gen/proto/go/aperture/cmd/v1
Code generated by protoc-gen-deepcopy.
Code generated by protoc-gen-deepcopy.
gen/proto/go/aperture/discovery/entities/v1
Package entitiesv1 is a reverse proxy.
Package entitiesv1 is a reverse proxy.
gen/proto/go/aperture/distcache/v1
Package distcachev1 is a reverse proxy.
Package distcachev1 is a reverse proxy.
gen/proto/go/aperture/flowcontrol/check/v1
Code generated by protoc-gen-deepcopy.
Code generated by protoc-gen-deepcopy.
gen/proto/go/aperture/flowcontrol/checkhttp/v1
Package checkhttpv1 is a reverse proxy.
Package checkhttpv1 is a reverse proxy.
gen/proto/go/aperture/flowcontrol/controlpoints/v1
Package controlpointsv1 is a reverse proxy.
Package controlpointsv1 is a reverse proxy.
gen/proto/go/aperture/flowcontrol/preview/v1
Package previewv1 is a reverse proxy.
Package previewv1 is a reverse proxy.
gen/proto/go/aperture/fluxninja/v1
Package fluxninjav1 is a reverse proxy.
Package fluxninjav1 is a reverse proxy.
gen/proto/go/aperture/info/v1
Package infov1 is a reverse proxy.
Package infov1 is a reverse proxy.
gen/proto/go/aperture/openapiv2/v1
Code generated by protoc-gen-deepcopy.
Code generated by protoc-gen-deepcopy.
gen/proto/go/aperture/peers/v1
Package peersv1 is a reverse proxy.
Package peersv1 is a reverse proxy.
gen/proto/go/aperture/policy/language/v1
Code generated by protoc-gen-deepcopy.
Code generated by protoc-gen-deepcopy.
gen/proto/go/aperture/policy/monitoring/v1
Code generated by protoc-gen-deepcopy.
Code generated by protoc-gen-deepcopy.
gen/proto/go/aperture/policy/private/v1
Code generated by protoc-gen-deepcopy.
Code generated by protoc-gen-deepcopy.
gen/proto/go/aperture/policy/sync/v1
Code generated by protoc-gen-deepcopy.
Code generated by protoc-gen-deepcopy.
gen/proto/go/aperture/rpc/v1
Code generated by protoc-gen-deepcopy.
Code generated by protoc-gen-deepcopy.
gen/proto/go/aperture/status/v1
Package statusv1 is a reverse proxy.
Package statusv1 is a reverse proxy.
gen/proto/go/aperture/watchdog/v1
Code generated by protoc-gen-deepcopy.
Code generated by protoc-gen-deepcopy.
cmd
aperture-agent
Package main Agent
Package main Agent
aperture-agent/config
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
aperture-controller
Package main Controller
Package main Controller
aperture-controller/config
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
docs
extensions
fluxninja/extconfig
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
sentry/config
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
api
Package v1alpha1 contains API Schema definitions for the v1alpha1 API group
Package v1alpha1 contains API Schema definitions for the v1alpha1 API group
api/agent/v1alpha1
+kubebuilder:object:generate=true +groupName=fluxninja.com
+kubebuilder:object:generate=true +groupName=fluxninja.com
api/common
+kubebuilder:object:generate=true
+kubebuilder:object:generate=true
api/controller/v1alpha1
+kubebuilder:object:generate=true +groupName=fluxninja.com
+kubebuilder:object:generate=true +groupName=fluxninja.com
api/policy/v1alpha1
+kubebuilder:object:generate=true +groupName=fluxninja.com
+kubebuilder:object:generate=true +groupName=fluxninja.com
pkg
agentfunctions/agents
Server-side for handling agent functions
Server-side for handling agent functions
agentfunctions/config
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
agentinfo
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
cmd
config
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
discovery/kubernetes/config
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
discovery/static/config
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
distcache/config
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
etcd
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
jobs/config
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
k8s
log
metrics
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
mocks
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.
net
net/grpc
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
net/grpcgateway
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
net/http
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
net/listener
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
net/tlsconfig
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
otelcollector/adapterconnector
Package adapterconnector adapts OTEL signals between pipelines.
Package adapterconnector adapts OTEL signals between pipelines.
otelcollector/config
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
otelcollector/leaderonlyreceiver
Leader-only-receiver wraps any metrics receiver and starts it only when agent is a leader.
Leader-only-receiver wraps any metrics receiver and starts it only when agent is a leader.
peers/config
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
policies/autoscale/kubernetes
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
policies/controlplane/runtime/tristate
tristate is a helper package for tri-state boolean logic, which is used for logical combinator components.
tristate is a helper package for tri-state boolean logic, which is used for logical combinator components.
policies/flowcontrol/selectors
Companion package for github.com/fluxninja/aperture/api/gen/proto/go/aperture/policy/language/v1 containing conversions of proto-generated struct into golang ones and other helpers.
Companion package for github.com/fluxninja/aperture/api/gen/proto/go/aperture/policy/language/v1 containing conversions of proto-generated struct into golang ones and other helpers.
policies/flowcontrol/service/preview/config
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
policies/mocks
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.
profilers
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
prometheus/config
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
rpc
Server-to-client reverse RPC
Server-to-client reverse RPC
utils
mapstruct is similar in idea to mitchellh/mapstructure, with a difference that values are assumed to always be created through json serialization.
mapstruct is similar in idea to mitchellh/mapstructure, with a difference that values are assumed to always be created through json serialization.
watchdog
Ported from - https://github.com/raulk/go-watchdog
Ported from - https://github.com/raulk/go-watchdog
watchdog/config
+kubebuilder:validation:Optional
+kubebuilder:validation:Optional
test

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL