> For the complete documentation index, see [llms.txt](https://firehose.streamingfast.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://firehose.streamingfast.io/firehose/architecture/components/high-availability.md).

# High Availability

## Reader Node

Placing multiple [Reader Node](/firehose/architecture/components/reader.md) components side by side, and fronted by one or more Relayers, allows for highly available setups; a core attribute of the Firehose design.

A Relayer connected to multiple Readers will deduplicate the incoming stream and push the first block downstream.

{% hint style="success" %}
***Tip**: Two Reader Node components will even race to push the data first. The system is designed to leverage this racing* [*Reader Node*](/firehose/architecture/components/reader.md) *feature to the benefit of the end-user by producing the lowest latency possible.*
{% endhint %}

### Data Aggregation

Firehose also aggregates any forked blocks that would be seen by a single Reader Node component, and not seen by any other [Reader Node](/firehose/architecture/components/reader.md) components.

### Component Cooperation

Adding Reader Node components and dispersing each one geographically will result in the components actually racing to transfer blocks to the Relayer component. This cooperation between the [Reader Node](/firehose/architecture/components/reader.md) and [Relayer](/firehose/architecture/components/relayer.md) components *significantly* increases the performance of Firehose.

## Merger

A single [Merger](/firehose/architecture/components/merger.md) component is required for Reader Node components in a highly available Firehose.

Highly available systems usually connect to the [Relayer](/firehose/architecture/components/relayer.md) component to receive real-time blocks. Merged blocked files are used when Relayer components can't provide the requested data or satisfy a range.

Restarts from other components can be sustained and time provided for [Merger](/firehose/architecture/components/merger.md) components to be down when Relayer components provide 200 to 300 blocks in RAM.

{% hint style="info" %}
**Note***: Merged blocks generally aren't read by other Firehose components in a running, live highly available system.*
{% endhint %}

## Relayer

A [Relayer](/firehose/architecture/components/relayer.md) component in a highly available Firehose will feed from all of the Reader Node components to gain a complete view of all possible forks.

{% hint style="success" %}
**Tip***: Multiple* [*Reader Node*](/firehose/architecture/components/reader.md) *components will ensure blocks are flowing efficiently to the* [*Relayer*](/firehose/architecture/components/relayer.md) *component and throughout Firehose.*
{% endhint %}

## Firehose gRPC Server

Firehose can be scaled horizontally to provide a highly available system.

The network speed and data throughput between consumers and Firehose deployments will dictate the speed of data availability.

{% hint style="info" %}
**Note***: The network speed and data throughput between* [*Relayer*](/firehose/architecture/components/relayer.md) *components and* [*Firehose gRPC Server* ](https://github.com/streamingfast/firehose-docs/blob/master/architecture/components/grpc-server.md)*components will impact the speed of data availability.*
{% endhint %}

Firehose [gRPC Server](https://github.com/streamingfast/firehose-docs/blob/master/architecture/components/grpc-server.md) components have the ability to connect to a subset of Relayer components or all Relayers available.

When the Firehose [gRPC Server](https://github.com/streamingfast/firehose-docs/blob/master/architecture/components/grpc-server.md) component is connected to all available Relayer components the probability that all forks will be viewed increases. Inbound requests made by consumers will be fulfilled with in-memory fork data.

Block navigation can be delayed when forked data isn't completely communicated to the Firehose [gRPC Server](https://github.com/streamingfast/firehose-docs/blob/master/architecture/components/grpc-server.md) component.

Understanding how data flows through Firehose is beneficial for harnessing its full power.
