# Aurora

<http://nil.csail.mit.edu/6.824/2020/papers/aurora.pdf>

* "We believe the central constraint in high throughput data processing has moved from compute and storage to the network."
* "Aurora brings a novel architecture to the relational database to address this constraint, most notably by pushing redo processing to a multi-tenant scale- out storage service, purpose-built for Aurora."
* "Instance lifetime does not correlate well with storage lifetime. Instances fail. Customers shut them down. They resize them up and down based on load. For these reasons, it helps to decouple the storage tier from the compute tier."
* "In  Aurora,  we  have  chosen  a  design  point  of  tolerating  (a)  losing&#x20;

  an entire AZ and one additional node (AZ+1) without losing data,&#x20;

  and (b) losing an entire AZ without impacting the ability to write&#x20;

  data. We achieve this by replicating each data item 6 ways across&#x20;

  3  AZs  with  2  copies  of  each  item  in  each  AZ."

Not very easy to follow.

The [FAQ](http://nil.csail.mit.edu/6.824/2020/papers/aurora-faq.txt) explains it greatly though.

```

Mirrored MySQL involves an ordinary MySQL database server that thinks
it is writing to a local disk. Each transaction involves a bunch of
large writes to update B-Tree pages; even if a transaction only
modifies a few bytes of data, the resulting disk writes are entire
file system blocks, perhaps 8192 bytes. The mirroring arrangement
sends those 8192-byte blocks over the network to four different EBS
storage servers, and waits for them all to write the data to their
disks.

Aurora, in contrast, only sends little log records over the network to
its storage servers -- the log records aren't much bigger than the
actual bytes modified. So Aurora sends dramatically less data over the
network, and is correspondingly faster.
```

FT Goals:

* Write with one dead AZ.
* Read with one dead AZ + 1.
* Resilient to transient slowness.
* Fast re-replication.

Quorum replication:

* N replicas.
* W for writes.
* R for reads.
* R + W = N + 1


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.ainzzorl.lol/courses/mit-6.824-distributed-systems/aurora.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
