Design a service where users upload files that are stored durably and served back on request, with a cache in front of the read path.
Design a backend where users upload files (such as profile pictures) and later fetch them. Uploads are relatively rare, but the same files are fetched many times afterward, so the read path benefits from a cache while the durable bytes live in the datastore.
This design combines the two ideas a learner has already met, a scaled application tier and a read cache, in a write-then-read-many shape: the write path stores an uploaded file in the database, and the read path serves it, hitting a cache first so popular files are not re-fetched from the datastore every time. Build on the basic web-app shape and add the read cache.
Lay out the architecture, then document the API for upload and fetch, and the trade-offs, such as when a cached copy should be invalidated.