# alibaba/sentinel architecture

> Architecture diagram of the GitHub repository alibaba/sentinel, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/alibaba/sentinel
- Repository: https://github.com/alibaba/sentinel

## Overview

Sentinel is a Java microservice resilience platform: applications mark resources, Sentinel evaluates configured traffic rules, and blocked or permitted traffic produces runtime metrics for operational monitoring. Framework adapters expose the same protection in RPC, HTTP, reactive, and gateway stacks; the gateway also supports API definitions and gateway-specific rules. Cluster services extend flow control through shared token decisions, while the dashboard monitors clients and configures rules. The map combines README-described capabilities with sampled implementation relationships; unsampled subsystems are represented at paths supported by the tree, with links omitted where call evidence is unavailable.

Main entry points: [`sentinel-core/src/main/java/com/alibaba/csp/sentinel/Entry.java`](https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/Entry.java) (Resource entry), [`sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParameterMetricStorage.java`](https://github.com/alibaba/sentinel/blob/1.8/sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParameterMetricStorage.java) (Parameter metric storage), [`sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/DefaultTokenService.java`](https://github.com/alibaba/sentinel/blob/1.8/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/DefaultTokenService.java) (Token service), [`sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayRuleManager.java`](https://github.com/alibaba/sentinel/blob/1.8/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayRuleManager.java) (Gateway rule manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_core["Core protection"]
  node_entry["Resource entry<br/>[Entry.java]"]
  node_flowrules["Flow rules<br/>[FlowRule.java]"]
  node_rulemanager["Rule managers<br/>[RuleManager.java]"]
  node_ruleconstants["Rule constants<br/>[RuleConstant.java]"]
  node_resource["Resource identity"]
  node_properties["Dynamic properties"]
  node_propertyapi["Property interfaces"]
  node_propertylistener["Property listeners"]
  node_paramrules["Parameter rules<br/>[ParamFlowRule.java]"]
  node_parammetrics[("Parameter metrics")]
  node_paramstorage[("Parameter metric storage")]
  node_statistics["Runtime statistics"]
  node_recordlog["Record logging<br/>[RecordLog.java]"]
end

subgraph group_gateway["Gateway governance"]
  node_gatewayadapter["Gateway request filter"]
  node_apidefinition["API definitions<br/>[ApiDefinition.java]"]
  node_gatewayrules[("Gateway rule manager")]
  node_gatewayconverter["Gateway rule conversion"]
  node_gatewaycommands["Gateway rule commands"]
end

subgraph group_cluster["Cluster control"]
  node_clusterclient["Cluster transport client"]
  node_tokenservice["Token service"]
  node_clusterflowrules[("Cluster flow rules")]
  node_clusterparamrules[("Cluster parameter rules")]
end

subgraph group_integrations["Framework integrations"]
  node_adapters["Framework adapters"]
end

subgraph group_operations["Operations"]
  node_dashboard["Sentinel dashboard"]
  node_transport["Client transport<br/>[CommandClient.java]"]
  node_metrics["Live monitoring"]
end

node_app(("Service application"))

node_app -->|"marks resource"| node_entry
node_app -->|"configures rules"| node_flowrules
node_entry -.->|"identifies resource"| node_resource
node_flowrules -->|"loaded by"| node_rulemanager
node_properties -->|"notifies listeners"| node_propertylistener
node_propertyapi -->|"implemented by"| node_properties
node_gatewayadapter -.->|"enforces gateway rules"| node_gatewayrules
node_gatewayrules -->|"converts parameter rules"| node_gatewayconverter
node_gatewaycommands -.->|"updates rules"| node_gatewayrules
node_apidefinition -.->|"matches requests"| node_gatewayadapter
node_adapters -.->|"integrates protection"| node_entry
node_clusterclient -.->|"requests tokens"| node_tokenservice
node_tokenservice -->|"looks up rules"| node_clusterflowrules
node_tokenservice -->|"looks up rules"| node_clusterparamrules
node_dashboard -.->|"configures clients"| node_transport
node_dashboard -.->|"monitors runtime"| node_metrics
node_entry -->|"records outcomes"| node_metrics
node_paramstorage -->|"stores metrics"| node_parammetrics
node_paramstorage -->|"initializes from"| node_paramrules
node_paramstorage -->|"logs changes"| node_recordlog

click node_entry "https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/Entry.java"
click node_flowrules "https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowRule.java"
click node_rulemanager "https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/RuleManager.java"
click node_ruleconstants "https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/RuleConstant.java"
click node_resource "https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slotchain/ResourceWrapper.java"
click node_properties "https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/property/DynamicSentinelProperty.java"
click node_propertyapi "https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/property/SentinelProperty.java"
click node_propertylistener "https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/property/PropertyListener.java"
click node_paramrules "https://github.com/alibaba/sentinel/blob/1.8/sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParamFlowRule.java"
click node_parammetrics "https://github.com/alibaba/sentinel/blob/1.8/sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParameterMetric.java"
click node_paramstorage "https://github.com/alibaba/sentinel/blob/1.8/sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParameterMetricStorage.java"
click node_statistics "https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/eagleeye/StatLogController.java"
click node_recordlog "https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/log/RecordLog.java"
click node_gatewayadapter "https://github.com/alibaba/sentinel/blob/1.8/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/SentinelGatewayFilter.java"
click node_apidefinition "https://github.com/alibaba/sentinel/blob/1.8/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/ApiDefinition.java"
click node_gatewayrules "https://github.com/alibaba/sentinel/blob/1.8/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayRuleManager.java"
click node_gatewayconverter "https://github.com/alibaba/sentinel/blob/1.8/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayRuleConverter.java"
click node_gatewaycommands "https://github.com/alibaba/sentinel/blob/1.8/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/command/UpdateGatewayRuleCommandHandler.java"
click node_adapters "https://github.com/alibaba/sentinel/tree/1.8/sentinel-adapter"
click node_clusterclient "https://github.com/alibaba/sentinel/blob/1.8/sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/NettyTransportClient.java"
click node_tokenservice "https://github.com/alibaba/sentinel/blob/1.8/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/DefaultTokenService.java"
click node_clusterflowrules "https://github.com/alibaba/sentinel/blob/1.8/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/rule/ClusterFlowRuleManager.java"
click node_clusterparamrules "https://github.com/alibaba/sentinel/blob/1.8/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/rule/ClusterParamFlowRuleManager.java"
click node_transport "https://github.com/alibaba/sentinel/blob/1.8/sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/transport/client/CommandClient.java"
click node_metrics "https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/eagleeye/StatLogController.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_entry,node_flowrules,node_rulemanager,node_ruleconstants,node_resource,node_properties,node_propertyapi,node_propertylistener,node_paramrules,node_parammetrics,node_paramstorage,node_statistics,node_recordlog toneBlue
class node_gatewayadapter,node_apidefinition,node_gatewayrules,node_gatewayconverter,node_gatewaycommands toneAmber
class node_clusterclient,node_tokenservice,node_clusterflowrules,node_clusterparamrules toneMint
class node_adapters toneRose
class node_dashboard,node_transport,node_metrics,node_app toneIndigo
```

## Components

### Core protection

- [Resource entry](https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/Entry.java): `sentinel-core/src/main/java/com/alibaba/csp/sentinel/Entry.java`
- [Flow rules](https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowRule.java): `sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowRule.java`
- [Rule managers](https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/RuleManager.java): `sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/RuleManager.java`
- [Rule constants](https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/RuleConstant.java): `sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/RuleConstant.java`
- [Resource identity](https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slotchain/ResourceWrapper.java): `sentinel-core/src/main/java/com/alibaba/csp/sentinel/slotchain/ResourceWrapper.java`
- [Dynamic properties](https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/property/DynamicSentinelProperty.java): `sentinel-core/src/main/java/com/alibaba/csp/sentinel/property/DynamicSentinelProperty.java`
- [Property interfaces](https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/property/SentinelProperty.java): `sentinel-core/src/main/java/com/alibaba/csp/sentinel/property/SentinelProperty.java`
- [Property listeners](https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/property/PropertyListener.java): `sentinel-core/src/main/java/com/alibaba/csp/sentinel/property/PropertyListener.java`
- [Parameter rules](https://github.com/alibaba/sentinel/blob/1.8/sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParamFlowRule.java): `sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParamFlowRule.java`
- [Parameter metrics](https://github.com/alibaba/sentinel/blob/1.8/sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParameterMetric.java): `sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParameterMetric.java`
- [Parameter metric storage](https://github.com/alibaba/sentinel/blob/1.8/sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParameterMetricStorage.java): `sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParameterMetricStorage.java`
- [Runtime statistics](https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/eagleeye/StatLogController.java): `sentinel-core/src/main/java/com/alibaba/csp/sentinel/eagleeye/StatLogController.java`
- [Record logging](https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/log/RecordLog.java): `sentinel-core/src/main/java/com/alibaba/csp/sentinel/log/RecordLog.java`

### Gateway governance

- [Gateway request filter](https://github.com/alibaba/sentinel/blob/1.8/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/SentinelGatewayFilter.java): `sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/SentinelGatewayFilter.java`
- [API definitions](https://github.com/alibaba/sentinel/blob/1.8/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/ApiDefinition.java): `sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/ApiDefinition.java`
- [Gateway rule manager](https://github.com/alibaba/sentinel/blob/1.8/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayRuleManager.java): `sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayRuleManager.java`
- [Gateway rule conversion](https://github.com/alibaba/sentinel/blob/1.8/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayRuleConverter.java): `sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayRuleConverter.java`
- [Gateway rule commands](https://github.com/alibaba/sentinel/blob/1.8/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/command/UpdateGatewayRuleCommandHandler.java): `sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/command/UpdateGatewayRuleCommandHandler.java`

### Cluster control

- [Cluster transport client](https://github.com/alibaba/sentinel/blob/1.8/sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/NettyTransportClient.java): `sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/NettyTransportClient.java`
- [Token service](https://github.com/alibaba/sentinel/blob/1.8/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/DefaultTokenService.java): `sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/DefaultTokenService.java`
- [Cluster flow rules](https://github.com/alibaba/sentinel/blob/1.8/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/rule/ClusterFlowRuleManager.java): `sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/rule/ClusterFlowRuleManager.java`
- [Cluster parameter rules](https://github.com/alibaba/sentinel/blob/1.8/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/rule/ClusterParamFlowRuleManager.java): `sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/rule/ClusterParamFlowRuleManager.java`

### Framework integrations

- [Framework adapters](https://github.com/alibaba/sentinel/tree/1.8/sentinel-adapter): `sentinel-adapter`

### Operations

- **Sentinel dashboard**
- [Client transport](https://github.com/alibaba/sentinel/blob/1.8/sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/transport/client/CommandClient.java): `sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/transport/client/CommandClient.java`
- [Live monitoring](https://github.com/alibaba/sentinel/blob/1.8/sentinel-core/src/main/java/com/alibaba/csp/sentinel/eagleeye/StatLogController.java): `sentinel-core/src/main/java/com/alibaba/csp/sentinel/eagleeye/StatLogController.java`

### Other components

- **Service application**

## Connections

- Service application → Resource entry: marks resource (evidence: `README.md`)
- Service application → Flow rules: configures rules (evidence: `README.md`)
- Resource entry → Resource identity: identifies resource (evidence: `sentinel-core/src/main/java/com/alibaba/csp/sentinel/Entry.java`)
- Flow rules → Rule managers: loaded by (evidence: `README.md`)
- Dynamic properties → Property listeners: notifies listeners (evidence: `sentinel-core/src/main/java/com/alibaba/csp/sentinel/property/DynamicSentinelProperty.java`)
- Property interfaces → Dynamic properties: implemented by (evidence: `sentinel-core/src/main/java/com/alibaba/csp/sentinel/property/DynamicSentinelProperty.java`)
- Gateway request filter → Gateway rule manager: enforces gateway rules
- Gateway rule manager → Gateway rule conversion: converts parameter rules (evidence: `sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/rule/GatewayRuleManager.java`)
- Gateway rule commands → Gateway rule manager: updates rules
- API definitions → Gateway request filter: matches requests
- Framework adapters → Resource entry: integrates protection (evidence: `README.md`)
- Cluster transport client → Token service: requests tokens
- Token service → Cluster flow rules: looks up rules (evidence: `sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/DefaultTokenService.java`)
- Token service → Cluster parameter rules: looks up rules (evidence: `sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/DefaultTokenService.java`)
- Sentinel dashboard → Client transport: configures clients (evidence: `README.md`)
- Sentinel dashboard → Live monitoring: monitors runtime (evidence: `README.md`)
- Resource entry → Live monitoring: records outcomes (evidence: `sentinel-core/src/main/java/com/alibaba/csp/sentinel/eagleeye/StatLogController.java`)
- Parameter metric storage → Parameter metrics: stores metrics (evidence: `sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParameterMetricStorage.java`)
- Parameter metric storage → Parameter rules: initializes from (evidence: `sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParameterMetricStorage.java`)
- Parameter metric storage → Record logging: logs changes (evidence: `sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParameterMetricStorage.java`)
