Wrap Up
In this chapter, we described the high-level design for S3-like object storage. We compared the differences between block storage, file storage, and object storage.
The focus of this interview is on the design of object storage, so we listed how the uploading, downloading, listing objects in a bucket, and versioning of objects are typically done in object storage.
Then we dived deeper into the design. Object storage is composed of a data store and a metadata store. We explained how the data is persisted into the data store and discussed two methods for increasing reliability and durability: replication and erasure coding. For the metadata store, we explained how the multipart upload is executed and how to design the database schema to support typical use cases. Lastly, we explained how to shard the metadata store to support even larger data volume.
Congratulations on getting this far! Now give yourself a pat on the back. Good job!
Chapter Summary
Reference Material
- Fibre channel: https://en.wikipedia.org/wiki/Fibre_Channel
- iSCSI: https://en.wikipedia.org/wiki/ISCSI
- Server Message Block: https://en.wikipedia.org/wiki/Server_Message_Block
- Network File System: https://en.wikipedia.org/wiki/Network_File_System
- Amazon S3 Strong Consistency: https://aws.amazon.com/s3/consistency/
- Serial Attached SCSI: https://en.wikipedia.org/wiki/Serial_Attached_SCSI
- AWS CLI ls command: https://docs.aws.amazon.com/cli/latest/reference/s3/ls.html
- Amazon S3 Service Level Agreement: https://aws.amazon.com/s3/sla/
- Ambry: LinkedIn’s Scalable Geo-Distributed Object Store: https://assured-cloud-computing.illinois.edu/files/2014/03/Ambry-LinkedIns-Scalable-GeoDistributed-Object-Store.pdf
- inode: https://en.wikipedia.org/wiki/Inode
- Ceph’s Rados Gateway: https://docs.ceph.com/en/pacific/radosgw/index.html
- grpc: https://grpc.io/
- Paxos: https://en.wikipedia.org/wiki/Paxos_(computer_science)
- Raft: https://raft.github.io/
- Consistent hashing: https://www.toptal.com/big-data/consistent-hashing
- RocksDB: https://github.com/facebook/rocksdb
- SSTable: https://www.igvita.com/2012/02/06/sstable-and-log-structured-storage-leveldb/
- B+ tree: https://en.wikipedia.org/wiki/B%2B_tree
- SQLite: https://www.sqlite.org/index.html
- Data Durability Calculation: https://www.backblaze.com/blog/cloud-storage-durability/
- Rack: https://en.wikipedia.org/wiki/19-inch_rack
- Erasure Coding: https://en.wikipedia.org/wiki/Erasure_code
- Reed–Solomon error correction: https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction
- Erasure Coding Demystified: https://www.youtube.com/watch?v=Q5kVuM7zEUI
- Checksum:https://en.wikipedia.org/wiki/Checksum
- Md5: https://en.wikipedia.org/wiki/MD5
- Sha1: https://en.wikipedia.org/wiki/SHA-1
- Hmac: https://en.wikipedia.org/wiki/HMAC
- TIMEUUID: https://docs.datastax.com/en/cql-oss/3.3/cql/cql_reference/timeuuid_functions_r.html
Finished reading?
Mark it complete to track your progress.