README
ยถ
๐ฅท What is FluxNinja Aperture?
Aperture is an intelligent load management platform for cloud native applications. Aperture provides capabilities such as concurrency limiting, rate limiting and auto-scaling.
๐๏ธ Why is flow control needed?
Modern cloud application architectures such as microservices are vulnerable to cascading failures in face of sudden loads, new deployments and performance issues. Reliable operation is impossible without effective flow control. In addition, flow control enables graceful degradation, which is the ability to preserve key user experience pathways even in the face of application failures.
โ๏ธ Features
At the fundamental level, Aperture enables flow control through observing, analyzing, and actuating, facilitated by agents and a controller.
-
๐ฆ Aperture Agents live next to your service instances as a sidecar and provide powerful flow control components such as a weighted fair queuing scheduler for prioritized load-shedding and a distributed rate-limiter. A flow is the fundamental unit of work from the perspective of an Aperture Agent. It could be an API call, a feature, or even a database query.
-
๐ค Aperture Controller is the "brain" of system. It is powered by always-on, circuit graph driven policies that continuously track deviations from service-level objectives (SLOs) and calculate recovery or escalation actions.
๐๏ธ Architecture
๐ Getting Started
๐ฎ Playground
To try Aperture in a local Kubernetes environment, refer to Playground docs.
๐๏ธ Installation
To install Aperture system, please follow the Installation guide.
๐ Tutorials
To learn how to write Aperture policies, please read the Tutorials.
๐ฅ Videos
- Chaos Carnival 2023-Graceful Degradation:Keeping The Lights On When Everything Goes Wrong
- Graceful Degradation: When All Goes Wrong | Tanveer Gill | Conf42 Chaos Engineering 2023
- How Concurrency Limits Help Protect Against Cascading Failures
- Build Indestructible Applications with Aperture Flow Control
๐ท 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 bug report template to make it easier. If you see a way to improve Aperture, use the feature request template to create an issue. Make sure to explain the problem you are trying to solve and what is the expected behavior.
To contribute code, please read the Contribution guide.
Directories
ยถ
Path | Synopsis |
---|---|
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/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
+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
+kubebuilder:validation:Optional
|
+kubebuilder:validation:Optional |
agentfunctions/agents
Server-side for handling agent functions
|
Server-side for handling agent functions |
agentinfo
+kubebuilder:validation:Optional
|
+kubebuilder:validation:Optional |
config
+kubebuilder:validation:Optional
|
+kubebuilder:validation:Optional |
discovery/kubernetes
+kubebuilder:validation:Optional
|
+kubebuilder:validation:Optional |
discovery/static
+kubebuilder:validation:Optional
|
+kubebuilder:validation:Optional |
distcache
+kubebuilder:validation:Optional
|
+kubebuilder:validation:Optional |
etcd/client
+kubebuilder:validation:Optional
|
+kubebuilder:validation:Optional |
jobs
+kubebuilder:validation:Optional
|
+kubebuilder:validation:Optional |
mapstruct
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. |
metrics
+kubebuilder:validation:Optional
|
+kubebuilder:validation:Optional |
mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
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/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
+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
+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
+kubebuilder:validation:Optional
|
+kubebuilder:validation:Optional |
rpc
Server-to-client reverse RPC
|
Server-to-client reverse RPC |
watchdog
+kubebuilder:validation:Optional
|
+kubebuilder:validation:Optional |
playground
|
|
browser
Module
|
|
demo_app
Module
|
|
graphql_demo_app
Module
|
|
resources/demo-app
Module
|
|
resources/graphql-demo-app
Module
|
|
test
|
|