From c1b59c4d2e745de4687fdff6a1ad90bf2adad720 Mon Sep 17 00:00:00 2001 From: John Cai Date: Mon, 15 Jun 2020 19:50:04 -0700 Subject: [PATCH] Incremental backups proposal --- doc/img/backup_buckets.png | Bin 0 -> 25676 bytes doc/img/backups_incr_objects.png | Bin 0 -> 48764 bytes doc/proposals/incremental_backups.md | 107 +++++++++++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 doc/img/backup_buckets.png create mode 100644 doc/img/backups_incr_objects.png create mode 100644 doc/proposals/incremental_backups.md diff --git a/doc/img/backup_buckets.png b/doc/img/backup_buckets.png new file mode 100644 index 0000000000000000000000000000000000000000..bdef07160783b3e3a52fe67069bbf23874babb0f GIT binary patch literal 25676 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 RwhRmm44$rjF6*2UngC;>Gitaly: create_full_backup(repo, "https://object_storage?id=full_backup_1") + Gitaly->>Object Storage: "https://object_storage?id=full_backup_1" + Object Storage->>Gitaly: HTTP 200 OK + Gitaly->>Rails: HTTP 200 OK {"ref_checksum": "55f08600ea872b8e9ca7de5469d71a8711ba2aa2"} + Rails->>Gitaly: create_incr_backup(repo, "https://object_storage?id=incr_backup_1" , "55f08600ea872b8e9ca7de5469d71a8711ba2aa2") + Gitaly->>Object Storage: "https://object_storage?id=incr_backup_1", + Object Storage->>Gitaly: HTTP 200 OK + Gitaly->>Rails: HTTP 200 OK {"ref_checksum": "12b023b9b3872b8e3cfe2e7469d71a8711ba2d13"} + Rails->>Gitaly: create_incr_backup(repo, "https://object_storage?id=incr_backup_2" , "12b023b9b3872b8e3cfe2e7469d71a8711ba2d13") + Gitaly->>Object Storage: "https://object_storage?id=incr_backup_2", + Object Storage->>Gitaly: HTTP 200 OK + Gitaly->>Rails: HTTP 200 OK {"ref_checksum": "12b023b9b3872b8e3cfe2e7469d71a8711ba2d13"} +``` + +### Database Schema + +We will store a record of the backups in the Rails Database while the actual bundle files will be shipped to +object storage. That way, we will have a linked list of incremental backups. This will also allow us to do compaction. + +```mermaid +graph TD + R[Rails] --> |1. What was the latest backup created?|D[Rails Database] + D --> |2. Incremental backup with object_id 123|R + R --> |3. Create an incremental backup with object_id 124 and send to S3| G[Gitaly] + G --> |4. Store this backup bundle | O{S3} + O --> |5. HTTP 200 OK| G + G --> |6. I successfully created and sent bundle to S3| R +``` + +### Restoring from Backups + +To restore a repository from backups, Rails will send repeated requests with signed requests containing the next incremental backup. +These will get applied to the repository using the method described in [Gitaly Bundle file](snapshot-storage.md). + +```mermaid +sequenceDiagram + Rails->>Gitaly: restore_backup(repo, "https://object_storage?id=full_backup_1") + Gitaly->>Object Storage: retrieve bundle file + Object Storage->>Gitaly: HTTP 200 + Gitaly->>Rails: OK +``` + +### Compaction +Incremental backups will begin to pile up. Restoring from many backups can be slow and expensive. We can optimize this process +by compacting the incremental backups into self-contained backups every once in a while. + +```mermaid +sequenceDiagram + Rails->>Database: what's the last full backup of repo1? + Database->>Rails: {"id": 1, "repo_id": 1, "url": "https://?id=repo_1_full_backup_1", "parent_id": nil} + Rails->>Database: what's the next child backup? + Database->>Rails: {"id": 2, "repo_id": 1, "url": "https://?id=repo_2_incr_backup_1", "parent_id": 1} + Rails->>Gitaly: compact_backups(full_backup_url="https://?id=repo_1_full_backup_1", incr_backup_url="https://?id=repo_2_incr_backup_1", destination_url="https://?id=repo_2_full_backup_2") + Gitaly->>Object Storage: write compacted backup to a new object "https://?id=repo_2_full_backup_2" + Object Storage->>Gitaly: HTTP 200 OK + Gitaly->>Rails: OK + Rails->>Database: insert {"id": 3, "repo_id": 1, "url": "https://?id=repo_2_full_backup_2", "parent_id": none} + Rails->>Database: delete ids 1,2 +``` + +An occassional compaction job (let's say it's nightly) would compact incremental backups into a full backup. + +### In the event of database corruption + +If we use the following bucket and object id scheme, then it would still be possible to recover repositories even if there is corruption in the database. + +![Bucket Naming Scheme] +(img/backup_buckets.png) + +![Object Naming Scheme] +(img/backups_incr_objects.png) + +Each repository has two buckets, one for full backups and one for incremental. The incremental backups are also named with a monotimically increasing +id along with the full backup id they were created from. This way, we can develop a gitaly command that can still do compaction as well as repository +restoration. + + + + -- GitLab